平均到着間隔遅延として「t」秒で「到着」するイベントを生成したいですか? 時刻 0 から開始して、イベントが発生した時刻を生成するにはどうすればよいですか? 基本的に、イベントが発生したときに、t1、t2、t3、... などの時間のシーケンスを生成したいと考えています。そのような関数をどのように書くのですか?
ありがとうございました。
平均到着間隔遅延として「t」秒で「到着」するイベントを生成したいですか? 時刻 0 から開始して、イベントが発生した時刻を生成するにはどうすればよいですか? 基本的に、イベントが発生したときに、t1、t2、t3、... などの時間のシーケンスを生成したいと考えています。そのような関数をどのように書くのですか?
ありがとうございました。
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)]
このリンクに感謝します。
あなたはどの言語を言っていませんが、リアルタイムで生成(ポアソン?)ランダム変数を見てください
最も簡単な解決策は、「L」の到着間隔遅延に基づいて次のイベントの時間を計算することです。これは、指数関数の累積分布関数に基づいています: F(x) = 1 - e**(-lambda * x) ここで、lambda は 1/L、平均時間、x は時間です。
これを x について解いて、一様乱数を与えることができます。
x = -ln(1-U)/lambda ここで、U はランダムな値 0..1 です。
リンクから1 :
#include <math.h>
#include <stdlib.h>
float nextTime(float rateParameter) {
return -logf(1.0f - (float) random() / (RAND_MAX + 1)) / rateParameter;
}
このリンクは、それを行う方法に関する多くの情報と 、ポアソン過程のランダムなタイミングを生成する方法の例を提供します
イベント生成に使用できる確率分布関数は他にもあることに注意してください (uniform、triangle など)。これらの多くは、Boost のコードまたは GNU Scientific Library (GSL) を使用して生成できます。
イベントの時間を計算するには: next_event = time() + 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....
}