bia*_*ias 11 c++ random poisson stochastic-process
我想生成一个泊松过程.如果到时间t的到达次数是N(t)并且我有一个带参数λ的泊松分布,我该如何产生N(t)?我将如何在C++中执行此操作?
我原本想用泊松分布生成过程.但是,我对我需要的过程中的参数感到困惑; 我以为我可以使用N(t),但是它告诉我在间隔(0,t)上发生了多少到达,这不是我想要的.所以,我认为我可以使用N(t2)-N(t1) )获得区间[t1,t2]上的到达次数.由于N(t)〜泊松(tx lambda),我可以使用Poisson(t2 x lambda)-Poisson(t1 x lambda)但我不希望一个区间内的到达人数.
相反,我想生成到达时出现的明确时间.
我可以通过使间隔[t2,t1]足够小以使每个间隔只有一个到达(发生为| t2-t1 | - > 0)来做到这一点.
小智 22
如果你有一个带速率参数L的泊松过程(意味着,长期,每秒有L个到达),则到达间隔时间是指数分布的,平均值为1/L. 因此PDF是f(t)= -L*exp(-Lt),并且CDF是F(t)= Prob(T <t)= 1-exp(-Lt).所以你的问题变成了:如何生成一个随机数t,其分布为F(t)= 1 - \exp(-Lt)?
假设您使用的语言具有一个函数(让我们称之为rand())来生成均匀分布在0和1之间的随机数,则逆CDF技术将减少到计算:
-log(rand()) / L
Run Code Online (Sandbox Code Playgroud)
由于python提供了生成指数分布随机数的函数,因此您可以模拟泊松过程中的前10个事件,每秒15个到达率的平均速率如下:
import random
for i in range(1,10):
print random.expovariate(15)
Run Code Online (Sandbox Code Playgroud)
请注意,这将产生*inter*到达时间.如果你想要到达时间,你必须像这样继续向前移动一个时间变量:
import random
t= 0
for i in range(1,10):
t+= random.expovariate(15)
print t
Run Code Online (Sandbox Code Playgroud)