代码之家  ›  专栏  ›  技术社区  ›  HT121

根据泊松过程到达代理

  •  0
  • HT121  · 技术社区  · 6 年前

    我试图根据泊松过程在我的模型中实现代理到达。我从数据中知道,平均每天有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 回复  |  直到 6 年前
        1
  •  1
  •   pjs    6 年前

    如果代理到达是一个泊松过程,那么时间 之间 单个代理到达具有指数分布。这就是您所提供的代码所生成的,但只有当您在离散事件调度中使用连续时间时才有用。使用时间步作为时间推进机制,您实际上只需要坚持泊松分布,调整速率以匹配您已经完成的时间步间隔大小。

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

    推荐文章