Desidero effettuare un'estrazione di lotteria personalizzata per motivare gli utenti a partecipare a un esperimento online. Le regole sono:Algoritmo della lotteria - PHP - la matematica sembra buona, ma la funzione è valida?
- 10% per ottenere $ 10
- 1% di possibilità di ottenere 50 $
- 0,1% di possibilità di ottenere 500 $
la lotteria è una funzione PHP che ottiene chiamato una volta e restituisce il premio (0, 10, 50 o 500). Ho creato la funzione di seguito, e dopo 70 000 prove le statistiche sono:
- 9,11% per 10 $
- 0,91% per 50 $
- 0,01% per 500 $
Dovrei essere preoccupato dell'algoritmo? C'è un modo migliore per creare una buona distribuzione di possibilità rispetto a 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;
}
Grazie per l'aiuto a un principiante!
Se si guardano le 10 $ prezzi poi la deviazione dalla media è di 0.89 che è molto più della deviazione standard per esso (sqrt (0.1 * 0.9)/sqrt (70000) ~ = 0.0011). Quindi qualcosa è (molto probabilmente) andando storto qui, anche se non sono in grado di individuarlo. – vib
A proposito, il valore obiettivo non deve essere casuale. Anche il test '10 * mt_rand()
Un altro modo è disegnare nell'intervallo '(0,999)' e controllare '0 -', '00-' o '000'. –