Chcę dokonać niestandardowej ekstrakcji loterii, aby zmotywować użytkowników do udziału w eksperymencie online. Zasady są:Algorytm loterii - PHP - matematyka wydaje się dobra, ale czy funkcja jest ważna?
- 10%, aby uzyskać 10 dolarów
- 1% szans na zdobycie 50 dolarów
- 0,1% szans na zdobycie 500 $
loterii jest funkcja PHP, który pobiera zadzwonił raz i zwrócił nagrodę (0, 10, 50 lub 500). Stworzyłem funkcję poniżej, a po 70 000 badań statystyki to:
- 9,11% do 10 $
- 0,91% do 50 $
- 0,01% do 500 $
Czy powinienem się martwić o algorytm? Czy istnieje lepszy sposób na stworzenie dobrego rozkładu szans niż mt_rand?
function lottery() {
// winnings before extraction
$win=0;
// choose a winning number between 1 and 10
$target=mt_rand(1,10);
// make three independent extractions, each with 1/10 probability
if (mt_rand(1,10) == $target) {
// if first extraction is the winning number -> prize=10
// probability: 1/10
$win=10;
if (mt_rand(1,10) == $target) {
// if second extraction is ALSO the winning number -> prize=50
// probability: 1/10 * 1/10
$win=50;
if (mt_rand(1,10) == $target) {
// if third extraction is ALSO the winning number -> prize=500
// probability: 1/10 * 1/10 * 1/10
$win=500;
}
}
}
// return the prize
return $win;
}
Dziękujemy za pomoc początkującym!
Jeśli spojrzeć na 10 dolarów ceny to odchylenie od średniej wynosi 0,89, co jest o wiele więcej niż standardowe odchylenie (sqrt (0,1 * 0,9)/sqrt (70000) ~ = 0,0011). Więc coś jest (prawdopodobnie) dzieje się tutaj źle, chociaż nie jestem w stanie tego zauważyć. – vib
Nawiasem mówiąc, wartość docelowa nie musi być losowa. Powinien również działać test '10 * mt_rand()
Jeszcze innym sposobem jest narysowanie w zakresie '(0,999)' i sprawdzenie dla '0 -', '00-' lub '000'. –