mirror of
https://github.com/gsi-upm/soil
synced 2024-11-14 15:32:29 +00:00
d9947c2c52
Documentation needs some improvement The API has been simplified to only allow for ONE topology per NetworkEnvironment. This covers the main use case, and simplifies the code.
43 lines
998 B
Python
43 lines
998 B
Python
'''
|
|
Example of setting a
|
|
Example of a fully programmatic simulation, without definition files.
|
|
'''
|
|
from soil import Simulation, agents
|
|
from soil.time import Delta
|
|
|
|
|
|
|
|
class MyAgent(agents.FSM):
|
|
'''
|
|
An agent that first does a ping
|
|
'''
|
|
|
|
defaults = {'pong_counts': 2}
|
|
|
|
@agents.default_state
|
|
@agents.state
|
|
def ping(self):
|
|
self.info('Ping')
|
|
return self.pong, Delta(self.random.expovariate(1/16))
|
|
|
|
@agents.state
|
|
def pong(self):
|
|
self.info('Pong')
|
|
self.pong_counts -= 1
|
|
self.info(str(self.pong_counts))
|
|
if self.pong_counts < 1:
|
|
return self.die()
|
|
return None, Delta(self.random.expovariate(1/16))
|
|
|
|
|
|
s = Simulation(name='Programmatic',
|
|
network_agents=[{'agent_class': MyAgent, 'id': 0}],
|
|
topology={'nodes': [{'id': 0}], 'links': []},
|
|
num_trials=1,
|
|
max_time=100,
|
|
agent_class=MyAgent,
|
|
dry_run=True)
|
|
|
|
|
|
envs = s.run()
|