28
28
29
29
class SimSirModel :
30
30
31
+ def gen_policy (self , p : Parameters ) -> List [Tuple [float , int ]]:
32
+ if p .mitigation_date is not None :
33
+ mitigation_day = - (p .current_date - p .mitigation_date ).days
34
+ else :
35
+ mitigation_day = 0
36
+
37
+ total_days = self .i_day + p .n_days
38
+
39
+ if mitigation_day < - self .i_day :
40
+ mitigation_day = - self .i_day
41
+
42
+ pre_mitigation_days = self .i_day + mitigation_day
43
+ post_mitigation_days = total_days - pre_mitigation_days
44
+
45
+ return [
46
+ (self .beta , pre_mitigation_days ),
47
+ (self .beta_t , post_mitigation_days ),
48
+ ]
49
+
31
50
def __init__ (self , p : Parameters ):
32
51
33
52
self .rates = {
@@ -66,14 +85,13 @@ def __init__(self, p: Parameters):
66
85
intrinsic_growth_rate = get_growth_rate (p .doubling_time )
67
86
68
87
self .beta = get_beta (intrinsic_growth_rate , gamma , self .susceptible , 0.0 )
88
+ self .beta_t = get_beta (intrinsic_growth_rate , self .gamma , self .susceptible , p .relative_contact_rate )
69
89
70
90
self .i_day = 0 # seed to the full length
71
- self .beta_t = self .beta
72
- self .run_projection (p )
91
+ self .run_projection (p , [(self .beta , p .n_days )])
73
92
self .i_day = i_day = int (get_argmin_ds (self .census_df , p .current_hospitalized ))
74
93
75
- self .beta_t = get_beta (intrinsic_growth_rate , self .gamma , self .susceptible , p .relative_contact_rate )
76
- self .run_projection (p )
94
+ self .run_projection (p , self .gen_policy (p ))
77
95
78
96
logger .info ('Set i_day = %s' , i_day )
79
97
p .date_first_hospitalized = p .current_date - timedelta (days = i_day )
@@ -100,7 +118,7 @@ def __init__(self, p: Parameters):
100
118
self .beta = get_beta (intrinsic_growth_rate , self .gamma , self .susceptible , 0.0 )
101
119
self .beta_t = get_beta (intrinsic_growth_rate , self .gamma , self .susceptible , p .relative_contact_rate )
102
120
103
- self .run_projection (p )
121
+ self .run_projection (p , self . gen_policy ( p ) )
104
122
loss = self .get_loss ()
105
123
losses [i ] = loss
106
124
@@ -109,7 +127,7 @@ def __init__(self, p: Parameters):
109
127
intrinsic_growth_rate = get_growth_rate (p .doubling_time )
110
128
self .beta = get_beta (intrinsic_growth_rate , self .gamma , self .susceptible , 0.0 )
111
129
self .beta_t = get_beta (intrinsic_growth_rate , self .gamma , self .susceptible , p .relative_contact_rate )
112
- self .run_projection (p )
130
+ self .run_projection (p , self . gen_policy ( p ) )
113
131
114
132
self .population = p .population
115
133
else :
@@ -146,30 +164,14 @@ def __init__(self, p: Parameters):
146
164
self .daily_growth_rate = get_growth_rate (p .doubling_time )
147
165
self .daily_growth_rate_t = get_growth_rate (self .doubling_time_t )
148
166
149
- def run_projection (self , p ):
150
- if p .mitigation_date is not None :
151
- mitigation_day = - (p .current_date - p .mitigation_date ).days
152
- else :
153
- mitigation_day = 0
154
-
155
- total_days = self .i_day + p .n_days
156
-
157
- if mitigation_day < - self .i_day :
158
- mitigation_day = - self .i_day
159
-
160
- pre_mitigation_days = self .i_day + mitigation_day
161
- post_mitigation_days = total_days - pre_mitigation_days
162
-
167
+ def run_projection (self , p : Parameters , policy : List [Tuple [float , int ]]):
163
168
self .raw_df = sim_sir_df (
164
169
self .susceptible ,
165
170
self .infected ,
166
171
p .recovered ,
167
172
self .gamma ,
168
173
- self .i_day ,
169
- [
170
- (self .beta , pre_mitigation_days ),
171
- (self .beta_t , post_mitigation_days ),
172
- ]
174
+ policy
173
175
)
174
176
175
177
self .dispositions_df = build_dispositions_df (self .raw_df , self .rates , p .market_share , p .current_date )
0 commit comments