1
0
mirror of https://github.com/gsi-upm/soil synced 2024-09-21 07:41:43 +00:00
soil/examples/custom_timeouts/custom_timeouts.py

48 lines
1.0 KiB
Python
Raw Normal View History

2019-02-01 18:05:07 +00:00
from soil.agents import FSM, state, default_state
from soil.time import Delta
2019-02-01 18:05:07 +00:00
class Fibonacci(FSM):
2022-10-17 18:23:57 +00:00
"""Agent that only executes in t_steps that are Fibonacci numbers"""
2019-02-01 18:05:07 +00:00
2022-10-17 18:23:57 +00:00
defaults = {"prev": 1}
2019-02-01 18:05:07 +00:00
@default_state
@state
def counting(self):
2022-10-17 18:23:57 +00:00
self.log("Stopping at {}".format(self.now))
prev, self["prev"] = self["prev"], max([self.now, self["prev"]])
return None, Delta(prev)
2019-02-01 18:05:07 +00:00
2019-02-01 18:05:07 +00:00
class Odds(FSM):
2022-10-17 18:23:57 +00:00
"""Agent that only executes in odd t_steps"""
2019-02-01 18:05:07 +00:00
@default_state
@state
def odds(self):
2022-10-17 18:23:57 +00:00
self.log("Stopping at {}".format(self.now))
return None, Delta(1 + self.now % 2)
2019-02-01 18:05:07 +00:00
from soil import Simulation
2022-10-17 18:23:57 +00:00
simulation = Simulation(
model_params={
'agents':[
{'agent_class': Fibonacci, 'node_id': 0},
{'agent_class': Odds, 'node_id': 1}
2022-10-17 18:23:57 +00:00
],
'topology': {
'params': {
'generator': 'complete_graph',
'n': 2
}
},
},
max_time=100,
)
if __name__ == "__main__":
simulation.run(dry_run=True)