1
0
mirror of https://github.com/gsi-upm/soil synced 2024-11-13 06:52:28 +00:00

Update examples

This commit is contained in:
J. Fernando Sánchez 2022-04-04 16:47:58 +02:00
parent 42ddc02318
commit affeeb9643
5 changed files with 20 additions and 13 deletions

View File

@ -1 +1 @@
ipython==7.23
ipython==7.31.1

View File

@ -17,7 +17,7 @@ class DumbViewer(FSM):
def neutral(self):
if self['has_tv']:
if prob(self.env['prob_tv_spread']):
self.set_state(self.infected)
return self.infected
@state
def infected(self):
@ -26,6 +26,12 @@ class DumbViewer(FSM):
neighbor.infect()
def infect(self):
'''
This is not a state. It is a function that other agents can use to try to
infect this agent. DumbViewer always gets infected, but other agents like
HerdViewer might not become infected right away
'''
self.set_state(self.infected)
@ -35,12 +41,13 @@ class HerdViewer(DumbViewer):
'''
def infect(self):
'''Notice again that this is NOT a state. See DumbViewer.infect for reference'''
infected = self.count_neighboring_agents(state_id=self.infected.id)
total = self.count_neighboring_agents()
prob_infect = self.env['prob_neighbor_spread'] * infected/total
self.debug('prob_infect', prob_infect)
if prob(prob_infect):
self.set_state(self.infected.id)
self.set_state(self.infected)
class WiseViewer(HerdViewer):
@ -75,5 +82,5 @@ class WiseViewer(HerdViewer):
1.0)
prob_cure = self.env['prob_neighbor_cure'] * (cured/infected)
if prob(prob_cure):
return self.cure()
return self.cured
return self.set_state(super().infected)

View File

@ -18,7 +18,9 @@ class MyAgent(agents.FSM):
@agents.default_state
@agents.state
def neutral(self):
self.info('I am running')
self.debug('I am running')
if agents.prob(0.2):
self.info('This runs 2/10 times on average')
s = Simulation(name='Programmatic',
@ -29,10 +31,10 @@ s = Simulation(name='Programmatic',
dry_run=True)
# By default, logging will only print WARNING logs (and above).
# You need to choose a lower logging level to get INFO/DEBUG traces
logging.basicConfig(level=logging.INFO)
envs = s.run()
s.dump_yaml()
for env in envs:
env.dump_csv()
# Uncomment this to output the simulation to a YAML file
# s.dump_yaml('simulation.yaml')

View File

@ -12,8 +12,6 @@ class Genders(Enum):
class RabbitModel(FSM):
level = logging.INFO
defaults = {
'age': 0,
'gender': Genders.male.value,

View File

@ -1,7 +1,7 @@
---
load_module: rabbit_agents
name: rabbits_example
max_time: 150
max_time: 100
interval: 1
seed: MySeed
agent_type: RabbitModel
@ -10,7 +10,7 @@ environment_agents:
environment_params:
prob_death: 0.001
default_state:
mating_prob: 0.01
mating_prob: 0.1
topology:
nodes:
- id: 1