在这个Matlab代码中,齐次和非齐次泊松分布之间没有区别

时间:2014-07-05 19:27:28

标签: matlab lambda distribution poisson

我需要实现具有不同概率分布的流量模型。我有这个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), ']',])

谢谢,

2 个答案:

答案 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页)。

算法如下:

  1. 设置t = 0,n = 0且i = 0。
  2. 将i增加1。
  3. 生成独立的随机变量U(i)~U(0,1)。
  4. 设置t = t - (1 /λ)* ln(U(i))。
  5. 如果t> T,停止;否则,继续。
  6. 生成独立的随机变量V(i)~V(0,1)。
  7. 如果V(i)<=λ(t)/λ,则将n增加1并设置T(n)= t。转到第2步。
  8. 其中λ= 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)']);