Skip to content

Commit ad8e6f0

Browse files
committed
Added variable cured rates
1 parent b3de697 commit ad8e6f0

File tree

2 files changed

+35
-7
lines changed

2 files changed

+35
-7
lines changed

epidemic_zhong_et_al_v2/generator/model_generator.py

Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,10 @@
88
parser.add_argument('-t', '--template_ma', type=str, default="template_sirs_zhong_ma", help='Path to zhong .ma template')
99
parser.add_argument('-m', '--template_macros', type=str, default="template_sirs_zhong_macros", help='Path to zhong macros template')
1010
parser.add_argument('-o', '--out_ma_file', type=str, default="out.ma", help='Output path of the .ma file')
11-
parser.add_argument('-p', '--out_macros_file', type=str, default="sirs_zhong_macros.inc", help='Output path of the macros file')
12-
parser.add_argument('-v', '--virulences', type=str, default="0.6", help='Default virulence values per state')
11+
parser.add_argument('-om', '--out_macros_file', type=str, default="sirs_zhong_macros.inc", help='Output path of the macros file')
12+
parser.add_argument('-ov', '--out_var_file', type=str, default="sirs_zhong.var", help='Output path of the .var file')
13+
parser.add_argument('-v', '--virulences', type=str, default="0.6", help='Default virulence values per infected state')
14+
parser.add_argument('-c', '--cured_rates', type=str, default="0.0", help='Default cured rates values per infected state')
1315

1416
args = parser.parse_args()
1517

@@ -33,15 +35,26 @@
3335
with open(args.template_ma, "r") as f:
3436
content = f.read()
3537

36-
internal_vars = ["i_%s" % s for s in states] + ["v_%d" % n for n in range(1, args.infected_steps + 1)]
38+
internal_vars = ["i_%s" % s for s in states] + \
39+
["v_%d" % n for n in range(1, args.infected_steps + 1)] + \
40+
["cr_%d" % n for n in range(1, args.infected_steps)]
3741
content = content.replace("[[internal_vars]]", " ".join(internal_vars))
3842

3943
internal_vars_values = " ".join(steps_per_state + ["1.0"] + ["0.0"] * (len(states) - 1))
4044
if "," in args.virulences:
4145
virulences = list(args.virulences.split(","))
4246
else:
4347
virulences = [args.virulences] * args.infected_steps
48+
4449
internal_vars_values += " %s" % " ".join(virulences)
50+
51+
if "," in args.cured_rates:
52+
cured_rates = list(args.cured_rates.split(","))
53+
else:
54+
cured_rates = [args.cured_rates] * (args.infected_steps - 1)
55+
56+
internal_vars_values += " %s" % " ".join(cured_rates)
57+
4558
content = content.replace("[[internal_vars_values]]", internal_vars_values)
4659
update_ports_str = " ".join(["~%s := $i_%s;" % (s, s) for s in states])
4760
content = content.replace("[[initial_ports_set_up]]", update_ports_str)
@@ -55,7 +68,8 @@
5568
update_rules += "$i_%s := $i_%s + #macro(local_cured);\n\n" % (states[idx_first_rec], states[idx_first_rec-1])
5669

5770
for i in range(idx_first_rec-1, 1, -1):
58-
update_rules += "$i_%s := round(min((1 - $cured_rate) * $i_%s, 1)*100)/100;\n" % (states[i], states[i - 1])
71+
cr = "$cr_%s" % states[i - 1].split("_")[-1]
72+
update_rules += "$i_%s := round(min((1 - %s) * $i_%s, 1)*100)/100;\n" % (states[i], cr, states[i - 1])
5973
update_rules += "$i_%s := #macro(internal_infected) + #macro(external_infected);\n\n" % states[1]
6074

6175
update_rules += "$i_%s := 1 " % states[0]
@@ -77,7 +91,8 @@
7791

7892
local_cured_rules = []
7993
for i in range(idx_first_rec-2, 0, -1):
80-
local_cured_rules.append("round(min($cured_rate * $i_%s, 1)*100)" % states[i])
94+
cr = "$cr_%s" % states[i].split("_")[-1]
95+
local_cured_rules.append("round(min(%s * $i_%s, 1)*100)" % (cr, states[i]))
8196

8297
content = content.replace("[[local_cured]]", "(( %s ) / 100 )" % " +\n".join(local_cured_rules))
8398
content = content.replace("[[infected_vars]]", " + ".join(["i_%s" % s for s in states[idx_first_rec:0]]))
@@ -118,3 +133,16 @@
118133

119134
with open(args.out_macros_file, "w") as f:
120135
f.write(content)
136+
137+
138+
#################################
139+
# GENERATION OF THE .VAR FILE
140+
#################################
141+
142+
with open(args.out_var_file, "w") as f:
143+
ivv = internal_vars_values.split()
144+
assert ivv[2] == "1.0" or ivv[2] == "1", "Unexpected vals (original susceptible: %s)" % ivv[2]
145+
ivv[2] = "0.7"
146+
ivv[3] = "0.3"
147+
stimulus = "(25,25) = 100 1 0.6 %s\n" % " ".join(ivv)
148+
f.write(stimulus)

epidemic_zhong_et_al_v2/generator/template_sirs_zhong_ma

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ initialvalue : -1
1616

1717
localtransition : sirs-zhong-rule
1818

19-
statevariables: population connection movement cured_rate t_i t_r [[internal_vars]]
20-
statevalues: 100 1 0.6 0.0 [[internal_vars_values]]
19+
statevariables: population connection movement t_i t_r [[internal_vars]]
20+
statevalues: 100 1 0.6 [[internal_vars_values]]
2121
initialvariablesvalue: sirs_zhong.var
2222

2323
neighborports : initial pop [[ports]]

0 commit comments

Comments
 (0)