現在作成しているモデルのエージェントpeopleのagt_stepにて self.people_movement()
print(f"status : {self.status} point : {self.people_point}")
self.people_maintenance()
self.define_time()
self.people_return() と書いており、self.people_movementの最後で print(f"status:{self.status point:{self.people_point}") をすると毎回ではないものの、printの中身同士が一致しないときがあり、それに伴い任意の動きをしてくれないときがあります。 これはartisoc Cloudの仕様上、私がわかっていな
い部分があるのでしょうか。
モデルを拝見したところ、
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}")
最終行の self.status と self.people_point ですが、
これを代入している箇所を確認すると、上記の関数の中で
self.status = "maintenance"
self.people_point = point
とあり、pointは、Universe.failure_turbine_set をループして取得しています。
Universe.failure_turbine_setを代入している箇所は、
turbineルールの maintenance関数で定義されており、
Universe.failure_turbine_set.add(self.point_id)
と記述しています。
turbineのpoint_idは、Universeルールのnetwork関数にて代入されており、
point_id = int(row[1])
one_turbine.point_id = str(point_id)
「turbine_point.csv」の1列目(point_id列)の値を整数値で代入しています。
何が問題かは分かりませんが、意図した動きになっていない場合は、どの時点で値が更新されているかを確認するとよいと思います。