我想用「t」秒產生「到達」事件作爲平均到達間延遲?從時間0開始,如何產生事件發生的時間?基本上,當事件發生時,我想生成時間序列,如t1,t2,t3,...。我如何編寫這樣的功能?如何模擬泊松到達?
謝謝。
我想用「t」秒產生「到達」事件作爲平均到達間延遲?從時間0開始,如何產生事件發生的時間?基本上,當事件發生時,我想生成時間序列,如t1,t2,t3,...。我如何編寫這樣的功能?如何模擬泊松到達?
謝謝。
你不說什麼語言 - 但看看Generate (Poisson?) random variable in real-time
最簡單的方法是計算基於「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....
}
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。
請參閱此處的討論:[鏈接](http://stackoverflow.com/a/15307412/1650437) – jdbertron 2013-03-09 05:13:32