Генерация (Пуассона?) Случайной величины в режиме реального времени

У меня есть программа, работающая в режиме реального времени, с переменной частотой кадров, например, может быть 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 секунд.

Другие вопросы по тегам