mirror of
				https://github.com/gsi-upm/soil
				synced 2025-11-04 09:28:16 +00:00 
			
		
		
		
	The examples weren't being properly tested in the last commit. When we fixed that a lot of bugs in the new implementation of environment and agent were found, which accounts for most of these changes. The main difference is the mechanism to load simulations from a configuration file. For that to work, we had to rework our module loading code in `serialization` and add a `source_file` attribute to configurations (and simulations, for that matter).
		
			
				
	
	
		
			48 lines
		
	
	
		
			940 B
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			48 lines
		
	
	
		
			940 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,
 | 
						|
    dump=False,
 | 
						|
)
 | 
						|
 | 
						|
 | 
						|
envs = s.run()
 |