Мне нужен эффективный алгоритм и / или код для моделирования распределения Пуассона системы - PullRequest
3 голосов
/ 13 января 2012

Э-э, этот заголовок не очень хорош.

Вот ситуация.

У меня есть симуляция, которая работает в режиме реального времени, я пытаюсь эффективно имитировать скорость случайного счетакоторый имеет известное значение ожидания в течение определенного времени дельты, а распределение вероятностей имеет известное стандартное отклонение, дисперсию и т. д. и т. д.

Я хочу только целое число отсчетов, то есть для последовательных времен дельты Iполучить результаты, такие как 2, 1, 0, 3, 1, 2, 0, 1.

В настоящее время я просто умножаю количество отсчетов в секунду на время дельты в секундах и добавляю это в переменную подсчетов,и для отображения я округляю его, приводя к int из float.В конце концов, это не отрежет горчицу = (

Я бегу ~ 60 кадров в секунду и не хочу убивать процессоры людей, если смогу помочь.

Что быхороший способ сделать это эффективно (я использую Java)?

Ответы [ 2 ]

2 голосов
/ 13 января 2012

Звучит как Экспоненциальное распределение / Процесс Пуассона может быть подходящим.Экспоненциальное распределение моделирует время между появлениями дискретного события.Лямбда-параметр представляет скорость поступления событий.Процесс Пуассона обеспечивает альтернативное представление того же базового процесса, давая вам количество (целое число от 0 до + inf) событий, которые произошли в определенный период времени.
Распределение Пуассона довольно легко моделировать.Лямбда Пуассона представляет ожидаемое количество событий за интервал времени и может моделироваться таким образом .
Один из способов проверить, является ли это адекватным способом представления / моделирования вашего процесса, - это проверкачто среднее значение, дисперсия и т. д. удовлетворяют, какими они должны быть, если бы следовали такому процессу.

0 голосов
/ 13 января 2012

Выезд Random.nextGaussian().Возвращает случайное число со средним 0,0 и SD 1,0.Вы можете использовать его с масштабированием и смещением для генерации ваших данных.

Например, если вы хотите среднее значение 7 с SD 3, используйте

Random myRandom = new Random();
...

Double nextValue = 7.0 + myRandom.nextGaussian()*3.0;
...