学校の購買における待ち行列シミュレーション
高校生の太郎さんと花子さんは、昼休みに混雑する学校の購買(売店)の待ち行列について、シミュレーション(模擬実験)で分析することにした。
太郎:「現在のレジは1台だけど、これを2台に増やしたら、どのくらい待ち行列が解消されるかを調べたいね。」
花子:「うん。コンピュータでシミュレーションするために、まず単純なモデルを考えてみよう。時間を1分刻み(ティック)で進めるとして、以下のルール(モデル)で考えてみない?」
シミュレーションのルール(モデル):
QueueLength: 現在の待ち行列の長さ(人数)。初期値は 0 とする。太郎:「分かった。このルールで、レジが1台の場合のシミュレーションをプログラムにしてみよう。」
プログラム1:レジが1台の場合のシミュレーション
// Ticks 分間のシミュレーションを行う
手続 SimulateOne(Ticks)
QueueLength = 0
i = 0
反復 i < Ticks
// ルール1: 客の到着 (3人)
QueueLength = QueueLength + 3
// ルール2: レジの処理 (1台)
もし (QueueLength > 0) ならば
QueueLength = QueueLength - 1
// 1分ごとの状況を表示
表示("時刻:", i + 1, "分, 待ち人数:", QueueLength)
i = i + 1
戻る
プログラム1について、SimulateOne(3) を実行した(つまり 3 分間のシミュレーションを行った)場合、i = 2 の反復が終了した時点(「時刻: 3 分」が表示された時点)での QueueLength の値はいくつか。
その値を整数で答えよ。
ヒント: 整数で答えよ
このシミュレーションで使われた「ルール1(客の到着)」は、現実の状況を単純化(モデル化)したものである。
現実の購買の状況と比較したとき、この「ルール1(1分間に、常に 3 人の客が新しく列に並ぶ)」というモデル化に関する記述として、最も適切なものを次のA〜Dのうちから一つ選べ。
次に、花子さんはレジが2台になった場合のシミュレーションを行うため、プログラム1の「レジの処理」部分を修正したい。2台のレジは同時に稼働でき、それぞれが1分間に1人ずつ、合計で最大2人を処理できるものとする。
以下の【 ア 】の部分(レジが2台の場合の処理)として、最も適切な記述を次のA〜Fのうちから一つ選べ。
// ルール2: レジの処理 (2台)
【 ア 】
太郎さんは、レジ1台の場合(プログラム1)と、レジ2台の場合(問3のDのロジック)のシミュレーションを、それぞれ 10 分間実行し、各分(ティック)の終了時点での QueueLength(待ち人数)をグラフにした(図1)。
グラフ
Alt: レジ1台と2台の場合の待ち人数シミュレーション結果の折れ線グラフ。1台の場合は毎分2人ずつ(20人まで)増え、2台の場合は毎分1人ずつ(10人まで)増えている。
図1のシミュレーション結果に関する分析として、最も適切なものを次のA〜Dのうちから一つ選べ。
太郎さんと花子さんは、図1のシミュレーション結果(レジを2台にしても行列が増え続ける)を見て、「ルール1(客の到着)」のモデルが現実と違うのではないかと考えた。「昼休み開始直後の 3 分間は 1 分あたり 5 人来るが、その後の 7 分間は 1 分あたり 1 人しか来ない」という、より現実に近いモデルを試すことにした。
このように、シミュレーションにおいて、現実とのズレを修正するためにモデルの前提条件(ルール)を変更し、再度シミュレーションを実行することは、問題解決においてどのような意義を持つか。最も適切なものを次のA〜Dのうちから一つ選べ。