我需要实现具有不同概率分布的流量模型。我有这个Matlab代码(感谢S. Dharmaraja):
lambda=input('Enter The arrival Rate:'); % arrival rate
Tmax=input('Enter maximum time:'); % maximum time
clear T;
T(1)= 0;
a=input('Enter constant a>0:');
b=input('Enter constant b<1:');
S(1)=0;
i=1;
while T(i) < Tmax,
U(i)=rand(1,1);
T(i+1)=T(i)-(1/lambda)*(log(U(i))); % Homogeneous Poisson Distr.
lambdat=a*(T(i+1))^(-b);
u(i)=rand(1,1);
if u(i)<=lambdat/lambda % <-- Here is my doubt/question
i=i+1;
S(i)=T(i); % <-- Here is my doubt/question
end
end
stairs(S(1:(i)), 0:(i-1));
title(['A Sample path of the non homogeneous Poisson process']);
xlabel(['Time interval']);
ylabel([' Number of event ']);
在这段代码中,有两个lambdas。第一个lambda“λ_rate”是到达率,第二个lambda是λ(t)= a * t ^ -b。
可以看出,有一个循环重复直到λ(t)/λ_rate> = rand(0,1)。那么当满足这个条件时会发生什么? S(i)= T(i),这意味着存储了均匀泊松分布的值。
同质和非同质之间有什么区别?对我来说,区别在于,在第二种情况下,迭代次数多于第一种情况,但最终图表相等。
您有什么看法?
PD;我把代码放在同类的情况下。
lambda=input('Enter The arrival Rate:'); % arrival rate
Tmax=input('Enter maximum time:'); % maximum time
clear T;
T(1)= 0;
i=1;
while T(i) < Tmax,
U(i)=rand(1,1);
T(i+1)=T(i)-(1/lambda)*(log(U(i)));
i=i+1;
end
T(i)=Tmax;
stairs(T(1:(i)), 0:(i-1));
title(['A Sample path of the Poisson process with arrival rate ', num2str(lambda)])
xlabel(['Time'])
ylabel(['Number of Arrivals in [0,', num2str(Tmax), ']',])
谢谢,
答案 0 :(得分:1)
这是一种称为“细化”的技术,是invented by Lewis & Shedler in 1978。您可以通过速率lambda max 的到达间隔调度生成齐次泊松过程,这是在感兴趣的区间内发生的最高速率。在时间t的给定候选事件通过以概率λ(t)/ lambda max 接受它或者拒绝它并继续前进到下一个候选者而经历“变薄”。这会将接受的事件时间集调整为实际的非同类到达率。
例如,考虑使用
的非齐次泊松过程 | 5 for t in [0,2),[3,5];
lambda(t) = |
| 0 for t in [2,3).
通过细化,前2个时间单位平均可以出现10次,在2和3次之间根本没有,然后恢复,其余2个单位的平均值为10。如果您尝试使用瞬时速率生成下一个到达时,您将在2到3之间的某个时间到达一个(禁止)到达,然后由于瞬时到达率而无法重新启动为零,您的下一次到达将在无限时间内发生。 (好吧,有一些机会在第2和第3时间之间没有到达,但更广泛的一点是大多数时候你会遇到麻烦。)
答案 1 :(得分:1)
我用解决方案回答了自己。该代码由student编写,遵循鲁宾斯坦和克鲁斯的“模拟和蒙特卡罗方法”一书的算法“2.6.3生成非齐次泊松过程”(第71页)。
算法如下:
其中λ= max(λ(t))。
当λ(t)<=λ时,我改变了带有原始代码的函数:
lambdat = lambda*(1.2+cos(2*pi*T(i+1)/(Tmax/25)))/2.2;
其中Tmax / 25是函数的周期。
最终代码是:
lambda=input('Enter The arrival Rate:'); % arrival rate
Tmax=input('Enter maximum time:'); % maximum time
clear T;
T(1)= 0;
Per=input('Enter period of cosine: ');
T(1)=0;
n=0;
i=1;
while T(i) <= Tmax
U(i) = rand(1,1);
T(i+1) = T(i) - ((1/lambda)*log(U(i)));
if T(i+1) > Tmax
break;
end
lambdat = lambda*(1.2+cos(2*pi*T(i+1)/(Tmax/Per)))/2.2;
V(i) = rand(1,1);
if V(i) <= lambdat/lambda
n = n+1;
S(n) = T(i);
Y(n)= lambdat;
end
i = i+1;
end
figure(1);
stairs(S(1:(n)), 0:(n-1));
title(['A Sample path of the non homogeneous Poisson process']);
xlabel(['Time interval']);
ylabel([' Number of event ']);
figure(2);
plot(S(:),Y(:),'*');
title(['lambda(t)']);