Random banner rotation+tejest

15 отговора 383 прегледа
#1

Random banner rotation+tejest

zdrasti,

imam pitane. Nekoi da spodeli kak se pravi random banner rotation, obache bannerite da sa s 'tejest', t.e. spored nekakvi si uslovia veroyatnostta da izleze 1 banner se uvelichava ili namaliava... na vsichkoto otgore bannerite sa 2 vida:
1. na plateni klienti - te vsichki sa s ednakva tejest i sa on-top v spisaka...
2. na free klienti - te zapochvat vednaga sled spisaka na platenite, obache spored zavisi niakoi ot tiah se kachvat nagore v spisaka (no ne mogat da izlezat predi platenite...

nekoi da ima idea kak da stane tva???

Just a genius[email protected]
[линк]
Отговор
в отговор на Blake #2

Re: Random banner rotation+tejest

probvai cgi.net

tam imash takova utility deto pravi tova koeto opisvash

****
JD
jdbg.com

Отговор
в отговор на Blake #3

ето ти едно решение предложено от O`REILLY

Ами предполагам, че идеята е:

1. който за колкото е платил- толкова често да му се показва банера (например аз си плащам за 1000 показвания, а дядото си плаща само за 500 показвания. Тогава оценяваш всеки банер по някаква система с точки (например десетобална)

2. Има и безплатни банери- предполагам, това са банери, на хора, които слагат твой банер и тежестта на техния банер зависи от това, колко често те показват твоя банер! Също оценяваш банерите по точки (например пак по десетобалната система) и след това прибавяш към точките на платените банери по десет (т.е. точките на едните са от 1 до 10, а на другите от 11 до 20) и така- платините имат гарантирано по-висок статус от неплатените. Сега взимаш и си пишеш един генератор на случайни числа на Perl и използваш неравномерно разпределение на случайността. Например неравномерна поредица от случайни числа по закона на Гаус със стандартно отклонение единица:

sub gausian_rand {
my ($u1, $u2); #случайни числа с еднородно разпределение
my $w; #отклонение или коефициент на тежест
my ($g1, $g2); #числа с отклонение по закона на Гаус

do {
$u1 = 2 * rand() - 1;
$u2 = 2 * rand() - 1;
$w = $u1 * $u1 + $u2 * $u2;
} while ($w >= 1);

$w = sqrt((-2 * log($w)) / $w);
$g2 = $u1 * $w;
$g1 = $u2 * $w
#връща резултат:
return wantarray ($g1, $g2) : $g1;

Като имаш коефициенти на тежест, можеш да ги преобразуваш в вероятностно разпределение, като използваш следната подпрограма, където имаш два хеша, в единия подаваш коефициентите на тежест, а в другия получаваш вероятностното разпределение:

sub weight_to_dist {
my %weights = @_;
my %dist = ();
my $total = 0;
my ($key, $weight);
local $_;

foreach (values %weights) {
$total += $_;
}

while (($key, $weight) = each %weights) {
$dist{$key} = $weight/$total;
}
return %dist;
}

И след това използваш подпрограмата за генериране на случайно число с тежест:

sub weight_rand {
my %dist = @_;
my ($key, $weight);

while (1) {
my $rand = rand;
while (($key, $weight) = each %dist) {
return $key if ($rand -= $weight) < 0;
}
}
}

Коментари: подпрограмата gausian_rand реализира полярния метод на Бокс-Мюлер за преобразуване на две случайни числа независими едно от друго и с равномерно разпределение в интервала от 0 до 1 в две числа с математическо очакване нула и стандартно отклонение единица (т.е. разпределени по закона на Гаус) За да се получат числа с друго отклонение и математическо очакване- резултатите от подпрограмата се умножават на желаното отклонение и се прибавя математическото отклонение.

Подпрограмата weight_rand получава случайно число в интервала от 0 до 1. След това използва вероятностните разпределения генерирани от weight_to_dist и определя на кой елемент съотвества генерираното случайно чесло. Заради грешките от числа с плаваща дробна запетая, натрупването на грешки може да доведе до това, че елемента няма да бъде намерен (например имаш 10 елемента (разбирай банера), но се получава случайна стойност за 11 банер!) Затова на края на програмата има цикъл while, който в случай на кгешка избира ново случайно число.

Модула на CPAN Math::Random може да генерира множо различни видове случайни числа със стандартно отклонение или вероятностни разпределения!

Не ме питай много, това е от книгата на O`REILLY "PERL проблеми и решения"... Не е на български, затова ти го преведох, за превода гарантирам, а за програмите гарантира Орейли! Ако искаш друг вид стандартно отклонение (различно от закона на Гаус, можеш да намериш някои алгоритми в учебниците по статистика!)

Надявам се да съм бил полезен...

| Баба--- от времето, когато джапанката беше идеологически символ на капиталистическата диверсия---

така-а-а-а понеже май не стана много ясно за какво говоря, реших да внеса още малко яснота по въпроса за принципа на работа на генератора на случайни числа: виж картинката по-долу, представи си, че има много улеи от 0 до 1, през интервал от 0.00001- това са 10000 улея! Имаш случайно число, което е в един от тези улеи- числото е топче (представи си го като топче) и пада по този улей. Имаш три банера с различна тежест: с голяма, средна и малка вероятност да се падне! Съответно, всеки от тези банери (елементи) представлява удна от трите фунии отдолу, като фуниите имат еднакви гърла отдолу, но различни отгоре- горните символизират широчината на вероятносттния коефициент в процента от цялата дължина от 0 до 1! Съответно вероятността топчето да падне в най-голямата фуния е на-голяма, а вероятността да падне в най-малката фуния- най-малка. Мисля, че го обясних по-разбираемо отколкото е горе, нали? А ето и картинката за демонстрация на описанието:

Редактирано от БaбaИлиицa на

Отговор
в отговор на БaбaИлиицa #4

Re: ето ти едно решение предложено от O`REILLY

абе бабич, за това много акъл се иска бре ;) БРАОС !!!!!!

На мен преди ми трябваше същото и си го свалих от нета. От hotscripts.com . Има сума ти и скриптове написани и работят перфектно . Винаги обаче съм се чудел за зависимостите, сега ми е по ясна картинката. Ако ти се пише за такива неща - правя един проект и по цял ден само tutorials сами в главата. Та мисълта ми е, ако искаш да участваш, вкарай една бележка, ок !

Хората мислят, че историите се сътворяват от човека. Всъщност е точно обратното
Отговор
в отговор на Stipe #5

Re: ето ти едно решение предложено от O`REILLY

Ми попринцип, не аз съм го измислил, а Орейли и там тия, дето работят в издателството и пишат книжките! Обаче в книжката така е описано, че 50% от хората най-вероятно го прочитат и си казват "да бе- с такива глупости ще се занимавам- то тва е тъмна Индия!"... и до там приключва цялата работа! А в книжката има къде къде по-заплетени ситуации. Всъщност тя е пълна с нестандартни и рядко срещани проблеми, за които няма готови решения- и се дават идеи за разрешаването им. Например: знаш С, и искаш да го използваш в Perl- как да си превключиш режима на командите... и ей такива странности- аз за съжаление не знам С...

| Баба--- от времето, когато джапанката беше идеологически символ на капиталистическата диверсия---

Освен това имай предвид, че съм учил и статистика при доц. Манов, който сега е депутат от ДПС! С това шега не бива! Даже имах и 6 на изпита, а беше от тежките!

Редактирано от БaбaИлиицa на

Отговор
в отговор на БaбaИлиицa #6

Re: ето ти едно решение предложено от O`REILLY

baf maamu...

10x babo... ma tva napravo me gramna... basi debelite matematiki tuka... puk i perl ne znam osobeno mnogo ama sha sa probvam da go realiziram tva na PHP...

inache kat go poglednesh za prav pat moesh da se gramnesh napravo...

a gotov script ne iskam da si teglia, shtot pokray taa rabota trebe da napraa oshte 1000 neshta - reg-vane, log-vane, statistiki i kvi li ne drugi gluposti... i ne mi se shte da si igraa 2 sedmici da prepraviam nekuf gotov script da mi varshi tochno moite si neshta...

pak 10x za truda koito si farlil...

Just a genius[email protected]
[линк]
Отговор
в отговор на Blake #7

още малко разяснение---

Ми аз съм го чел и преди и ми беше вече ясно- след като дълго време го премислях как точно работи да го вземат дяволите. И като попита си спомних и го намерих, преведох го и го пуснах. Обаче после ти отивам на сайта и чета: знаеш PHP/JavaScript/малко Delphi HTML разбира се... Обаче за Perl нито дума! И си викам: Blake май няма да ме разбере много много и се намесих пак в темата за да внеса яснота. Мисля, че като знаеш принципа на работа- ще се справиш да го реализираш на който и да е програмен език, дори мисля, че и на JS може да се спретне такова нещо- само не съм сигурен, че JS има възможности да обработва хеш! Всъщност то хеш май има само в Perl- в PHP няма- но предполагам знаеш: това е масив, в който индексите на елементите са имена, а не номера, т.е. имаш двойки ключ-стойност, където ключа ти е номера на банера, а стойността е коефициента на съвпадение!

Единственото, което остана неясно по-мое мнение е преобразуването на коефициентите във вероятностно разпределение. Вероятностните разпределения са числа от 0 до едно, като сбора от всички вероятности трябва да е равен на единица. Изчисляват се, като се преобразува всеки от коефициентите в проценти от общото количество на коефициентите и се раздели на 100 например имаш три банера: с вероятностни коефициенти 1, 2 и 3 като този с коефициент 3 се пада три пъти по-често от този с коефициент едно! И сега: общия сбор на коефициентите е 1+2+3=6 3 е 50% от 6, 50/100=0.5- това е вероятностното разпределение за съответния банер номер три. Следва коефициента 2, две е 33.3% от 6, 33.3/100=0.333... това е вероятностното разпределение на втория банер. И накрая: 1 е 16.6% 16.6/100=0.1666... което е вероятностното разпределение на първия банер. Значи от един масив:
банер първи-1
банер втори-2
банер трети-3

трябва да получиш масив със следното съдържание:
банер първи-0.5
банер втори-0.333
банер трети-0.1666

и после мисля всичко ти е ясно!

А да: да не пропусна идеята за оценяването на банерито по две десетобални системи от 1 до 10 и от 11 до 20 концептуално е правилна, но няма да е ефективна и ще доведе до голямо отклонение в твоя случай: защо? Защото банер с коефициент 20 ще се върти 20 ПЪТИ повече от банер с коефициент 1... 20 ПЪТИ е много голяма разлика! Затова можеш да намалиш интервала между баловете в системана например на на 0.5 т.е.

система първа:

1
1.5
2
2.5
3

3.5
4
4.5
5
5.5

така ще се намали отклонението с около 4 пъти защото 5.5 е само 5.5 пъти повече от 1!

Апропо: нали си инженер- поне с такова впечатление останах- какво те плаши математиката? Все пак не става дума за нещо кой знае колко сложно! Е само в закона на Гаус има едно сложно изчисление с квадратен корен и логаритмична функция!

Апропо: като го преведеш от Perl на PHP- прати ми го на мейла ако не ти представлява проблем!

| Баба--- от времето, когато джапанката беше идеологически символ на капиталистическата диверсия---
Отговор
в отговор на БaбaИлиицa #8

Re: още малко разяснение---

ok, 10x

to tva sigur drugata sedmica shte mi doide na glavata, ama ako go napraa na PHP sha ti go prata

Just a genius[email protected]
[линк]
Отговор
в отговор на БaбaИлиицa #9

Я да видим :)

В php какво има:

$filesArr = Array (
'1.gif'=>'[линк]',
'2.gif'=>'[линк]',
'3.gif'=>'[линк]',
);

$akey = array_keys($filesArr);
$avalue = array_values($filesArr);

толкоз по въпроса.

bofh
Отговор
в отговор на bofh #10

Re: Я да видим :)

Абе не знам- според мен Perl е по ясен език... не претендирам, да го знам, ама се оправям. А всички казваха, че PHP много приличал на него- мене ако питаш: нищо подобно- различават се дори концептуално! Но както и да е, единствения недостатък на Perl пред достойнствата на PHP са проблемите при връзката с SQL- ако някой има идеи- съгласен съм да ги обсъди... Искам лесен достъп до базите данни, щото ми писна с тия текстови бази разделени със запетайки! А PHP не ми се учи тепърва- вече съм стар за такива смели начинания!

Баба...

| Баба--- от времето, когато джапанката беше идеологически символ на капиталистическата диверсия---
Отговор
в отговор на БaбaИлиицa #11

Re: Я да видим :)

Uhh mamka mu znaeh che trqbwashe da se zapoznaq s Gaus w TU ama az twzrdo ne...
Weche za n ti pat + 1 go wigdam, w upotreba, ama te matemetika...
Koi imashe tuka nqkakzw podpis na tema matematika... _
Qwno trqbwa weche da se podpiswam wig pzrwo w uchebnika po matematika
No towa opredeleno me izkefi....

Отговор
в отговор на wili98 #12

Re: Я да видим :)

А мене питаш ли ме: един семестър количествени методи в икономиката (разбирай го като висша мат. първа част) и после Статистика... и направо бях луднал от математика... А все пак специалността ми не е икономическа... пък и аз не си падам по математиката- когато е за разбиране го разбирам, обаче опре ли се до помнене- проблем ми е!

| Баба--- от времето, когато джапанката беше идеологически символ на капиталистическата диверсия---
Отговор
в отговор на БaбaИлиицa #13

какво мислите за тази моя идея

тук

bofh
Отговор
в отговор на БaбaИлиицa #14

Re: Я да видим :)

abe babinoto, tuka edin friend me svetna na edna dalavera, spored tebe dali varshi rabota tva:

znachi imash ot user1 do user5 primerno - plateni banneri i ot user6 do user 10 - free...
znachi vmesto da im davash tejesti na vseki pich, prosto v edin masiv slagash tolkova ednakvi item-i s ID-tata na saotvetnia pich, kolkoto im e tejestta, sled koeto taka poluchenia masiv go razbarkvash i teglish sluchaen element ot nego...
na men mi izglejda raboteshto tva... i veroyatnostta da se padne niakoi s po-goliama tejest e po-goliama (kakto pri drugia metod sas slojnite matematiki)

ko sha kaish za tfa???

Just a genius[email protected]
[линк]
Отговор
в отговор на Blake #15

ами става

Може разбира се, ама има малки разлики:

1. в онзи вариант могат автоматично да се променят вероятностните разпределения, щом се промени коефициента и е по-удобно, ако сменяш тежестта на банерите всеки ден или дори всяка седмица, а така трябва да пишеш нови масиви всеки път...

2. Там има една шашма с генерирането на едно случайно число от две други случайни числа- това всъщност е закона на Гаус и той прави случайно число с равномерно разпределение. Понеже генератора на PHP интерпретатора е зависим например от датата или часа на сървъра и други подобни условия!

Иначе- ако директно на въпроса ти: ДА СТАВА...

|когато гледате, виждайте дребните неща
|големите ги виждат всички
|но те нямат значение...
Отговор
в отговор на БaбaИлиицa #16

Re: ами става

abe za 1-wa tochka - masiva sha si sa prai avtomatichno seki put be.... niama da go pisha az...

a za PHP-randoma - se prai neshto kato seed-vane s microtime-a na servera, predpolagam ne e tolkoz tragichno...

sha go probvam tva, misla che shte stane

Just a genius[email protected]
[линк]
Отговор