Bir 24 saat süre üzerinde PHP ile Gauss dağılımları

2 Cevap php

Nasıl Gauss dağılımları tarafından yayılan bir 24 saat süre noktaları ayarlayabilirsiniz? 10:00 de zirve için örnek için?

2 Cevap

Aşağıdaki kod, belirli bir zamanda merkezli bir Gauss rastgele dağıtılmış (saat olarak, ayrıca bir saat fraksiyonların) süresi oluşturur ve belirli bir standart sapma ile. Rasgele zamanlarda standart sapma birkaç saat, özellikle saat 'sarmak' olabilir: Bu doğru işlenir. Standart sapmalar (kaç gün) çok büyük eğer farklı bir 'sarma' algoritması daha verimli olabilir, ancak dağıtım neyse, bu durumda neredeyse üniforma olacak.

$peak=10; // Peak at 10-o-clock
$stdev=2; // Standard deviation of two hours
$hoursOnClock=24; // 24-hour clock

do // Generate gaussian variable using Box-Muller
{
    $u=2.0*mt_rand()/mt_getrandmax()-1.0;
    $v=2.0*mt_rand()/mt_getrandmax()-1.0;
    $s = $u*$u+$v*$v;
} while ($s > 1);
$gauss=$u*sqrt(-2.0*log($s)/$s);

$gauss = $gauss*$stdev + $peak; // Transform to correct peak and standard deviation

while ($gauss < 0) $gauss+=$hoursOnClock; // Wrap around hours to keep the random time 
$result = fmod($gauss,$hoursOnClock);     // on the clock

echo $result;

Eğer sorun varsa üreten Gauss dağılımlı rasgele sayı bakmak http://en.wikipedia.org/wiki/Box-Muller_transform

Else Sorunuzu netleştirmek lütfen.