import math import random import matplotlib.pyplot as plt time_c = 5.0 # 次の客(customer)が来るまでの平均時間(分) time_s = 1.0 # 平均的なレジのサービス時間(service)(分) t = 0 tc = 0 n = 0 t_all=[ ] # 行列の人数が変化する時刻 n_all=[ ] # 行列の人数 while t < 240: # 240分(4時間)のシミュレーション n_prev = n if n == 0: # もしレジの客が0人なら x = -time_c * math.log(1-random.random()) # 次の客が来るまでの時間 t = tc tc = tc + x # 客が来る時刻tc は x分だけ進んだ時刻 n = 1 # x分経過し,次の客が来て,レジに1人いる状態になる e = -time_s * math.log(1-random.random()) # サービスにかかる時間 ts = t + e # レジが終わる時刻 ts else: # レジに既に人がいるとき if tc < ts: # 次に客が来る時間が,レジより短ければ n = n + 1 # 待ち客が1人増える x = -time_c * math.log(1-random.random()) t = tc tc = tc + x elif tc == ts: # 前の客が終わったと同時に次の客が来る場合 # 行列の人数は変わらず,次の客が来る時間を計算 x = -time_c * math.log(1-random.random()) t = tc tc = tc + x elif tc > ts: # 次の客が来る前にレジが終われば,1人減る n = n - 1 e = -time_s * math.log(1-random.random()) t = ts ts = ts + e t_all.append(t) n_all.append(n_prev) t_all.append(t) n_all.append(n) plt.plot(t_all,n_all, color="red", linewidth=1.0) plt.xlabel('Time (min)') plt.ylabel('Waiting People') plt.grid(True) plt.show()