(モデル化とシミュレーション)
平日の昼時にはラーメン屋の前にサラリーマンの行列ができ、夕方にはスーパーマーケットのレジに行列ができ、休日のショッピングセンターでは駐車場の空きを待つ車の行列ができる。 ところで、行列とは、人が列を作って並ぶものだけを言うのではない。 コールセンターに電話して待たされるのも、サーバーにアクセスが集中して動きが鈍くなるのも、行列ができているのと同じようなことである。
では、行列ができる様子をモデル化してシミュレーションしてみよう。 2つのケースを考える。 スーパーマーケットのレジに客が並ぶ様子を表したものが <例1> で、サーバーへのアクセスに応答する様子を表したものが <例2> である。
<例1>
A | B | C | D | E | F | G | |
1 | 客 (人目) | 到着間隔 (分) | 到着時刻 (分) | 開始時刻 (分) | 終了時刻 (分) | 待ち時間 (分) | 行列人数 (人) |
2 | 1 | 1.14 | 1.14 | 1.14 | 2.14 | 0.00 | 0 |
3 | 2 | 0.56 | 1.70 | 2.14 | 3.14 | 0.44 | 1 |
4 | 3 | 0.31 | 2.01 | 3.14 | 4.14 | 1.13 | 2 |
5 | 4 | 1.93 | 3.94 | 4.14 | 5.14 | 0.20 | 1 |
6 | 5 | 1.36 | 5.30 | 5.30 | 6.30 | 0.00 | 0 |
… | … |
<例1> と <例2> において、サービスを提供するのに要する時間はちょうど1分とする。 B 列が客が到着する間隔だが、乱数を使って最大で2分で、平均しておよそ1分になるように設定した。 C列は業務をスタートしてからの通算の時間である。 ここまでは <例1> も <例2> も同じである。
<例2>
A | B | C | D | E | |
1 | 客 (人目) | 到着間隔 (分) | 到着時刻 (分) | サーバー の処理 | 終了時刻 (分) |
2 | 1 | 1.56 | 1.56 | proceed | 2.56 |
3 | 2 | 1.73 | 3.29 | proceed | 4.29 |
4 | 3 | 0.18 | 3.47 | busy | 4.29 |
5 | 4 | 0.58 | 4.05 | busy | 4.29 |
6 | 5 | 1.77 | 5.82 | proceed | 6.82 |
… | … |
<例1> と <例2> の違いは次の点である。 <例1> では、前の客の支払いが済んでいればすぐにレジ打ちを始めるが、前の客の処理が終わっていないときは行列に並んで順番を待つ。 <例2> では、サーバーが他の処理をしていなければ次のアクセスに対する処理を進める (proceed) が、前のアクセスに対する処理が終わっていない (busy) ときは次のアクセスを無視する (つまり、行列に並ばせない) ものとする。
ところで、上の例ではレジもサーバーも1台という想定でモデル化・シミュレーションした。 でも、2系統で分散処理すれば、サービス向上になる。 もちろんその分だけ経費がかかるので、経営者はサービスと経費との兼ね合いでレジ係りを何人置いたらよいか、サーバーを何台用意したよいかを判断するだろう。 そして、その場合は上の例をアレンジしてモデル化・シミュレーションすればよいだろう。
(1) <例1> のセル B3 , C3 , D3 , E3 , F3 , G3 ならびに <例2> のセル D3 , E3 の関数式を答えなさい。ただし、下方向にコピーして正しく動く式を答えること。
(2) <例2> のD列以降を書き換えて、2系統で分散処理するためのエクセル・シートを作りなさい。 ただし、1行目に適当な列のタイトルをつけ、3行目の関数式を明記すること。 なお、経費のことは考えなくてよい。
《 解答例 》
(1) <例1>
B3 = RAND ( )*2
C3 = C2+B3
D3 = MAX (C3 , E2)
E3 = D3+1
F3 = D3-C3
G3 = ROUNDUP (F3 , 0)
<例2>
D3 = IF (C3>=E2 , "proceed" , "busy")
E3 = IF (D3="proceed" , C3+1 , E2)
(2)
A | B | C | D | E | F | … | |
1 | 客 (人目) | 到着間隔 (分) | 到着時刻 (分) | サーバー の処理 | Aの 終了時刻 | Bの 終了時刻 | |
2 | 1 | 0.94 | 0.94 | A | 1.94 | 0.00 | |
3 | 2 | 0.82 | 1.76 | B | 1.94 | 2.76 | |
… | … | 0.06 | 1.82 | busy | 1.94 | 2.76 |
セル D1 のタイトル サーバーの処理
セル D3 の関数式 = IF (C3>=E2 , "A" , IF (C3>=F2 , "B" , "busy"))
セル E1 のタイトル Aの終了時刻
セル E3 の関数式 = IF (D3="A" , C3+1 , E2)
セル F1 のタイトル Bの終了時刻
セル F3 の関数式 = IF (D3="B" , C3+1 , F2)
0 件のコメント:
コメントを投稿