Excelによる、GI/G/1待ち行列の簡易シミュレート
「Marshallの公式に向けて(1)」でご紹介したことを応用して、Excelで待ち行列をシミュレートすることが出来ます。その仕方をご紹介しましょう。
「Marshallの公式に向けて(1)」でご紹介しましたように、番目に到着した客の待ち時間を、サービス時間を、番目と番目の客の到着間隔をとすれば、
- ・・・・(1)
となります。この式が成立する理由は「Marshallの公式に向けて(1)」に述べましたので、そこを参照下さい。この式を用いてExcelでシミュレートします。以下、説明の都合上客の到着間隔については、少し定義を変えて番目と番目の客の到着間隔をであると定義し直します。こうすると番目と番目の客の到着間隔はとなります。また、とします。こうすると式(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次のアーラン分布はのガンマ分布で表すことが出来、さらに「ガンマ分布の平均と標準偏差」の式(5)で示したように平均とガンマ分布の2つのパラメータとの間には
という関係があるので、これを用いればになるからです。よってこの分布における、ある値の累積確率密度は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から番目までの到着間隔、処理時間、待ち時間が表示されることになります。A列は、を表しています。この行を大きくして(たとえば1000行)そこに現れた待ち時間(D列)を平均すれば、シミュレーションによる平均待ち時間を求めることが出来ます。
以上でGI/G/1待ち行列がシミュレート出来ました。