Гауссовские распределения с PHP на 24-часовой период времени - PullRequest
3 голосов
/ 30 сентября 2008

Как я могу установить точки на 24-часовой период, распределенный по гауссовским распределениям? Например, чтобы пик был в 10 часов?

Ответы [ 2 ]

8 голосов
/ 30 сентября 2008

Следующий код генерирует гауссово распределенное случайное время (в часах, плюс доли часа) с центром в определенное время и с заданным стандартным отклонением. Случайное время может «обернуться» вокруг часов, особенно если стандартное отклонение составляет несколько часов: это обрабатывается правильно. Другой алгоритм «оборачивания» может быть более эффективным, если ваши стандартные отклонения очень велики (много дней), но в любом случае распределение будет почти равномерным.

$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;
2 голосов
/ 30 сентября 2008

Если у вас возникли проблемы с генерацией гауссовых распределенных случайных точек, посмотрите http://en.wikipedia.org/wiki/Box-Muller_transform

Остальное уточните, пожалуйста.

...