COVID-19のような感染症の簡単なモデル。ここではWikipediaのSIRモデルの解説にならって
\[ \frac{dS}{dt} = -\beta SI, \quad \frac{dI}{dt} = \beta SI - \gamma I, \quad \frac{dR}{dt} = \gamma I \]とする。$S$ はまだ感染していない人(susceptible),$I$ は感染している人(infected),$R$ は治った人(recovered)または治った人+死んだ人(removed)。
人口を $N$ とすると,初期値は $S = N$ で,初期において1人の感染者は $1/\gamma$ の期間に $R_0 = \beta N / \gamma$ 人を感染させる割合で,指数関数的に感染者が増加する。
これをPythonでごくおおざっぱにシミュレーションしてみる。
import matplotlib.pyplot as plt
N = 126000000 # 日本の人口
R0 = 2
gamma = 0.2
beta = R0 * gamma / N
S = N
I = 1 # 最初は1人が感染
R = 0
aS = [S / N]
aI = [I / N]
aR = [R / N]
aRt = [R0]
for t in range(200):
S, I, R = S - beta * S * I, I + beta * S * I - gamma * I, R + gamma * I
Rt = beta * S / gamma
aS.append(S / N)
aI.append(I / N)
aR.append(R / N)
aRt.append(Rt)
plt.plot(aS, "v-", label="S")
plt.plot(aI, "o-", label="I")
plt.plot(aR, "^-", label="R")
plt.legend()
Last modified: