mirror of
https://github.com/gsi-upm/soil
synced 2024-11-14 23:42:29 +00:00
73282530fd
All test pass, except for the TestConfig suite, which is not too critical as the plan for this version onwards is to avoid configuration as much as possible.
48 lines
942 B
Python
48 lines
942 B
Python
"""
|
|
Example of setting a
|
|
Example of a fully programmatic simulation, without definition files.
|
|
"""
|
|
from soil import Simulation, agents, Environment
|
|
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))
|
|
|
|
|
|
class RandomEnv(Environment):
|
|
|
|
def init(self):
|
|
self.add_agent(agent_class=MyAgent)
|
|
|
|
|
|
s = Simulation(
|
|
name="Programmatic",
|
|
model=RandomEnv,
|
|
num_trials=1,
|
|
max_time=100,
|
|
dry_run=True,
|
|
)
|
|
|
|
|
|
envs = s.run()
|