mirror of
				https://github.com/gsi-upm/soil
				synced 2025-10-31 15:48:16 +00:00 
			
		
		
		
	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()
 |