2011-02-28 74 views
1

我想用「t」秒產生「到達」事件作爲平均到達間延遲?從時間0開始,如何產生事件發生的時間?基本上,當事件發生時,我想生成時間序列,如t1,t2,t3,...。我如何編寫這樣的功能?如何模擬泊松到達?

謝謝。

+0

請參閱此處的討論:[鏈接](http://stackoverflow.com/a/15307412/1650437) – jdbertron 2013-03-09 05:13:32

回答

2

最簡單的方法是計算基於「L」到達間隔延遲 下一個事件的時間。這是基於指數的累積 分佈函數:F(x)= 1 - e **( - lambda * x) 其中lambda是1/L,平均時間,x是時間量。

這可以解出x和以均勻的隨機數進料:

X = -ln(1-U)/λ,其中U是隨機值0..1。

從鏈接1

#include <math.h> 
#include <stdlib.h> 

float nextTime(float rateParameter) { 
    return -logf(1.0f - (float) random()/(RAND_MAX + 1))/rateParameter; 
} 

此鏈接提供了有關如何做到這一點加上例子 How to Generate Random Timings for a Poisson Process

注意,有一些可以用來 其它概率分佈函數的大量信息用於事件生成(統一,三角形等)。其中許多可以是由Boost的代碼或使用GNU Scientific Library(GSL)生成的 。

所以計算事件的時間: next_event = time()+ nextTime(D); following_event = next_event + nextTime(D); following_event = next_event + nextTime(D);

如果事件有一個持續時間,該持續時間可以是另一個獨立 泊松分佈,隨機分佈的,固定的時間間隔,等等。然而, 將需要檢查的時間間隔到下一個事件是不大於持續時間短 您正在模擬的事件:

deltaT = nextTime(MEAN_EVT); 
dur = nextTime(MEAN_DUR); 
if (deltaT <= dur) { 
    // either fix duration or get another event.... 
} 
2

Python包含random.expovariate這使得Python非常簡單。例如產生10個樣本:

import random 
random.expovariate(0.2) for i in range(10)] 

典型地,這將被轉換爲整數:

import random 
[int(random.expovariate(0.2)) for i in range(10)] 

由於this link