待ち行列問題を考えてみる


このページでは、技術士一次試験で出題された待ち行列問題を、1.出題された方法に従って解く、2.シミュレーションを用いて得く、の2通りの解法を示しています。

当然のことながら、1.の方法では、設問が求める答えが得られます。そして、その解き方が一般的な方法であることは、下に示すように、他のWebサイトでも確認しています。

2.の方法では、待ち行列の原理に基づき、ExcelのVBA(プログラミング機能)により待ち行列の発生をシミュレーションし、答えを得ようとしました。

結果は、1.と2.で異なる平均対応時間となってしまいました。その原因について、考えているところです。ここに問題があるとのご指摘が頂けると幸いです。どこかに小さな間違いがあるとは思うのですが、それを自分自身で見つけることは難しい子tpです。



技術士一次試験 基礎科目で出題された問題文

待ち行列問題はオペレーションズ・リサーチ(OR)の代表的な問題で、その手法は広く利用されています。銀行の窓口と待ち時間、病院での待ち時間などがその典型例でしょう。

さて、技術士一次試験・基礎科目ではこの待ち行列に関する問題が過去に3回出題されています。平成27年T−1−2(平成23年T−1−2と同じ問題)と平成25年T−1−5で、全問同じ方法で解けます。

出題された問題を示します。

平成27年 T−1−2



平成25年 T−1−5






1.問題文に沿った解法


どちらも同じ問題であることが分かります。銀行ATMであるか、駅の改札であるかの違い程度でしょう。

上の問題、銀行のATM、の解き方について少し考えてみます。




ATMでの平均処理時間は1人当たり30秒と示されています。赤四角で「処理に要する時間は指数分布にしたがう」を囲いましたが、この問題では、処理に要する時間は分布なしの30秒です。ATMの扱いがわからずに時間がかかる人、パスワードを入れ間違えて再入力する人、いくら引き出そうかとその場で考える人など、諸々の条件の結果としての指数分布は加味されていません。計算が複雑になり、与えられた短い時間では解答不能に陥るというのがその理由でしょう。

平均処理時間は30秒、単位時間当たり(1時間当たり)の処理人数は120人となります。

技術士一次試験・基礎問題 平成16年〜28年の解答集の中のA16(待ち行列)では解答次のようになっています。

(引用)

H27年 T−1−2 と H23年 T−1−2
(赤字はこの問題が簡単な問題(サービス問題)であることを示している)

オペレーションズ・リサーチに関する典型的な問題である。
数式に値を代入すればよいだけであるので、他のオペレーションズ・リサーチとは別の分類としている。

H27年 Tー1−2

H27年度問題 

正答: C 

(解答)

単位時間を1時間とする。
単位時間あたりの平均到着人数A=50人
単位時間あたりの平均処理人数B=120人(3600/30)
利用率C=A/B=50/120=0.417
待ち行列長D=C÷(1−C)=0.715
平均待ち時間E=D×平均処理時間(30秒)=21秒
平均対応時間=E+平均処理時間(30秒)=51秒

素直に設問の数字を変数に代入していけば答えに至ります。

                                        (引用終わり)


この問題を解くポイントは4つある式の間の関係(構造)を理解することです。上で問題文に赤線を入れて示したように、少しだけ入り組んでいます。問題文のオリジナルを示し、その関係を整理しなおすと次のようになります。処理する順番が理解できればこの問題は簡単に解けます。そんな複雑に考えなくても、分かった数値を代入していき、左辺に数字が現れれば、次の式へと進んでいく。この行き当たりばったり法でもこの問題は簡単に解けると思います。

(問題文)

待ち行列 = 利用率 ÷ (1−利用率)

平均待ち時間 = 待ち行列長 × 平均処理時間

利用率 = 単位時間当たりの平均到着人数 ÷ 単位時間当たりの平均処理人数

平均対応時間 = 平均待ち時間 + 平均処理時間

(解答)

赤字は問題文よりすでに与えられているもの

利用率 = 単位時間当たりの平均到着人数 ÷ 単位時間当たりの平均処理人数

待ち行列 = 利用率 ÷ (1−利用率)

平均待ち時間 = 待ち行列長 × 平均処理時間

