待ち行列問題を考えてみる このページでは、技術士一次試験で出題された待ち行列問題を、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−利用率) 平均待ち時間 = 待ち行列長 × 平均処理時間 平均対応時間 = 平均待ち時間 + 平均処理時間 式を並べ替えると、なんなくこの問題が解けることが分かります。
2.シミュレーションによる解法 ポアソン分布と指数分布関数 ポワソン分布(Wikipedia) 定数λ>0に対し、自然数を値にとる確率変数Xが P(X=k)=λkexp(−λ)/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 はその時間間隔に到着する確率です。 プログラムを組んで順次計算をすすめます。
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秒と求まりました。
3.残る問題 2.の問題文に沿った解法では、51秒という答えが得られ、これは日本技術士会が示している正答とも一致している。 一方、2.のシミュレーションによる解法で得られるATM到着からその処理が終わるまでの時間は約40秒となり、答えが異なった。 シミュレーションで正答が得られていないことを前提に、この得られた結果の差がどこにあるか、その可能性を見ていくと、 今回シミュレーションに用いた式は、 y = exp(−λv) であるのに対し、指数分布で与えられている式は、 f(x;λ)=λexp(−λx) (x≧0)、 =0 (λ<0) である。 この指数項にλがかかっているかいないかの差である。 λを掛けた式でシミュレーションを試みたが、1時間当たりの到着人数が前提(1時間当たり50人)から変動してしまい、思うような結果とはなっていない。 4.現在の結論 問題は問題として認識し、シミュレーション方法が見いだせるまではしばらくは何もせずに、このままとしておく。 技術士一次試験・基礎科目 平成16年〜28年356問題解答集に戻る |