現在作成しているモデルにてエージェントpeopleのagt_stepで def agt_step(self):
self.people_movement()
print(f"status : {self.status} point : {self.people_point}")
self.people_maintenance()
self.define_time()
self.people_return()
とprintしており、self.people_movement()の最後にも同様に
print(f"status:{self.status} point:{self.people_point}")
とprintさせているのですが、この2行の値が毎回ではないものの、一致しないときがあり、それに伴い任意の動きをしないときがあります。
この原因について教えていただきたいです。
2018-01-04 09:00:00 船1が風車18に到着
2018-01-04 09:00:00 作業員3人が風車18に到着
status:maintenance point:18
2018-01-04 09:00:00 作業員2人が風車38に到着
status:maintenance point:38
status : maintenance point : 38
[DEBUG_PEOPLE] 風車38で状態がmaintenance
status : idle point : 0
status : idle point : 0
status : idle point : 0
status : idle point : 0
status : idle point : 0
status : idle point : 0
status : idle point : 0
[DEBUG_TURBINE] point:18 time:25 status:maintenance people_num3
status : idle point : 0
status : idle point : 0
status : idle point : 0
status : idle point : 0
status : idle point : 0
status : idle point : 0
status : idle point : 0
status : idle point : 0
status : idle point : 0
status : idle point : 0
2018-01-04 10:00:00 船2が風車31に到着
2018-01-04 10:00:00 作業員2人が風車31に到着 このログの風車18のところです。
モデルを拝見したところ、
peopleルールにてpeople_movement関数が以下の通り定義されています。
def people_movement(self):
if self.status == "idle":
for point in Universe.failure_turbine_set:
turbine = Universe.turbine_dict[str(point)]
if turbine.status == "arrived" and turbine.people_num == 0:
self.people_point = point
point_agt = Universe.turbine_dict[str(self.people_point)]
self.x = point_agt.x
self.y = point_agt.y
print(Universe.current_time,f"作業員{turbine.need_people}人が風車{self.people_point}に到着")
self.status = "maintenance"
turbine.status = "maintenance"
turbine.people_num = turbine.need_people
print(f"status:{self.status} point:{self.people_point}")
値が一致しない問題の原因を特定するために、関数の前後で以下の通りprint文を2箇所追加するとよいと思いおます。
def people_movement(self):
print(f"status1:{self.status} point:{self.people_point}")
if self.status == "idle":
for point in Universe.failure_turbine_set:
turbine = Universe.turbine_dict[str(point)]
if turbine.status == "arrived" and turbine.people_num == 0:
self.people_point = point
point_agt = Universe.turbine_dict[str(self.people_point)]
self.x = point_agt.x
self.y = point_agt.y
print(Universe.current_time,f"作業員{turbine.need_people}人が風車{self.people_point}に到着")
self.status = "maintenance"
turbine.status = "maintenance"
turbine.people_num = turbine.need_people
print(f"status:{self.status} point:{self.people_point}")
print(f"status2:{self.status} point:{self.people_point}")