代理人根据泊松过程到达

agents arrival according to poisson process

我正在尝试根据泊松过程实现代理到达我的模型。我从数据中得知平均每天有 230 名代理到达(或 9.583 agents/hr 或 0.1597/分钟)。在模拟中,现在我需要使用这些信息来添加代理。一个模拟时间步长等于 5 分钟(实时),如果我们根据数据计算,那么平均每个时间步长要模拟 0.7986 个代理,以达到平均每天 230 个。但是我怎么能这样做呢?我不能在每个时间步使用 0.7986,因为我需要整数来添加代理。如果我将 0.7986 四舍五入为 1,那么我就高估了这一点。

很明显我们不能在每个时间步都添加代理,但我不知道如何 select 必须添加代理的时间步。如果我知道我需要 select 哪个时间步来添加代理,我可以很容易地做到这一点。 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))

我不太理解上面的代码,因为它产生的数字完全不同。请帮忙。

如果代理到达是泊松过程,则 个代理到达之间的时间呈指数分布。这就是您提供的代码生成的内容,但仅当您将连续时间与离散事件调度一起使用时才有用。使用时间步长作为时间推进机制,您实际上只想坚持泊松分布,调整速率以匹配您已经完成的时间步长间隔大小。

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,在这种情况下,内部循环将迭代零次。