SIRモデル

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: