Résolution de modèles mathématiques d'épidémies de maladies infectieuses en Python

**Mise en garde! Cet article ne contient pas plus d'informations que ce que j'ai essayé. ** **

Modèle mathématique des maladies infectieuses

En réponse à la situation récente du COVID 19, je pense que divers modèles mathématiques de maladies infectieuses ont été évoqués, mais résolvons-le avec Python odeint et visualisons-le tel quel avec matplotlib. Cela semble gênant, mais vous ne devriez pas exprimer de sentiments à propos de COVID 19 à la suite de la mise en œuvre correcte de quelque chose dans cet article.

Alors, disons que le modèle SIR le plus simple à résoudre est

\begin{align}
\frac{\mathrm{d} S}{\mathrm{d} t} & = - \beta I S\\
\frac{\mathrm{d} I}{\mathrm{d} t} & = \beta I S - \gamma I\\
\frac{\mathrm{d} R}{\mathrm{d} t} & = \gamma I
\end{align}

Je vais le laisser tel quel. $ \ Beta $ est le taux d'infection (/ (personne x heures)), le nombre de personnes non transmises qui peuvent être infectées par unité de temps par personne malade, $ \ gamma $ est le taux de guérison ( / Heure), qui est l'inverse du temps nécessaire pour guérir. $ S $ est le nombre de personnes qui n'ont pas été infectées et ne sont pas capables d'infecter, $ I $ est le nombre de personnes qui sont infectées et ont la capacité d'en infecter d'autres, $ R $ est l'isolement, la guérison, la mort, etc. Le nombre de personnes qui ont été infectées ou qui ont perdu la capacité d'en infecter d'autres.

Python code Comme c'est gênant, j'ai mis un code solide sans aucune explication.

import numpy as np
from scipy.integrate import odeint
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider, Button

def solve(value, t, foi, rr):
	# fio = force of infection (beta)
	# rr = recovery rate
	S, I, R = value
	dSdt = - foi * I * S
	dIdt = foi * I * S - rr * I
	dRdt = rr * I
	return [dSdt, dIdt, dRdt]


span = 100
t = np.linspace(0, span, 256)
initial_value = [0.9, 0.1, 0] # initial values for S, I, R
solution = odeint(solve, initial_value, t, args = (0.5, 0.5))

fig, ax = plt.subplots(figsize=(12, 6))
plt.xlim(0, span)
plt.ylim(0, 1)
plt.subplots_adjust(bottom = 0.2)

data_S, = plt.plot(t, solution[:, 0], "blue", label = "Susceptible")
data_I, = plt.plot(t, solution[:, 1], "red", label = "Infectious")
data_R, = plt.plot(t, solution[:, 2], "orange", label = "Removed")

plt.legend(loc = "best")

rr_slider = Slider(plt.axes([0.2, 0.02, 0.65, 0.02]), "recovery rate", 0, 1, valinit = 0.5, valstep = 0.1)
foi_slider = Slider(plt.axes([0.2, 0.05, 0.65, 0.02]), "force of inf.", 0, 1, valinit = 0.5, valstep = 0.1)

def update(val):
	rr = rr_slider.val
	foi = foi_slider.val
	solution = odeint(solve, initial_value, t, args=(foi, rr))
	data_S.set_ydata(solution[:, 0])
	data_I.set_ydata(solution[:, 1])
	data_R.set_ydata(solution[:, 2])
	fig.canvas.draw_idle()

rr_slider.on_changed(update)
foi_slider.on_changed(update)

plt.show()

Résultat d'exécution

スクリーンショット 2020-03-19 16.18.58.png Je pense que ce genre de chose sortira. Au fait, je n'étais pas sûr des valeurs correctes pour le taux d'infection et le taux de guérison, alors j'ai créé des boutons pour pouvoir ajuster les valeurs, alors veuillez jouer avec.

alors

Bien jouer. Si vous souhaitez résoudre l'équation différentielle en ondulant les paramètres, n'hésitez pas à nous contacter.

Recommended Posts

Résolution de modèles mathématiques d'épidémies de maladies infectieuses en Python
Modèle mathématique des épidémies de maladies infectieuses
Résolution d'équations de mouvement en Python (odeint)
Jugement d'équivalence d'objet en Python
Implémentation du tri rapide en Python
Manipulation des pixels d'image en Python
Diviser timedelta dans la série Python 2.7
Échappement automatique des paramètres MySQL en python
Gestion des fichiers JSON en Python
Implémentation du jeu de vie en Python
Affichage de la forme d'onde audio en Python
La loi des nombres en python
Implémentation du tri original en Python
Brouillage réversible d'entiers en Python
Implémentation du filtre à particules par Python et application au modèle d'espace d'états
Conversion de la chaîne <-> date (date, datetime) en Python
Vérifiez le comportement du destroyer en Python
Pratique d'utilisation de ceci en Python (mauvais)
Théorie générale de la relativité en Python: Introduction
Arborescence de sortie des fichiers en Python
Afficher une liste d'alphabets en Python 3
Comparaison des modules de conversion japonais en Python3
Résumé de diverses instructions for en Python
Somme des variables dans un modèle mathématique
Le résultat de l'installation de python sur Anaconda
Modèles Gang of Four (GoF) en Python
Principes de base pour exécuter NoxPlayer en Python
Remplacement en bloc des chaînes dans les tableaux Python
Projet Euler # 16 "Somme des pouvoirs" en Python
Traffic Safety-kun: Reconnaissance des panneaux de signalisation en Python
Résumé des méthodes intégrées, etc. de la liste Python
Utilisation d'opérateurs non logiques de ou en python
Classification des maladies par Random Forest en utilisant Python
[Python] Enregistrement des résultats d'apprentissage (modèles) dans l'apprentissage automatique
À la recherche du FizzBuzz le plus rapide en Python
Exemple pratique d'architecture hexagonale en Python
Projet Euler # 17 "Nombre de caractères" en Python
Equation de mouvement à double pendule en python
Prédire les épidémies de maladies infectieuses avec le modèle SIR
Débarrassez-vous des images DICOM en Python
[Python] Classification des maladies dans une forêt aléatoire-avec LDA-
Statut de chaque système de traitement Python en 2020
Projet Euler # 1 "Multiple de 3 et 5" en Python
Implémenter le modèle mathématique «modèle SIR» des maladies infectieuses dans OpenModelica (voir l'effet du vaccin)
Étudier les mathématiques avec Python: résoudre des problèmes simples de probabilité
Sortie du nombre de cœurs de processeur en Python
Dessiner un graphique d'une fonction quadratique en Python
[Python] Trier la liste de pathlib.Path dans l'ordre naturel
Recevoir le websocket de l'API kabu station ® en Python
Résumé de la façon d'importer des fichiers dans Python 3
Projet Euler # 10 "somme des nombres premiers" en Python
Fonctionnement sans assistance des feuilles de calcul Google (etc.) en Python
Récupérer l'appelant d'une fonction en Python
Faites correspondre la distribution de chaque groupe en Python
Afficher le résultat du traitement de la géométrie en Python
Copiez la liste en Python
Visualisation en temps réel des données thermographiques AMG8833 en Python
Résumé de l'utilisation de MNIST avec Python
Réécrire des éléments dans une boucle de listes (Python)