From 3c87997d0a3a8e475485fcbe631dc24e7517e5c8 Mon Sep 17 00:00:00 2001 From: Paolo Gervasoni Vila Date: Sat, 11 Feb 2017 18:19:34 +0100 Subject: [PATCH] Modified loop over agents in schedule step method If agents are deleted while looping over agents list in the model schedule, looping becomes unpredictable and agents step methods for some agents may not be called for a given model step --- mesa/time.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/mesa/time.py b/mesa/time.py index 6083b8a7e8d..75bac08339c 100644 --- a/mesa/time.py +++ b/mesa/time.py @@ -72,7 +72,7 @@ def remove(self, agent): def step(self): """ Execute the step of all the agents, one at a time. """ - for agent in self.agents: + for agent in self.agents[:]: agent.step() self.steps += 1 self.time += 1 @@ -98,7 +98,7 @@ def step(self): """ random.shuffle(self.agents) - for agent in self.agents: + for agent in self.agents[:]: agent.step() self.steps += 1 self.time += 1 @@ -114,9 +114,9 @@ class SimultaneousActivation(BaseScheduler): """ def step(self): """ Step all agents, then advance them. """ - for agent in self.agents: + for agent in self.agents[:]: agent.step() - for agent in self.agents: + for agent in self.agents[:]: agent.advance() self.steps += 1 self.time += 1 @@ -164,7 +164,7 @@ def step(self): if self.shuffle: random.shuffle(self.agents) for stage in self.stage_list: - for agent in self.agents: + for agent in self.agents[:]: getattr(agent, stage)() # Run stage if self.shuffle_between_stages: random.shuffle(self.agents)