прибытие агентов по пуассоновскому процессу - PullRequest
0 голосов
/ 29 мая 2018

Я пытаюсь добиться прибытия агентов в мою модель в соответствии с пуассоновским процессом.Из данных я знаю, что в среднем 230 агентов прибывают в день (или 9,583 агента в час или 0,1597 в минуту).В симуляции теперь мне нужно использовать эту информацию для добавления агентов.Один шаг по времени моделирования равен 5 минутам (в режиме реального времени), и если, если мы рассчитываем по данным, то в среднем 0,7986 агентов должны добавляться к моделированию на каждом временном шаге, чтобы достичь в среднем 230 в день.Но как я мог это сделать?Я не могу использовать 0,7986 за шаг по времени, потому что мне нужно целое число, чтобы добавить агента.Если я округлю 0,7986 до 1, то переоцениваю это.

Ясно, что мы не можем добавлять агент каждый раз, но я понятия не имею, как выбрать временной шаг, в который должен быть добавлен агент.Если я знаю, какой временной шаг мне нужно выбрать, чтобы добавить агента, я могу сделать это легко.Кто-нибудь знает, как это сделать в Python?Я попробовал приведенный ниже код, но не могу понять, что это на самом деле

for i in range(1,12): # 1 simulation time step is equal 5min, so this loops covers 1 hour. 
    time=int(random.expovariate(1/0.7986))

Я не совсем понимаю приведенный выше код, поскольку он выдает совершенно разные числа.Любая помощь, пожалуйста.

1 Ответ

0 голосов
/ 29 мая 2018

Если прибытие агента является пуассоновским процессом, то время между прибытием отдельного агента имеет экспоненциальное распределение.Это то, что генерирует предоставленный вами код, но он полезен, только если вы используете непрерывное время с дискретным планированием событий.С временным шагом в качестве механизма продвижения по времени, вы на самом деле просто хотите придерживаться распределения Пуассона, регулируя скорость в соответствии с размером интервала временного шага, который вы уже сделали.

import numpy

last_step = 12 * 24   # to simulate one day, for example
rate = 230.0 / last_step
for time_step in range(1, last_step + 1):
    number_of_new_agents = numpy.random.poisson(rate)
    for new_agent_number in range(number_of_new_agents):
        # do whatever you want at this point

Примечаниечто number_of_new_agents часто будет 0, в этом случае внутренний цикл будет повторяться ноль раз.

...