1
0
mirror of https://github.com/gsi-upm/soil synced 2025-11-29 03:18:16 +00:00
This commit is contained in:
J. Fernando Sánchez
2022-10-06 15:49:10 +02:00
parent 0a9c6d8b19
commit f811ee18c5
53 changed files with 856 additions and 774 deletions

View File

@@ -1,4 +1,3 @@
import random
import numpy as np
from . import FSM, state
@@ -32,62 +31,64 @@ class SISaModel(FSM):
def __init__(self, environment, unique_id=0, state=()):
super().__init__(model=environment, unique_id=unique_id, state=state)
self.neutral_discontent_spon_prob = np.random.normal(self.env['neutral_discontent_spon_prob'],
random = np.random.default_rng(seed=self._seed)
self.neutral_discontent_spon_prob = random.normal(self.env['neutral_discontent_spon_prob'],
self.env['standard_variance'])
self.neutral_discontent_infected_prob = np.random.normal(self.env['neutral_discontent_infected_prob'],
self.neutral_discontent_infected_prob = random.normal(self.env['neutral_discontent_infected_prob'],
self.env['standard_variance'])
self.neutral_content_spon_prob = np.random.normal(self.env['neutral_content_spon_prob'],
self.neutral_content_spon_prob = random.normal(self.env['neutral_content_spon_prob'],
self.env['standard_variance'])
self.neutral_content_infected_prob = np.random.normal(self.env['neutral_content_infected_prob'],
self.neutral_content_infected_prob = random.normal(self.env['neutral_content_infected_prob'],
self.env['standard_variance'])
self.discontent_neutral = np.random.normal(self.env['discontent_neutral'],
self.discontent_neutral = random.normal(self.env['discontent_neutral'],
self.env['standard_variance'])
self.discontent_content = np.random.normal(self.env['discontent_content'],
self.discontent_content = random.normal(self.env['discontent_content'],
self.env['variance_d_c'])
self.content_discontent = np.random.normal(self.env['content_discontent'],
self.content_discontent = random.normal(self.env['content_discontent'],
self.env['variance_c_d'])
self.content_neutral = np.random.normal(self.env['content_neutral'],
self.content_neutral = random.normal(self.env['content_neutral'],
self.env['standard_variance'])
@state
def neutral(self):
# Spontaneous effects
if random.random() < self.neutral_discontent_spon_prob:
if self.prob(self.neutral_discontent_spon_prob):
return self.discontent
if random.random() < self.neutral_content_spon_prob:
if self.prob(self.neutral_content_spon_prob):
return self.content
# Infected
discontent_neighbors = self.count_neighboring_agents(state_id=self.discontent)
if random.random() < discontent_neighbors * self.neutral_discontent_infected_prob:
if self.prob(scontent_neighbors * self.neutral_discontent_infected_prob):
return self.discontent
content_neighbors = self.count_neighboring_agents(state_id=self.content.id)
if random.random() < content_neighbors * self.neutral_content_infected_prob:
if self.prob(s * self.neutral_content_infected_prob):
return self.content
return self.neutral
@state
def discontent(self):
# Healing
if random.random() < self.discontent_neutral:
if self.prob(self.discontent_neutral):
return self.neutral
# Superinfected
content_neighbors = self.count_neighboring_agents(state_id=self.content.id)
if random.random() < content_neighbors * self.discontent_content:
if self.prob(s * self.discontent_content):
return self.content
return self.discontent
@state
def content(self):
# Healing
if random.random() < self.content_neutral:
if self.prob(self.content_neutral):
return self.neutral
# Superinfected
discontent_neighbors = self.count_neighboring_agents(state_id=self.discontent.id)
if random.random() < discontent_neighbors * self.content_discontent:
if self.prob(scontent_neighbors * self.content_discontent):
self.discontent
return self.content