1
0
mirror of https://github.com/gsi-upm/soil synced 2025-09-18 22:22:20 +00:00

WIP: mesa compat

All tests pass but some features are still missing/unclear:

- Mesa agents do not have a `state`, so their "metrics" don't get stored. I will
probably refactor this to remove some magic in this regard. This should get rid
of the `_state` dictionary and the setitem/getitem magic.
- Simulation is still different from a runner. So far only Agent and
Environment/Model have been updated.
This commit is contained in:
J. Fernando Sánchez
2021-10-15 13:36:39 +02:00
parent 5d7e57675a
commit af9a392a93
7 changed files with 91 additions and 50 deletions

View File

@@ -81,9 +81,6 @@ class Environment(Model):
self._history = history.History(name=self.name,
backup=True)
self['SEED'] = seed
# Add environment agents first, so their events get
# executed before network agents
if network_agents:
distro = agents.calculate_distribution(network_agents)
@@ -97,7 +94,6 @@ class Environment(Model):
environment_agents = agents._convert_agent_types(distro)
self.environment_agents = environment_agents
@property
def now(self):
if self.schedule:
@@ -169,6 +165,7 @@ class Environment(Model):
unique_id=agent_id,
state=state)
node['agent'] = a
self.schedule.add(a)
return a
def add_node(self, agent_type, state=None):
@@ -188,8 +185,6 @@ class Environment(Model):
def run(self, until, *args, **kwargs):
self._save_state()
for agent in self.agents:
self.schedule.add(agent)
while self.schedule.next_time <= until and not math.isinf(self.schedule.next_time):
self.schedule.step(until=until)
@@ -238,8 +233,8 @@ class Environment(Model):
def get_agents(self, nodes=None):
if nodes is None:
return list(self.agents)
return [self.G.nodes[i]['agent'] for i in nodes]
return self.agents
return (self.G.nodes[i]['agent'] for i in nodes)
def dump_csv(self, f):
with utils.open_or_reuse(f, 'w') as f: