假设我们有一个服务,其中有#个请求,我们每小时添加这些请求,比如从12-1
和1-2
等。所以我想做的是生成这些数量的请求,这些请求跟随泊松到达,然后将其添加到表示一周中某一天的字典中
monday = [hour_range, number_of_clients_in_that_hour]
最后,我们将有7个字典命名为from 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())
阻力最小的途径是使用来自numpy的内置泊松发生器。 但是,如果您想自己动手,下面的代码就可以了:
这是基于泊松事件具有指数分布的到达时间间隔这一事实,因此可以generate exponentials直到它们的总和超过指定的速率。这个实现稍微聪明一点,尽管通过对求和/阈值关系的两侧进行指数化,对数求值的和变成简单的乘法,并且结果可以与预先计算的指数化阈值进行比较。这在代数上与指数随机变量之和相同,但它执行单个指数运算和lambda乘法的平均值,而不是lambda log求值的平均值求和。你知道吗
最后,无论你使用哪种发电机,你都需要知道它的速率。记住poisson是鱼的法语单词,prob&stats中最糟糕的笑话之一是“poisson标度”。这意味着小时费率可以通过简单地乘以24(一天中的小时数)转换为每日费率。例如,如果平均每小时3次,则平均每天72次。你知道吗
泊松过程的到达间隔时间(在通常的简化假设下)是指数分布的。在这种建模工作中,通常使用的是到达时间,而不是父进程。你知道吗
下面是如何使用著名的Python库获得Poisson进程每小时的计数。注意,
scale
是泊松参数的倒数。你知道吗你也问过“任何其他真正代表这种情况的到来”。这是一个经验问题。我想说的是,为你正在研究的系统收集尽可能多的稳态到达时间,并尝试对它们拟合一个累积分布函数。如果你想讨论这个问题,请再提一个问题。你知道吗
相关问题 更多 >
编程相关推荐