- 電話交換機でのコールフロー
- 高速道路の車の流れ
- 技術サポートに電話をかける加入者の流れ
などなど。 これはすべて「シンプルストリーム」と呼ばれます。
明らかに、駅での呼び出しの数、高速道路上の車は各時点でランダムです。 リストから3つすべてが社会全体とその最適な存在にとって非常に重要であることを考えると、このフローをモデル化する方法を学ぶ必要があります。
特に重要なのは、リストの最後の項目です。コンピューターの単純な基本を知らないユーザーは非現実的になり、フローパラメーターを知っているため、その数を予測できます。
最も単純なフローの数学モデルには、いくつかのプロパティが必要です。
- 定常性。 これは、特定の期間に特定の数のイベントが発生する確率がセクションの長さにのみ依存し、このセクションの場所に依存しないことを意味します。
- 後遺症の欠如。 これは、次のことを意味します。2つの時間間隔が交差しない場合、それらのいずれかに該当するイベントの数は、別のサイトに該当するイベントの数に依存しません。
- 普通。 2つ以上のイベントが1つの十分に短い時間間隔に入る確率が無視できる場合、フローは通常です。
実際のイベントが時間間隔に分割される方法に応じて、このストリームが最も単純かどうかに依存することに注意してください。
たとえば、1日あたりの高速道路の車の流れは静止していないため、最も単純ではありません。日中は朝と夕方よりも車が少なく、ラッシュアワーの同じ流れはすでに最も簡単であると考えることができます。
ここでの主なことは、関心のある量が離散ポアソン分布に従うということです。
アルゴリズム
たとえば、パラメータaの値-テクニカルサポートへの呼び出しの平均数を与えて、分布則Po(a)に従うランダム変数Xを生成する必要があります。
例として選択したC#言語のRandomクラスには、このセグメントに均等に分布する0〜1の乱数を生成するSample()メソッドがあります。
それでは、実数から整数をどのように取得するのでしょうか? 確率論の専門家の観点から非常に単純な数学的計算を使用して、次のステートメントを証明できます。
区間[0; 1]に均一に分布した特定の数の独立した乱数があるとします。 次に、乱数の積Xが厳密にexp(-a)より小さくなるような最小の数値Xは、パラメーターaのポアソン分布に従います。
その結果、次のアルゴリズムが得られます。
class Poisson: Random { public static uint Generate(double a){ uint X = 0; double Prod = 1; double U = base.Sample(); Prod *= U; while (Prod >= Math.exp(-a)) { X++; U = base.Next(); Prod *= u; } return X; } } }
このアルゴリズムの計算の複雑さはO(a)ですが、実際には1つしか実行できない場合でも、ランダム変数を繰り返し生成する必要があります。
public static uint Generate(double a){ uint X = 0; double Prod = Math.Exp(-a); double Sum = Prod; double U = base.Sample(); while (U > Sum) { X++; Prod *= a/Convert.ToDouble(X); Sum += Prod; } return X; }
このアルゴリズムの複雑さもO(a)です。