Skip to content

Commit c7799a8

Browse files
committed
model: Implement internal clock
1 parent 39a6ccc commit c7799a8

File tree

6 files changed

+16
-1
lines changed

6 files changed

+16
-1
lines changed

mesa/model.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,13 @@
1212
from collections import defaultdict
1313

1414
# mypy
15-
from typing import Any
15+
from typing import Any, Union
1616

1717
from mesa.agent import Agent, AgentSet
1818
from mesa.datacollection import DataCollector
1919

20+
TimeT = Union[float, int]
21+
2022

2123
class Model:
2224
"""Base class for models in the Mesa ABM library.
@@ -67,6 +69,9 @@ def __init__(self, *args: Any, **kwargs: Any) -> None:
6769
self.current_id = 0
6870
self._agents: defaultdict[type, dict] = defaultdict(dict)
6971

72+
self.steps = 0
73+
self.time: TimeT = 0 # the model's clock
74+
7075
# Warning flags for current experimental features. These make sure a warning is only printed once per model.
7176
self.agentset_experimental_warning_given = False
7277

@@ -97,6 +102,11 @@ def run_model(self) -> None:
97102
def step(self) -> None:
98103
"""A single step. Fill in here."""
99104

105+
def advance_time(self, deltat: TimeT = 1):
106+
"""Increment the model's steps counter and clock."""
107+
self.steps += 1
108+
self.time += deltat
109+
100110
def next_id(self) -> int:
101111
"""Return the next unique ID for agents, increment current_id"""
102112
self.current_id += 1

tests/test_batch_run.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ def get_local_model_param(self):
8585
def step(self):
8686
self.datacollector.collect(self)
8787
self.schedule.step()
88+
self.advance_time()
8889

8990

9091
def test_batch_run():

tests/test_datacollector.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ def test_model_calc_comp(self, input1, input2):
8989
def step(self):
9090
self.schedule.step()
9191
self.datacollector.collect(self)
92+
self.advance_time()
9293

9394

9495
class TestDataCollector(unittest.TestCase):

tests/test_lifespan.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ def step(self):
4343
self.schedule.add(
4444
FiniteLifeAgent(self.next_id(), self.agent_lifetime, self)
4545
)
46+
self.advance_time()
4647

4748
def run_model(self, step_count=100):
4849
for _ in range(step_count):

tests/test_time.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ def __init__(self, shuffle=False, activation=STAGED, enable_kill_other_agent=Fal
9696

9797
def step(self):
9898
self.schedule.step()
99+
self.advance_time()
99100

100101
def model_stage(self):
101102
self.log.append("model_stage")

tests/test_visualization.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ def __init__(self, width, height, key1=103, key2=104):
4949

5050
def step(self):
5151
self.schedule.step()
52+
self.advance_time()
5253

5354

5455
class TestModularServer(TestCase):

0 commit comments

Comments
 (0)