我试图根据泊松过程让代理人到达我的模型。我从数据中了解到,平均每天有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))
我不太了解上面的代码,因为它产生了完全不同的数字。请帮忙。
答案 0 :(得分:1)
如果代理人到达是一个泊松过程,那么个人代理人到达之间的时间具有指数分布。这就是您提供的代码生成的内容,但仅在您使用连续时间和离散事件调度时才有用。使用时间步长作为时间提前机制,您实际上只想坚持泊松分布,调整速率以匹配您已经完成的时间步长间隔大小。
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,在这种情况下,内循环将迭代零次。