質問: 0 #サービス時間は0 print(arrive) ``` ``` q2(10000) ``` ### 試したこと ### 補足情報(FW/ツールのバージョンなど)
回答: `arrive = np.random.poisson(5)`は`0`を返す場合があります。 この場合、後続する`arrive = arrive - 1`にて負の値になってしまいます。 提示コードでは`arrive`が負のケースを想定していないようなので意図しない動作になっているようです。 とりあえず`arrive = np.random.poisson(5)+1`とするか`0`なら再取得するようなループを組めば解消すると思います。 ちなみに私なら問題を完全に理解できていませんが、以下のように書きます。 ``` def run(num): arrive = np.random.poisson(5) # 次の客が並ぶまでの時間 serve = 0 # 現在の処理に必要な残時間 queue = 0 # 行列に並んでいる人数 for i in range(num): # 客が到着 if arrive <= 0: queue += 1 arrive = np.random.poisson(5) print(f'arrive={arrive}') else: arrive -= 1 # 窓口は空で人待ち→次の客を処理 if serve <= 0 and queue > 0: serve = np.random.exponential(3) print(f'serve={serve}') queue -= 1 # 窓口で処理中 if serve > 0: serve -= 1 if queue > 0: print(f'{i:6} {queue:3}') run(100000) ```