J'ai essayé de simuler la propagation de l'infection avec Python

motivation

Cette fois, j'ai essayé de simuler la propagation de l'infection comme point de départ pour comprendre correctement le contenu mentionné par M. Mercel et M. Johnson et le contenu annoncé par le ministère de la Santé, du Travail et du Bien-être.

Pourquoi Qiita?

En ce moment (1er avril 2020), certaines personnes peuvent ne pas vouloir faire une telle simulation, mais je pensais que les personnes qui liraient Qiita comprendraient correctement le but et le contenu. Il peut être effacé le moment venu.

Contenu?

La source est disponible sur github. (https://github.com/ryos36/sim-covid-19). Veuillez noter qu'il n'y a aucune base médicale ou mathématique (en particulier les statistiques). De plus, le résultat n'est qu'une simulation. Si vous modifiez les paramètres, le résultat correspondra à ce que vous souhaitez.

Contenu du programme

Le programme est écrit en Python. Il y aura des bugs car il n'a pas été entièrement testé et fait pas mal dans RAPID. Je suis personnellement bon à ce stade parce que j'obtiens des résultats décents. Les paramètres peuvent être modifiés. Pour le moment, l'explication est donnée dans Param.md (https://github.com/ryos36/sim-covid-19/blob/master/Param.md) sur github. Peut-être que cela ne suffit pas. Si vous êtes intéressé, veuillez lire la source. Je ne vais pas actuellement en expliquer la source.

La source est sale

Ce n'est pas classé (car int semblait être plus rapide, je ne l'ai pas vérifié), et il y a une boucle inutile. La première demi-boucle (mises à jour), la deuxième demi-boucle (collecte d'informations statistiques), la boucle de dessin et la boucle de simulation de mouvement peuvent probablement être réalisées en une seule boucle (si vous y réfléchissez maintenant, la vitesse de simulation augmentera. Il sera quadruplé).

La simulation est lente

La simulation prend du temps car elle ne vise pas à accélérer. À l'avenir, j'aimerais faire de la simulation interurbaine, mais si vous le faites, il vaut mieux classer et organiser correctement. Si vous l'écrivez dans CUDA, ce sera plus rapide.

Égal à aucune interface utilisateur

Il n'est pas représenté graphiquement et il est difficile de donner des paramètres de manière flexible. Faites-en une application Web en l'associant au JavaScript de quelqu'un.

Faites une simulation.

Avant la simulation, je vais lister les informations qui me semblent motivantes (source qui semble correcte).

Il existe probablement deux scénarios d'infection au COVID-19. ――Il finira par converger comme la grippe —— 60 à 70% d'infectés (jusqu'à ce que) convergent Donc, cette fois, j'ai pris la position que l'infection se propage jusqu'à ce que cette dernière immunité de masse soit acquise.

Certaines personnes simulent avec quelque chose comme un modèle moléculaire. (La source originale semble être le Washington Post)

Simulons facilement

Pour l'instant, il est flexible, j'ai donc essayé de quantifier et de simuler les «rumeurs» qui circulent dans les rues. Les paramètres importants de cette simulation sont les suivants.

Qu'est-ce que ça veut dire?

Ce que signifie ce modèle, c'est simplement combien de personnes seront éventuellement infectées à partir des deux paramètres de la valeur R0 et de la population à simuler? Cela représente juste. Vous pouvez réellement le découvrir par calcul sans simulation. Si la population est de 1920 * 1080 = 2073600, le taux d'infection est de 80%, le taux de gravité est de 5% et le taux d'élimination des cas graves est de 5% (= taux de mortalité de 0,25%), 4147,2 personnes seront tuées. Le taux d'hospitalisation et le taux de létalité de la grippe semblent inférieurs. (https://www.hosp.med.osaka-u.ac.jp/home/hp-infect/file/ictmon/ictmon162.pdf) Si vous attribuez un taux d'infection de 16% et un taux de létalité de 0,001% à la même population , 3,46 personnes. En dehors de cette simulation, toutes les maladies infectieuses ont une certaine probabilité de prédire les victimes. Le premier point que suggère cette simulation n'est pas le nombre de victimes, mais la durée. Il faut plus de 300 jours pour converger. J'ai utilisé le mot suggestion, mais il est peut-être exact de dire qu'il a été simulé plutôt que suggestion parce que la simulation a été conçue de cette façon.

Comment évaluez-vous le nombre de victimes?

A partir de là, c'est une histoire sensible. Même dans le même cas, le sacrifice que la société doit accepter et le sacrifice que les individus ne peuvent accepter seront différents. Il existe également de nombreux problèmes émotionnels. Pour l'instant, mettez-le de côté pour la simulation uniquement. Le nombre de lits a également été pris en compte dans la simulation. Nous comparons le nombre de personnes gravement malades avec le nombre de paris prédéfini (en supposant 1/1000 de la population), et si le nombre de lits est insuffisant, la probabilité de disparition est élevée. Nous ne simulons pas les symptômes de chaque personne. Comparons et simulons le cas où il y a suffisamment de lits et le cas où il n'y a pas assez de lits. image.png

Quand la gauche est insuffisante et la droite est abondante. La couleur orange du graphique est la victime. Le nombre de lits étant petit, le nombre de personnes gravement malades diminuera en rentrant chez elles en silence plutôt qu'en étant guéri, ce qui est un résultat de simulation plutôt choquant. J'aimerais que vous parliez uniquement de la simulation.

Supprimer les voyages longue distance

Dans cette simulation, la suppression des déplacements sur de longues distances ralentit la propagation de l'infection. Ce monsieur est un auteur-compositeur. Étant donné que la simulation dure à l'origine sur 300 jours, elle sera douce, mais cela signifie que la période de simulation prendra plusieurs années.

image.png

Le graphique ci-dessus montre le nombre de personnes gravement malades. Avec 400 jours de contrôle des déplacements longue distance (période de couleur rouge), nous avons pu créer une situation où nous pourrions toujours sécuriser le nombre de lits. Le résultat est qu'il faut plus de 700 jours pour une convergence complète.

La suppression (verrouillage) des mouvements intermittents sur de longues distances est-elle efficace?

Le résultat (sur la simulation) que la suppression des voyages longue distance semble être efficace, mais je voudrais le rendre aussi confortable que possible dans ma vie. Simulons avec la prédiction que "ce sera possible en supprimant les mouvements à longue distance par intermittence".

image.png

La figure ci-dessus est un graphique du nombre de personnes infectées. La suppression pendant 7,14 jours a peu d'effet. Il y a une nette différence dans le graphique à 28 jours. Si nous l'avons fait pendant 400 jours consécutifs, cela pourrait être presque plat. Il commence également à montrer que la suppression après la propagation de l'infection est moins efficace. La suppression devrait commencer un peu plus tôt.

Comparaison avec Imperial-College-COVID19-NPI-modelage-16-03-2020.pdf

Comparons-le avec Imperial-College-COVID19-NPI-modelage-16-03-2020.pdf. Ensuite, j'emprunterai la figure du pdf.

image.png

Ce pdf suggère une ** suppression ** pendant 4 semaines, initialement 6 semaines, à 2 semaines d'intervalle. Faisons de même avec cette simulation.

image.png

L'évaluation des résultats est devenue très difficile. Le bleu est le nombre de personnes gravement malades, l'orange le nombre de personnes décédées et le gris la période de suppression. En haut des trois graphiques, la suppression était trop tôt. Le fond était en retard, mais cela a fonctionné. Il semble que la suppression devrait être effectuée au ** bon moment ** pendant une période appropriée **, et dans l'environnement de simulation ici, la suppression devrait être effectuée de manière à couvrir environ 0,3% de la population souffrant d'une maladie grave. C'était comme. Dans le monde réel, il y a trop de paramètres et il peut être assez difficile d'obtenir le bon timing.

Défis de simulation

Les résultats de la simulation dépendent de la structure programmatique. Par exemple, calculez des résultats différents lorsque le point de départ est au milieu et lorsqu'il est à l'extrémité gauche. Il se peut que des facteurs géographiques soient pris en considération, mais cela reste une question de programme. Les villes réelles sont continues et la densité de population n'est pas uniforme, elles doivent donc être prises en compte lors de la simulation.

image.png

Si le point de départ est au milieu comme indiqué sur la figure, l'infection se propagera rapidement et les dégâts seront importants (en simulation).

C'est juste une simulation

Dernier point mais non le moindre, ce n'est qu'une simulation. Que puis-je dire? Que peut-on vérifier? C'est très difficile car les données réelles ne peuvent pas être trouvées avec précision.

Peut-être que certaines personnes commencent à dire que c'est une «bataille à long terme», alors je pense qu'ils simulent quelque part avec des données précises et des méthodes plus mathématiques et analytiques. Si ces programmes et formules sont rendus publics et vérifiés par de multiples chercheurs et programmeurs, ils seront mieux compris au moins en termes de simulation.

Intuitivement, les humains bougent mais ne bougent pas fréquemment, il semble donc difficile d'intégrer pleinement un tel comportement humain mathématiquement. En ce sens, ces simulations programmatiques ont-elles un sens?

Un an plus tard, la simple simulation était une simulation. J'espère pouvoir regarder en arrière avec un sentiment de bonheur.

Supplément

Immédiatement après la déclaration d'urgence (10 avril 2020)

La figure est citée des questions et réponses (pour le grand public) concernant le nouveau virus corona. Dans la politique de base des mesures contre les nouvelles infections à coronavirus (25 février, 2ème année de Reiwa), le pic a été expliqué comme le montre la figure.

image.png

Probablement, c'était censé être une immunité de masse. (Je crains que la zone de la montagne soit différente)

Les informations ont commencé à changer un peu après le déclenchement de l'urgence. Les informations de la "Conférence d'experts sur les contre-mesures contre les nouvelles maladies infectieuses à virus Corona" sont répertoriées.

image.png

«Nous visons à réduire les contacts avec les personnes à au moins 70% et jusqu'à 80%.» Ensuite, comme le montre le graphique, le nombre de patients diminuera. Ce n'est pas une simulation, et il semble que le nombre de R0 soit multiplié par 0,2 (réduction de 80%) pour montrer le nombre qui sera le cas après la période de latence + la période jusqu'à la guérison.

En regardant les réalisations à Hokkaido (citées par le gouvernement de Hokkaido), il semble que ce sera plat. image.png

Je souhaite garder un œil sur les tendances futures.

Recommended Posts

J'ai essayé de simuler la propagation de l'infection avec Python
J'ai essayé de toucher un fichier CSV avec Python
J'ai essayé de résoudre Soma Cube avec python
J'ai essayé de résoudre le problème avec Python Vol.1
J'ai étudié comment rationaliser le flux de travail avec Excel x Python ②
J'ai étudié comment rationaliser le flux de travail avec Excel x Python ④
J'ai essayé de savoir comment rationaliser le flux de travail avec Excel x Python ⑤
J'ai étudié comment rationaliser le flux de travail avec Excel x Python ①
J'ai étudié comment rationaliser le flux de travail avec Excel x Python ③
Le 15e temps réel hors ligne, j'ai essayé de résoudre le problème de l'écriture avec python
J'ai essayé de résoudre l'édition du débutant du livre des fourmis avec python
J'ai essayé d'améliorer l'efficacité du travail quotidien avec Python
J'ai essayé de résoudre le problème de F02 comment écrire en temps réel hors ligne avec Python
J'ai écrit un doctest dans "J'ai essayé de simuler la probabilité d'un jeu de bingo avec Python"
J'ai essayé de "lisser" l'image avec Python + OpenCV
J'ai essayé de "différencier" l'image avec Python + OpenCV
J'ai essayé de sauvegarder les données avec discorde
J'ai essayé d'obtenir des données CloudWatch avec Python
J'ai essayé de sortir LLVM IR avec Python
J'ai essayé de "binariser" l'image avec Python + OpenCV
J'ai essayé d'automatiser la fabrication des sushis avec python
[Python] J'ai essayé de visualiser la nuit du chemin de fer de la galaxie avec WordCloud!
Comment écrire hors ligne en temps réel J'ai essayé de résoudre E11 avec python
J'ai essayé d'obtenir le code d'authentification de l'API Qiita avec Python.
J'ai essayé avec les 100 meilleurs packages PyPI> J'ai essayé de représenter graphiquement les packages installés sur Python
J'ai essayé de rationaliser le rôle standard des nouveaux employés avec Python
J'ai essayé d'obtenir les informations sur le film de l'API TMDb avec Python
Comment écrire en temps réel hors ligne J'ai essayé de résoudre E12 avec python
J'ai essayé de savoir comment rationaliser le flux de travail avec Excel × Python, mon résumé d'article ★
J'ai essayé fp-growth avec python
J'ai essayé de gratter avec Python
J'ai essayé gRPC avec Python
J'ai essayé de gratter avec du python
J'ai essayé d'entraîner la fonction péché avec chainer
J'ai essayé de représenter graphiquement les packages installés en Python
J'ai essayé de résumer comment utiliser matplotlib de python
[Introduction à Python] Comment itérer avec la fonction range?
J'ai essayé d'implémenter Mine Sweeper sur un terminal avec python
J'ai essayé de démarrer avec le script python de blender_Part 01
[Python] Comment spécifier l'emplacement de téléchargement avec youtube-dl
J'ai essayé de démarrer avec le script python de blender_Partie 02
J'ai essayé d'implémenter le perceptron artificiel avec python
Je veux hériter de l'arrière avec la classe de données python
[Python] J'ai essayé de représenter graphiquement le top 10 des ombres à paupières
J'ai essayé de résumer comment utiliser les pandas de python
[Python] Comment réécrire le style de table avec python-pptx [python-pptx]
J'ai essayé de simuler la méthode de calcul de la moyenne des coûts en dollars
J'ai essayé de frapper l'API avec le client python d'echonest
J'ai essayé de résumer les opérations de chaîne de Python
J'ai essayé de résoudre la théorie des nombres entiers d'AOJ avec Python
Simulons la transition du taux d'infection par rapport à la densité de population avec python
J'ai essayé de visualiser facilement les tweets de JAWS DAYS 2017 avec Python + ELK
J'ai essayé d'envoyer automatiquement la littérature du nouveau virus corona à LINE avec Python
J'ai essayé la "correction gamma" de l'image avec Python + OpenCV
J'ai essayé d'analyser les émotions de tout le roman "Weather Child" ☔️
Python: comment utiliser async avec