2019年5月5日日曜日

待ち行列

(モデル化とシミュレーション)

 平日の昼時にはラーメン屋の前にサラリーマンの行列ができ、夕方にはスーパーマーケットのレジに行列ができ、休日のショッピングセンターでは駐車場の空きを待つ車の行列ができる。 ところで、行列とは、人が列を作って並ぶものだけを言うのではない。 コールセンターに電話して待たされるのも、サーバーにアクセスが集中して動きが鈍くなるのも、行列ができているのと同じようなことである。
 では、行列ができる様子をモデル化してシミュレーションしてみよう。 2つのケースを考える。 スーパーマーケットのレジに客が並ぶ様子を表したものが <例1> で、サーバーへのアクセスに応答する様子を表したものが <例2> である。

<例1>
  ABCDEFG
1
 (人目) 
 到着間隔 
(分)
 到着時刻 
(分)
 開始時刻 
(分)
 終了時刻 
(分)
 待ち時間 
(分)
 行列人数 
(人)
211.141.141.142.140.000
320.561.702.143.140.441
430.312.013.144.141.132
541.933.944.145.140.201
651.365.305.306.300.000

 <例1> と <例2> において、サービスを提供するのに要する時間はちょうど1分とする。 B 列が客が到着する間隔だが、乱数を使って最大で2分で、平均しておよそ1分になるように設定した。 C列は業務をスタートしてからの通算の時間である。 ここまでは <例1> も <例2> も同じである。

<例2>
  ABCDE
1
(人目)
 到着間隔 
(分)
 到着時刻 
(分)
サーバー
の処理
 終了時刻 
(分)
211.561.56 proceed 2.56
321.733.29proceed4.29
430.183.47busy4.29
540.584.05busy4.29
651.775.82proceed6.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)
  ABCDEF
1
 (人目) 
 到着間隔 
(分)
 到着時刻 
(分)
 サーバー 
の処理
Aの
 終了時刻 
Bの
 終了時刻 
    
210.940.941.940.00
320.821.761.942.76
0.061.82busy1.942.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 件のコメント:

コメントを投稿