Skip to content

Commit

Permalink
Revert changes of projectmesa#1478 and parts of projectmesa#1456
Browse files Browse the repository at this point in the history
These PRs are reverted because they
introduce the bug discussed in projectmesa#1515
  • Loading branch information
Tortar committed Nov 7, 2022
1 parent 45171f3 commit f0f8d68
Showing 1 changed file with 14 additions and 17 deletions.
31 changes: 14 additions & 17 deletions mesa/time.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
from collections import defaultdict

# mypy
from typing import Iterator, Union, Iterable
from typing import Iterator, Union
from mesa.agent import Agent
from mesa.model import Model

Expand Down Expand Up @@ -96,9 +96,8 @@ def agent_buffer(self, shuffled: bool = False) -> Iterator[Agent]:
"""Simple generator that yields the agents while letting the user
remove and/or add agents during stepping.
"""
agent_keys = self._agents.keys()
agent_keys = list(self._agents.keys())
if shuffled:
agent_keys = list(agent_keys)
self.model.random.shuffle(agent_keys)

for key in agent_keys:
Expand Down Expand Up @@ -137,12 +136,14 @@ class SimultaneousActivation(BaseScheduler):

def step(self) -> None:
"""Step all agents, then advance them."""
for agent in self._agents.values():
agent.step()
# the previous steps might remove some agents, but
# this loop will go over the remaining existing agents
for agent in self._agents.values():
agent.advance()
agent_keys = list(self._agents.keys())
for agent_key in agent_keys:
self._agents[agent_key].step()
# We recompute the keys because some agents might have been removed in
# the previous loop.
agent_keys = list(self._agents.keys())
for agent_key in agent_keys:
self._agents[agent_key].advance()
self.steps += 1
self.time += 1

Expand Down Expand Up @@ -185,18 +186,16 @@ def __init__(

def step(self) -> None:
"""Executes all the stages for all agents."""
agent_keys = self._agents.keys()
agent_keys = list(self._agents.keys())
if self.shuffle:
agent_keys = list(agent_keys)
self.model.random.shuffle(agent_keys)
for stage in self.stage_list:
for agent_key in agent_keys:
getattr(self._agents[agent_key], stage)() # Run stage
# We recompute the keys because some agents might have been removed
# in the previous loop.
agent_keys = self._agents.keys()
agent_keys = list(self._agents.keys())
if self.shuffle_between_stages:
agent_keys = list(agent_keys)
self.model.random.shuffle(agent_keys)
self.time += self.stage_time

Expand Down Expand Up @@ -259,9 +258,8 @@ def step(self, shuffle_types: bool = True, shuffle_agents: bool = True) -> None:
shuffle_agents: If True, the order of execution of each agents in a
type group is shuffled.
"""
type_keys: Iterable[type[Agent]] = self.agents_by_type.keys()
type_keys: list[type[Agent]] = list(self.agents_by_type.keys())
if shuffle_types:
type_keys = list(type_keys)
self.model.random.shuffle(type_keys)
for agent_class in type_keys:
self.step_type(agent_class, shuffle_agents=shuffle_agents)
Expand All @@ -276,9 +274,8 @@ def step_type(self, type_class: type[Agent], shuffle_agents: bool = True) -> Non
Args:
type_class: Class object of the type to run.
"""
agent_keys: Iterable[int] = self.agents_by_type[type_class].keys()
agent_keys: list[int] = list(self.agents_by_type[type_class].keys())
if shuffle_agents:
agent_keys = list(agent_keys)
self.model.random.shuffle(agent_keys)
for agent_key in agent_keys:
self.agents_by_type[type_class][agent_key].step()
Expand Down

0 comments on commit f0f8d68

Please sign in to comment.