前提・実現したいこと
Pythonのsimpyでシミュレーションをしています。for文を使ってシミュレーション条件を変えながら実行しているのですが、条件毎に結果を格納することができません。
該当のソースコード
Python
1import simpy 2import numpy as np 3import random 4 5p = [] #結果を格納する配列 6arrive_time = [] #客が到着したときの時刻 7stay_time = 0 #滞在時間 8service = True #def queue()を重複して行わないための変数 9 10#客の到着率、サービス率は指数分布に従う 11env = simpy.Environment() 12 13for i in range(1, 10, 1): 14 # 到着 15 def arrive(): 16 global arrive_time, servive 17 while True: 18 yield env.timeout(random.expovariate(i)) #平均到着率 19 arrive_time.append(env.now) 20 if(service): #serviceがTrueの時実行 21 env.process(queue()) 22 23 # 待ち行列に並ぶ 24 def queue(): 25 global stay_time, arrive_time, service 26 service = False #実行している時はFalse 27 while len(arrive_time) > 0: #客が一人でもいる 28 yield env.timeout(random.expovariate(1.0)) #平均サービス率 29 stay_time += (env.now - arrive_time[0]) #客一人あたりの滞在時間を積算 30 arrive_time = arrive_time[1:] 31 32 service = True #実行していない時はTrue 33 34# 実行 35env.process(arrive()) 36env.run(until = 1000000) #単位時間1000000で実行
試したこと
Python
1 2 3for i in range(1, 10, 1): 4 # 到着 5 def arrive(): 6 global arrive_time, servive 7 while True: 8 yield env.timeout(random.expovariate(i)) #平均到着率 9 arrive_time.append(env.now) 10 if(service): #serviceがTrueの時実行 11 env.process(queue()) 12 13 # 待ち行列に並ぶ 14 def queue(): 15 global stay_time, arrive_time, service 16 service = False #実行している時はFalse 17 while len(arrive_time) > 0: #客が一人でもいる 18 yield env.timeout(random.expovariate(1.0)) #平均サービス率 19 stay_time += (env.now - arrive_time[0]) #客一人あたりの滞在時間を積算 20 arrive_time = arrive_time[1:] 21 22 service = True #実行していない時はTrue 23 24#実行 25env.process(arrive()) 26env.run(until = 1000000) #単位時間1000000で実行 27p.append(stay_time/1000000)
結果 p = [9.178673084289517]
p.appendをfor文の外に書くとi=9、つまり最後の条件での結果しか格納することができませんでした。
Python
1for i in range(1, 10, 1): 2 # 到着 3 def arrive(): 4 global arrive_time, servive 5 while True: 6 yield env.timeout(random.expovariate(i)) #平均到着率 7 arrive_time.append(env.now) 8 if(service): #serviceがTrueの時実行 9 env.process(queue()) 10 11 # 待ち行列に並ぶ 12 def queue(): 13 global stay_time, arrive_time, service 14 service = False #実行している時はFalse 15 while len(arrive_time) > 0: #客が一人でもいる 16 yield env.timeout(random.expovariate(1.0)) #平均サービス率 17 stay_time += (env.now - arrive_time[0]) #客一人あたりの滞在時間を積算 18 arrive_time = arrive_time[1:] 19 20 service = True #実行していない時はTrue 21 p.append(stay_time/1000000) 22 23# 実行 24env.process(arrive()) 25env.run(until = 1000000) #単位時間1000000で実行
結果 p = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
ですが、p.appendをfor文の中に入れると0.0と格納されました。i = 1, 2, 3, ... , 9の時の結果を逐一
配列pに保存したいのですが、ご存知の方がいらっしゃったらよろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/14 02:12