Генерация (Пуассона?) Случайной величины в режиме реального времени
У меня есть программа, работающая в режиме реального времени, с переменной частотой кадров, например, может быть 15 кадров в секунду, может быть 60 кадров в секунду. Я хочу, чтобы событие происходило в среднем раз в 5 секунд. В каждом кадре я хочу вызывать функцию, которая принимает время с момента последнего кадра в качестве входного и возвращает True в среднем один раз каждые 5 секунд прошедшего времени, если он вызван. Я думаю, что-то делать с распределением Пуассона.. как бы я это сделал?
2 ответа
Это действительно зависит от того, какой дистрибутив вы хотите использовать, все, что вы указали, было средним. Я бы, как вы сказали, ожидал, что дистрибутив Пуассона удовлетворит ваши потребности, но вы также добавили в заголовок "равномерную случайную переменную", которая является другим дистрибутивом, в любом случае давайте просто перейдем к первому.
Таким образом, если вы хотите получить распределение Пуассона, вы можете легко сгенерировать выборки, используя функцию кумулятивной плотности. Просто следуйте псевдокоду здесь: Генерация пуассоновских RV, с 5 секундами, являющимися вашим значением для лямбды. Давайте назовем эту функцию Poisson_RN().
Алгоритм на данный момент довольно прост.
global float next_time = current_time()
boolean function foo()
if (next_time < current_time())
next_time = current_time() + Poisson_RN();
return true;
return false;
Случайная переменная, которая генерирует истинные / ложные результаты в фиксированных пропорциях с независимыми испытаниями, называется геометрической случайной величиной. В любой период времени сгенерируйте true с вероятностью 1/(5*fps), и в долгосрочной перспективе вы получите в среднем одно значение true за 5 секунд.