Récemment, j'entends souvent le terme modèle SIR lié au virus corona. On sait que le modèle SIR s'intègre bien dans le graphique des personnes infectées comme la grippe, et il est également utile pour les contre-mesures contre ce virus corona.
Il se trouve que je prends des cours similaires, donc il peut s'agir d'environ 100 bières, mais j'aimerais le résumer facilement afin que même les élèves du premier cycle du secondaire puissent le comprendre. Enfin, simulons avec du code Python.
Le modèle SIR est un modèle mathématique qui exprime la propagation des maladies infectieuses. S signifie personne non infectée, I signifie personne infectée (personne actuellement infectée, pas le nombre total de personnes infectées) et R signifie personne rétablie. Dans le modèle SIR, le récupérateur est immunisé et ne sera plus infecté. Il s'exprime par les trois formules suivantes en douceur sans utiliser de petit produit.
\Delta S = - \beta S I
\Delta I = \beta S I - \nu I
\Delta R = \nu I
Si vous connaissez la chimie, considérez-la comme une équation de vitesse de réaction (la loi de l'action de masse). $ \ Delta S $, $ \ Delta I $ et $ \ Delta R $ représentent les changements de $ S $, $ I $ et $ R $, respectivement. Plus précisément, combien $ S $, $ I $ et $ R $ augmenteront ou diminueront demain. Par exemple, le $ S $ de demain sera $ S + \ Delta S $. $ \ Beta $ est le taux d'infection et $ \ nu $ est le taux de guérison, qui est déterminé par le type de maladie que vous avez. $ 1 / \ nu $ est approximativement le nombre de jours qu'il faudra pour récupérer.
Maintenant, ajoutons les deux côtés de ces trois formules.
\Delta S + \Delta I + \Delta R = 0
Vous pouvez voir que c'est le cas. $ \ Delta S + \ Delta I + \ Delta R $ représente la somme de $ S $, $ I $ et $ R $ qui augmentera ou diminuera demain. C'est 0 $, ce qui signifie que ce modèle n'est pas un modèle étrange qui augmentera ou réduira la population totale. Cette fois, disons $ S + I + R = 1 $. Par exemple, lorsque $ I = 0,1 $, cela signifie que 10% des habitants du pays sont $ I $ (personne infectée).
Ensuite, considérons la signification de la formule. La première formule était la suivante.
\Delta S = - \beta S I
Cette formule montre que demain, S (non infecté) sera réduit de $ \ beta S I $. Diminuer signifie devenir une personne infectée. La raison pour laquelle le montant de la réduction est déterminé par le produit de $ S $ et $ I $ peut être facilement imaginée en substituant une valeur spécifique.
Dans un pays où tout le monde est infecté et où il n'y a pas de personnes non infectées, $ S = 0 $, donc $ SI = 0
En résumant ce qui précède, nous pouvons voir que cette formule exprime que le produit du taux de rencontre et du taux d'infection $ \ beta $ est nouvellement infecté. Ensuite, regardons la troisième formule.
\Delta R = \nu I
Cette formule signifie qu'autant de personnes que le nombre de personnes infectées multiplié par le taux de guérison se rétablira. Il semble un peu étrange que le nombre de récupération dépende du pourcentage de personnes infectées, mais le modèle SIR le suppose. Enfin, regardons la deuxième formule.
\Delta I = \beta S I - \nu I
Compte tenu de la signification des première et troisième formules, vous pouvez voir que le nombre de personnes infectées augmente du nombre de (personnes nouvellement infectées) - (personnes nouvellement rétablies). Lorsque (personne nouvellement infectée) <(personne nouvellement rétablie), cela devient négatif, nous pouvons donc voir que le nombre de personnes infectées diminue.
Je l'écrirai pendant mon temps libre
J'écrirai l'explication pendant mon temps libre
sir.py
import matplotlib.pyplot as plt
import numpy as np
beta = 0.5
nu = 0.3
period = 100
def next_state(s, i, r):
delta_s = - beta*s*i
delta_i = beta*s*i - nu*i
s = s + delta_s
i = i + delta_i
if s < 0:
s = 0
if i > 1:
i = 1
r = 1 - s - i
return s, i, r
def main():
results = []
i = 0.01
r = 0
s = 1 - i - r
l_s = [s]
l_i = [i]
l_r = [r]
results.append([s,i,r])
r0 = beta*s/nu
print(s, i, r)
for t in range(period):
s, i, r = next_state(s, i, r)
results.append([s,i,r])
l_s.append(s)
l_i.append(i)
l_r.append(r)
print("R0:{}".format(r0))
plt.figure()
plt.title("R0:{}".format(format(r0,".3f")))
plt.xlabel('Time')
plt.ylabel('Rate')
x = np.linspace(0, 100, period+1)
plt.plot(x, l_s, label="S")
plt.plot(x, l_i, label="I")
plt.plot(x, l_r, label="R")
plt.legend()
plt.show()
main()
Résultat d'exécution
Recommended Posts