代码之家  ›  专栏  ›  技术社区  ›  Amarjit Dhillon

在python中创建每天每小时到达Poission的请求数

  •  0
  • Amarjit Dhillon  · 技术社区  · 7 年前

    假设我们有一个服务,其中有#个请求,我们会按小时添加这些请求,比如从 12-1 1-2 等等,我想做的是生成这些数量的请求,这些请求跟随泊松到达,然后将其添加到表示一周中某一天的字典中

     monday = [hour_range, number_of_clients_in_that_hour]
    

    最后,我们将把这7本字典命名为 Mon to Sunday 在此基础上,可以使用一些线性回归来预测某一天下一个小时的客户数量。

    所以基本上,当我用python模拟这个场景时,我需要做出一个表示这种场景的到达。我使用以下代码生成 # of clients in an hour 使用均匀分布。我如何处理泊松到达或任何其他真正代表这种场景的到达?我的代码如下

    day_names = ['mon','tue','wed','thurs','fri','sat','sun']
    
    time_values = np.linspace(1,23,23,dtype='int') # print from 1,2...23
    
    for day_iterator in range(1,7+1): 
    
         number_of_clients = [] # create empty list that will hold number of clients
            for i in range(1,24,1): #  lets create no. of clients for a day on an hourly basis in this for loop
                rand_value =  random.randint(1,20) # generate number of clients
    
                number_of_clients.append(rand_value)  # append the number of clients to this list
    
            # a single day data is generated after this for
            locals() [day_names[day_iterator-1]] = dict(zip(time_values,number_of_clients)) # create dict for each day of a week
    
    
        # print each day
        print "monday = %s"%mon
        print "tuesday = %s"%tue
        print "wed = %s"%wed
        print "thurs = %s"%thurs
        print "fri = %s"%fri
        print "sat = %s"%sat
        print "sun = %s"%sun
    
        plt.plot(mon.keys(),mon.values())
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   pjs    7 年前

    电阻最小的路径是使用来自的内置泊松生成器 numpy . 但是,如果您想自己动手,以下代码可以实现这一目的:

    import math
    import random
    
    def poisson(rate):
        x = 0
        product = random.random()
        threshold = math.exp(-rate)
        while product >= threshold:
            product *= random.random()
            x += 1
    
        return x
    

    generate exponentials 直到它们的总和超过您指定的利率。这种实现稍微聪明一些,但通过对求和/阈值关系的两侧求幂,对数求值之和变成简单的乘法,结果可以与预先计算的求幂阈值进行比较。这在代数上与指数随机变量之和相同,但它执行单次指数运算和lambda乘法的平均值,而不是对lambda log求值的平均值求和。

    最后,无论使用哪种生成器,都需要知道速率。记住poisson是法语中fish的意思,是prob&统计是“泊松尺度”的表述这意味着,只需将一天中的小时数乘以24,即可将小时费率转换为每日费率。例如,如果平均每小时3次,则平均每天72次。

        2
  •  1
  •   Bill Bell    7 年前

    泊松过程的到达时间(使用通常的简化假设)呈指数分布。在这种建模工作中,通常使用的是到达时间间隔,而不是父过程。

    下面是如何使用著名的Python库获得泊松过程每小时的计数。请注意 scale 与泊松参数相反。

    >>> def hourly_arrivals(scale=1):
    ...     count = 0
    ...     while expon.rvs(scale=scale, size=1) < 1:
    ...         count += 1
    ...     return count
    ... 
    >>> hourly_arrivals()
    0
    >>> hourly_arrivals()
    8
    >>> hourly_arrivals()
    0
    >>> hourly_arrivals()
    1
    >>> hourly_arrivals()
    4
    >>> hourly_arrivals()
    0
    >>> hourly_arrivals()
    2
    

    您还询问了“任何其他真正代表这种情况的抵达”。这是一个经验问题。我要说的是,为正在研究的系统收集尽可能多的稳态到达时间,并尝试为其拟合累积分布函数。如果你想讨论这个问题,请提出另一个问题。