Excelによる、GI/G/1待ち行列の簡易シミュレート

Marshallの公式に向けて(1)」でご紹介したことを応用して、ExcelGI/G/1待ち行列をシミュレートすることが出来ます。その仕方をご紹介しましょう。
Marshallの公式に向けて(1)」でご紹介しましたように、n番目に到着した客の待ち時間をW_n、サービス時間をB_nn番目とn+1番目の客の到着間隔をA_nとすれば、

  • W_{n+1}=\max(0,W_n+B_n-A_n)・・・・(1)

となります。この式が成立する理由は「Marshallの公式に向けて(1)」に述べましたので、そこを参照下さい。この式を用いてExcelでシミュレートします。以下、説明の都合上客の到着間隔A_nについては、少し定義を変えてn-1番目とn番目の客の到着間隔をA_nであると定義し直します。こうするとn番目とn+1番目の客の到着間隔はA_{n+1}となります。また、A_1=0とします。こうすると式(1)は以下のようになります。

  • W_{n+1}=\max(0,W_n+B_n-A_{n+1})・・・・(2)


ExcelのA1に「n」、B1に「到着間隔」、C1に「処理時間」、D1に「待ち時間」を入力します。


次にA2に「1」、B2に「0」、D2に「0」を入力します。


C2、C3、C4以下、C列には処理時間が入るのですがこれは確率変数です。例えば処理時間が平均6の2次のアーラン分布であるとしましょう。そうすると、それは「=GAMMAINV(RAND(),2,3)」で表されます。というのは、「ガンマ分布」のところで示したように2次のアーラン分布は\alpha=2のガンマ分布で表すことが出来、さらに「ガンマ分布の平均と標準偏差」の式(5)で示したように平均mとガンマ分布の2つのパラメータ\alpha\betaの間には

  • m=\alpha\beta

という関係があるので、これを用いれば\beta=3になるからです。よってこの分布における、ある値xの累積確率密度はEXCELでは「GAMMADIST(x,2,3,TRUE)」の形で書けます。逆にその確率密度に従ってxを変動させるためには、EXCELにおける「RAND()」(=乱数)が0から1までの区間の一様分布で変動することを考慮すれば、「GAMMAINV(RAND(),2,3)」とすればよいことが分かります(「Excelで確率変数を実現する方法」参照)。よってC2に「=GAMMAINV(RAND(),2,3)」を入力します。


次にA3に「2」を入力します。B3,B4,B5以下、B列には到着間隔が入るのですがこれは確率変数です。例えば到着間隔が平均8の指数分布であるとします。そうすると上記と同じように考えてそれは「=-8*LN(RAND())」になります。よってB3に「=-8*LN(RAND())」を入力します。C3にはC2をコピーします。D3には、式(2)を表す「=MAX(0,C2+D2-B3)」を入力します。


次にA3:D3の部分を選択して、下に好きなだけドラッグします。


こうすることによって、1からn番目までの到着間隔、処理時間、待ち時間が表示されることになります。A列は、nを表しています。この行を大きくして(たとえば1000行)そこに現れた待ち時間(D列)を平均すれば、シミュレーションによる平均待ち時間を求めることが出来ます。
以上でGI/G/1待ち行列がシミュレート出来ました。