平均対応時間 = 平均待ち時間 + 平均処理時間


式を並べ替えると、なんなくこの問題が解けることが分かります。

利用率と待ち行列の関係を図で示すと右のようになります。

図はサルでもわかる待ち行列の「込み具合と待ち時間」よりのものです。

ρは上の第1式の利用率、縦軸の待ち時間は平均待ち時間です。ρが1に近づくにつれて待ち時間が無限大へと増えていく様子示されています。

ρ/(1−ρ)は上の第2式です。待ち行列の長さが求まります。そしてこの待ち行列の長さに平均処理時間を掛けると、第3式で示されているように、平均待ち時間となります。右のグラフの縦軸です。

込み具合のマイナスは数学的記述の問題で、現実にはあり得ない領域です。
   




2.シミュレーションによる解法

ポアソン分布と指数分布関数

ポワソン分布(Wikipedia)

定数λ>0に対し、自然数を値にとる確率変数Xが

  P(X=k)=λexp(−λ)/k!

を満たすとき、確率変数Xはパラメータλのポアソン分布に従うという。

(注釈を加える)

λは単位時間中に事象が発生する平均回数
p(x=k)は単位時間中に事象がk回発生する確率密度



   確率質量関数
 累積分布関数
 



指数分布(Wikipedia)

指数分布は、正のパラメータλに対して確率密度関数が、

  f(x;λ)=λexp(−λx) (x≧0)、 =0 (λ<0)

で与えられる分布である。このとき、累積分布関数は

  F(x;λ)=1−exp(−λx) (x≧0)、 =0 (λ<0)

(注釈を加える)

λは単位時間中に事象が発生する平均回数
f(x;λ)は事象の発生間隔がx単位時間である確率密度


確率密度変数
累積分布関数


もう少し分かり易く書くと、

単位時間あたり平均λ回起こるランダムなイベントに対して、

(1)単位時間に事象が起きる回数は平均λのポアソン分布に従い
(2)事象発生間隔は平均1/λの指数分布に従う。



以上のことを踏まえ、さらに、成書「ExcelによるOR演習(藤田勝康、日科技連、2002年)の解法に従って解いていく。


5.2 待ち行列シミュレーション (p.120)

客が1時間(60分)当たり30台到着すると仮定します。つまり、平均到着率λ=30/60=0.5人/分
平均到着間隔 1/λ=2分/人

到着の分布と到着間隔は、客が1分間に平均2人、ランダムに到着すると仮定したので、到着時間の間隔は平均(1/λ)=2分の指数分布に従います。式で書くと、

   y = exp(−λv)

となります。ここで v は客の到着時間間隔、 y はその時間間隔に着く確率です。y は確率ですから、0から1の間の数値となります。

   v = −1/λ×ln(y) = −2ln(y)

この y に0から1の乱数を代入すれば、到着時間間隔の乱数 v が計算できます。



以上のことを踏まえると、上の問題で客のATMへの到着時間の間隔 は平均 1/λ の指数分布に従い、式で書くと、

   y = exp(−λv)    ただし、v は客の到着時間間隔、y はその時間間隔に到着する確率です。


