from soil.agents import FSM, state, default_state class Fibonacci(FSM): '''Agent that only executes in t_steps that are Fibonacci numbers''' defaults = { 'prev': 1 } @default_state @state def counting(self): self.log('Stopping at {}'.format(self.now)) prev, self['prev'] = self['prev'], max([self.now, self['prev']]) return None, self.env.timeout(prev) class Odds(FSM): '''Agent that only executes in odd t_steps''' @default_state @state def odds(self): self.log('Stopping at {}'.format(self.now)) return None, self.env.timeout(1+self.now%2) if __name__ == '__main__': import logging logging.basicConfig(level=logging.INFO) from soil import Simulation s = Simulation(network_agents=[{'ids': [0], 'agent_type': Fibonacci}, {'ids': [1], 'agent_type': Odds}], network_params={"generator": "complete_graph", "n": 2}, max_time=100, ) s.run(dry_run=True)