Skip to content

Commit

Permalink
⬆️ UTLDR model
Browse files Browse the repository at this point in the history
  • Loading branch information
GiulioRossetti committed Mar 31, 2020
1 parent 53363d9 commit 59fcfce
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 2 deletions.
33 changes: 31 additions & 2 deletions ndlib/models/epidemics/UTLDRModel.py
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,18 @@ def __init__(self, graph, seed=None):
"optional": True,
"default": 1
},
"z": {
"descr": "Probability of infection from corpses",
"range": [0, 1],
"optional": True,
"default": 0
},
"s": {
"descr": "Probability of absent immunization",
"range": [0, 1],
"optional": True,
"default": 0
},
},
"nodes": {
"activity": {
Expand Down Expand Up @@ -293,7 +305,12 @@ def iteration(self, node_status=True):

####################### Resolved Compartment ###########################

elif u_status == self.available_statuses['Dead'] or u_status == self.available_statuses['Recovered']:
elif u_status == self.available_statuses['Recovered']:
immunity = np.random.random_sample()
if immunity < self.params['model']['s']:
actual_status[u] = self.available_statuses['Susceptible']

elif u_status == self.available_statuses['Dead']:
pass

delta, node_count, status_delta = self.status_delta(actual_status)
Expand Down Expand Up @@ -400,7 +417,12 @@ def __Susceptible_to_Exposed(self, u, neighbors, lockdown=False):
l_range = np.random.random_sample() # long range interaction
if l_range < l_range_proba:
# filtering out quarantined and dead nodes
candidates = [n for n in self.graph.nodes if self.status[n] not in [self.available_statuses['Tested_E'], self.available_statuses['Tested_I'], self.available_statuses['Dead']]]
if self.params['model']['z'] == 0:
candidates = [n for n in self.graph.nodes if self.status[n] not in [self.available_statuses['Tested_E'], self.available_statuses['Tested_I'], self.available_statuses['Dead']]]
else:
candidates = [n for n in self.graph.nodes if self.status[n] not in [self.available_statuses['Tested_E'],
self.available_statuses['Tested_I']]]

interactions.extend(list(np.random.choice(a=candidates, size=int(social_interactions*self.params['model']['lsize']), replace=True)))

for v in interactions:
Expand All @@ -411,6 +433,13 @@ def __Susceptible_to_Exposed(self, u, neighbors, lockdown=False):
return self.available_statuses['Lockdown_E']
return self.available_statuses['Exposed']

elif self.status[v] == self.available_statuses['Dead']:
zp = np.random.random_sample()
if zp < self.params['model']['z']:
if lockdown:
return self.available_statuses['Lockdown_E']
return self.available_statuses['Exposed']

if lockdown:
return self.available_statuses['Lockdown_S']
return self.available_statuses['Susceptible']
2 changes: 2 additions & 0 deletions ndlib/test/test_ndlib.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,8 @@ def test_utldr(self):
config.add_model_parameter("epsilon_e", 1)
config.add_model_parameter("icu_b", 0.15)
config.add_model_parameter("iota", 0.20)
config.add_model_parameter("z", 0.2)
config.add_model_parameter("s", 0.05)

# Lockdown
config.add_model_parameter("lambda", 0.8)
Expand Down

0 comments on commit 59fcfce

Please sign in to comment.