プログラムを組んで順次計算をすすめます。
到着 到着確率 〜後に到着 経過時間 処理にかかる時間
(人目) (0〜1) (分) (秒) (秒) 開始(秒) 終了(秒)
1 0.969 0.037 2 2 2 32
2 0.886 0.145 9 11 32 62
3 0.869 0.168 10 21 62 92
4 0.265 1.595 96 117 117 147
5 0.079 3.045 183 299 299 329
6 0.829 0.225 14 313 329 359
7 0.096 2.815 169 482 482 512
8 0.295 1.466 88 570 570 600
9 0.901 0.125 7 577 600 630
10 0.895 0.134 8 585 630 660
11 0.649 0.519 31 616 660 690
12 0.838 0.211 13 629 690 720
13 0.362 1.220 73 702 720 750
14 0.792 0.280 17 719 750 780
15 0.033 4.082 245 964 964 994
16 0.981 0.024 1 966 994 1024
17 0.624 0.566 34 999 1024 1054
18 0.959 0.050 3 1002 1054 1084
19 0.141 2.354 141 1144 1144 1174
20 0.219 1.820 109 1253 1253 1283
21 0.717 0.399 24 1277 1283 1313
22 0.161 2.190 131 1408 1408 1438
23 0.112 2.629 158 1566 1566 1596
24 0.994 0.007 0 1566 1596 1626
25 0.347 1.271 76 1643 1643 1673
26 0.289 1.488 89 1732 1732 1762
27 0.914 0.108 6 1738 1762 1792
28 0.335 1.313 79 1817 1817 1847
29 0.807 0.257 15 1833 1847 1877
30 0.921 0.099 6 1839 1877 1907
31 0.049 3.610 217 2055 2055 2085
32 0.274 1.555 93 2148 2148 2178
33 0.335 1.312 79 2227 2227 2257
34 0.620 0.575 34 2262 2262 2292
35 0.032 4.129 248 2509 2509 2539
36 0.981 0.023 1 2511 2539 2569
37 0.163 2.177 131 2641 2641 2671
38 0.353 1.251 75 2716 2716 2746
39 0.252 1.652 99 2815 2815 2845
40 0.819 0.240 14 2830 2845 2875
41 0.324 1.354 81 2911 2911 2941
42 0.684 0.456 27 2938 2941 2971
43 0.071 3.170 190 3129 3129 3159
44 0.441 0.982 59 3188 3188 3218
45 0.332 1.325 79 3267 3267 3297
46 0.316 1.384 83 3350 3350 3380
47 0.924 0.094 6 3356 3380 3410
48 0.098 2.788 167 3523 3523 3553
49 0.109 2.664 160 3683 3683 3713
50 0.749 0.347 21 3704 3713 3743

50人目までの計算は右表のようになります。

1人目はATMが開いてから2秒後に到着しますが、処理に30秒かかるので、この1人目がATMから出ていくのはATMが開いてから32秒後となります。

2人目は11秒後に到着し、すぐにATMでの処理をはじめられれば良いのですが、1人目がまだ処理中ですので、結局32秒から処理を始めて62秒にその処理が終わることになります。

この要領で50人目まで処理を続けます。50人目の到着時間は3704秒で約1時間(3600秒)が経過していることが分かります。

ATMでの処理時間を含めた待ち時間は、処理にかかる時間(終了(秒))から到着時間(秒)を引いた時間となり、下の表では50人の平均が41.3秒となります。


10000人がこのATMを使用する場合のトライアル計算を5回行いました。

50人で約1時間ですから、10000人では約20時間分の計算です。人数が少ない時には得られる誤差が大きくなりますが、10000人の計算ともなりますと、得られる値はある程度収斂してきます。

下の表は5回のトライアルの結果です。

まず、処理人数ですが、1時間当たり50.0人です。到着からATMでの処理が終了するまでの時間は平均で40.3秒と求まりました。


トライアル
(回)
到着してから
処理が終わる
までの平均時間
(秒)
10000人の
到着に要した
時間
(秒)
40.7 727890
39.9 710249
40.2 718719
40.2 724880
40.7 716432
平均 40.34 719634







3.残る問題

2.の問題文に沿った解法では、51秒という答えが得られ、これは日本技術士会が示している正答とも一致している。

一方、2.のシミュレーションによる解法で得られるATM到着からその処理が終わるまでの時間は約40秒となり、答えが異なった。

シミュレーションで正答が得られていないことを前提に、この得られた結果の差がどこにあるか、その可能性を見ていくと、

今回シミュレーションに用いた式は、

   y = exp(−λv)

であるのに対し、指数分布で与えられている式は、

  f(x;λ)=λexp(−λx) (x≧0)、 =0 (λ<0)

である。

この指数項にλがかかっているかいないかの差である。

λを掛けた式でシミュレーションを試みたが、1時間当たりの到着人数が前提(1時間当たり50人)から変動してしまい、思うような結果とはなっていない。


4.現在の結論

問題は問題として認識し、シミュレーション方法が見いだせるまではしばらくは何もせずに、このままとしておく。





               技術士一次試験・基礎科目 平成16年〜28年356問題解答集に戻る