Генерация (Пуассона?) Случайной величины в режиме реального времени - PullRequest
3 голосов
/ 14 февраля 2011

У меня есть программа, работающая в режиме реального времени, с переменной частотой кадров, например, может быть 15 кадров в секунду, может быть 60 кадров в секунду.Я хочу, чтобы событие происходило в среднем раз в 5 секунд.В каждом кадре я хочу вызывать функцию, которая принимает время с момента последнего кадра в качестве входного и возвращает True в среднем один раз каждые 5 секунд прошедшего времени, если он вызван.Я думаю, что-то связанное с распределением Пуассона .. как бы я это сделал?

Ответы [ 2 ]

4 голосов
/ 14 февраля 2011

Это действительно зависит от того, какой дистрибутив вы хотите использовать, все, что вы указали, было средним. Я бы, как вы сказали, ожидал, что дистрибутив Пуассона удовлетворит ваши потребности, но вы также добавили в заголовок «равномерную случайную переменную», которая является другим дистрибутивом, в любом случае давайте просто перейдем к первому.

Таким образом, если вы хотите получить распределение Пуассона, вы можете легко сгенерировать выборки, используя функцию кумулятивной плотности. Просто следуйте псевдокоду здесь: Генерация пуассоновских RVs , с 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;
0 голосов
/ 24 октября 2013

Случайная переменная, которая генерирует истинные / ложные результаты в фиксированных пропорциях с независимыми испытаниями, называется Геометрическая случайная величина .В любой период времени сгенерируйте значение true с вероятностью 1 / (5 * fps), и в долгосрочной перспективе вы получите в среднем одно значение true за 5 секунд.

...