[PYTHON] Implementieren Sie das mathematische Modell "SIR-Modell" von Infektionskrankheiten in OpenModelica (das die Sterblichkeitsrate und die Reinfektionsrate widerspiegelt).

Versuchen Sie, dem grundlegenden SIR-Modell Mortalitäts- und Reinfektionsraten hinzuzufügen

Mortalität und Reinfektion in der Klasse cl_SIRbetaInput, die im vorherigen Artikel "Implementierung eines mathematischen Modells" SIR-Modell "für Infektionskrankheiten in OpenModelica" erstellt wurde. Lassen Sie uns eine Vollversion mit der hinzugefügten Rate erstellen.

Voraussetzungen für dieses Modell ――Ein bestimmter Prozentsatz der Menschen stirbt an einer Infektion, um sich zu erholen ――Selbst diejenigen, die einmal Immunität erworben haben, verlieren im Laufe der Zeit mit einer bestimmten Rate die Immunität und kehren zu infektiösen Personen zurück

** Bitte beachten Sie, dass alle folgenden Simulationen nur eine Überprüfung des Modells mit temporären Parametern darstellen und die tatsächlichen Werte nicht widerspiegeln oder vorwegnehmen. ** **.

Erstellen Sie die Klasse cl_SIRreinfect, wobei die Mortalität der Klasse cl_SIRbetaInput hinzugefügt wird.

Als Parameter kann "Sterberate = Sterblichkeitsrate" eingestellt werden. Der Standardwert ist 0,01 (1%).

parameter Real dying_rate = 0.01 "Dying rate";

Der zusätzliche Gleichungsteil ist wie folgt Beim Übergang von I (infizierte Person) zu R (Geneser) wird die Anzahl der Geneser im Verhältnis zur Sterblichkeitsrate zum Tod, und der Rest wird zu "Überlebenden der Genesung".

equation
  der(Rdead) = Iy * gamma_const * dying_rate;
//  der(Rdead) = der(Ry) * dying_rate;
  Rlive = Ry - Rdead;

Fügen Sie mehr Reinfektionsrate hinzu

Die Formel zur erneuten Infektion finden Sie unter "COVID-19-Studie (R and Pandemic Mathematical Model New Corona Virus) als Beispiel". Ich tat. Wenn ρ die Reinfektionsrate ist, wird die folgende Formel erhalten.

\begin{align}

\frac{dS}{dt} &= -\beta SI + ρ R\\
\frac{dI}{dt} &=  \beta SI -\gamma I \\
\frac{dR}{dt} &=  \gamma I - ρ R\\

\end{align}

Hier können Sie "reinfect_rate = reinfection rate" als Parameter festlegen. Der Standardwert ist 0,001 (0,1%).

parameter Real reinfect_rate = 0.001 "Reinfection rate";

Der zusätzliche Gleichungsteil ist wie folgt Beim Übergang von I (infizierte Person) zu R (Geneser) wird die Anzahl der Geneser im Verhältnis zur Sterblichkeitsrate zum Tod, und der Rest wird zu "Überlebenden der Genesung". Unter den "Survival Recoveryern" verschiebt sich S (potenziell infektiös) proportional zur Reinfektionsrate, und R (Recovery) nimmt um diesen Betrag ab.

equation
  der(Sy) = (-contact_rate * Sy * Iy) + Rlive * reinfect_rate;
  der(Iy) = contact_rate * Sy * Iy - Iy * gamma_const;
  der(Ry) = Iy * gamma_const - Rlive * reinfect_rate;
  Inew = contact_rate * Sy * Iy;

Der ganze Code sieht so aus.

class cl_SIRreinfect
  extends Modelica.Blocks.Icons.Block;
  parameter Real gamma_const = 0.2 "Recovery rate (1/day)";
  parameter Real reinfect_rate = 0.001 "Reinfection rate";
  parameter Real dying_rate = 0.01 "Dying rate";
  Modelica.Blocks.Interfaces.RealInput Si "Connector of initial S(Susceptible)" annotation(
    Placement(visible = true, transformation(origin = {-120, 60}, extent = {{-20, -20}, {20, 20}}, rotation = 0), iconTransformation(origin = {-120, 62}, extent = {{-20, -20}, {20, 20}}, rotation = 0)));
  Modelica.Blocks.Interfaces.RealInput Ii "Connector of initial I (Infectious)" annotation(
    Placement(visible = true, transformation(origin = {-120, 0}, extent = {{-20, -20}, {20, 20}}, rotation = 0), iconTransformation(origin = {-120, 0}, extent = {{-20, -20}, {20, 20}}, rotation = 0)));
  Modelica.Blocks.Interfaces.RealInput Ri "Connector of initial R (Removed)" annotation(
    Placement(visible = true, transformation(origin = {-120, -60}, extent = {{-20, -20}, {20, 20}}, rotation = 0), iconTransformation(origin = {-120, -62}, extent = {{-20, -20}, {20, 20}}, rotation = 0)));
  Modelica.Blocks.Interfaces.RealOutput Sy "Output connector of S(Susceptible)" annotation(
    Placement(visible = true, transformation(origin = {110, 60}, extent = {{-10, -10}, {10, 10}}, rotation = 0), iconTransformation(origin = {110, 62}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
  Modelica.Blocks.Interfaces.RealOutput Iy "Output connector of I (Infectious)" annotation(
    Placement(visible = true, transformation(origin = {110, 0}, extent = {{-10, -10}, {10, 10}}, rotation = 0), iconTransformation(origin = {110, 0}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
  Modelica.Blocks.Interfaces.RealOutput Ry "Output connector of R (Removed)" annotation(
    Placement(visible = true, transformation(origin = {110, -60}, extent = {{-10, -10}, {10, 10}}, rotation = 0), iconTransformation(origin = {110, -60}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
  Modelica.Blocks.Interfaces.RealInput contact_rate "Connector of infectious rate" annotation(
    Placement(visible = true, transformation(origin = {0, 120}, extent = {{-20, -20}, {20, 20}}, rotation = -90), iconTransformation(origin = {0, 120}, extent = {{-20, -20}, {20, 20}}, rotation = -90)));
  Modelica.Blocks.Interfaces.RealOutput Inew "Output connector of New I(Infectious)" annotation(
    Placement(visible = true, transformation(origin = {-60, -110}, extent = {{-10, -10}, {10, 10}}, rotation = -90), iconTransformation(origin = {-60, -110}, extent = {{-10, -10}, {10, 10}}, rotation = -90)));
  Modelica.Blocks.Interfaces.RealOutput Rlive "Output connector of R (Live)" annotation(
    Placement(visible = true, transformation(origin = {60, -110}, extent = {{-10, -10}, {10, 10}}, rotation = -90), iconTransformation(origin = {60, -110}, extent = {{-10, -10}, {10, 10}}, rotation = -90)));
  Modelica.Blocks.Interfaces.RealOutput Rdead "Output connector of R (Dead)" annotation(
    Placement(visible = true, transformation(origin = {0, -110}, extent = {{-10, -10}, {10, 10}}, rotation = -90), iconTransformation(origin = {0, -110}, extent = {{-10, -10}, {10, 10}}, rotation = -90)));
initial equation
  Sy = Si;
  Iy = Ii;
  Ry = Ri;
  Rdead = 0;
equation
  der(Sy) = (-contact_rate * Sy * Iy) + Rlive * reinfect_rate;
  der(Iy) = contact_rate * Sy * Iy - Iy * gamma_const;
  der(Ry) = Iy * gamma_const - Rlive * reinfect_rate;
  Inew = contact_rate * Sy * Iy;
  der(Rdead) = Iy * gamma_const * dying_rate;
//  der(Rdead) = der(Ry) * dying_rate;
  Rlive = Ry - Rdead;
  annotation(
    Diagram,
    Icon(coordinateSystem(initialScale = 0.1), graphics = {Text(origin = {-62, 53}, extent = {{-52, 29}, {174, -133}}, textString = "SIR\nReI")}));
end cl_SIRreinfect;

Simulationsergebnisse einschließlich Sterblichkeitsrate und Reinfektionsrate

Simulation nur mit Mortalität

Erstellen Sie mit dem erstellten cl_SIRreinfect ein Modell mdl_SIRmodel_reinfect und simulieren Sie es. Hier wird kein Impfstoff verwendet. 20_SIR_full_model.png

Aus Gründen der Klarheit werden wir die Sterblichkeitsrate auf ziemlich hohe 20% einstellen und simulieren. 21_SIR_full_model_prm.png

Infolgedessen ist die Zahl der Todesfälle auf etwa 18% der Gesamtzahl angewachsen. 22_SIR_full_dead_graph.png

Simulation durch Einstellen nur der Reinfektionsrate

Als nächstes simulieren wir mit einem Modell, in dem nur die Reinfektionsrate eingestellt ist. Versuchen Sie eine höhere Reinfektionsrate von 1%. 23_SIR_full_model_prm.png

24_SIR_full_reinfect_graph.png

In der Simulation von bis zu 100 Tagen steigt die Anzahl infektiöser Personen weiter an und es ist nicht abzusehen, was in Zukunft passieren wird. Wenn Sie versuchen, bis zu 500 Tage zu simulieren, konvergieren alle S, I und R allmählich, während sie vibrieren. Wenn Sie sich I (Anzahl der infizierten Personen) ansehen, sehen Sie, dass es eine 2. und 3. Welle gibt. 25_SIR_full_reinfect_graph.png

Versuchen Sie, sowohl die Sterblichkeits- als auch die Reinfektionsrate festzulegen

Versuchen Sie, die beiden oben genannten Parameter gleichzeitig einzustellen. 28_SIR_full_model_prm.png

29_SIR_full_reinfect_graph.png

Zusammenfassung

Durch die Modellierung mit OpenModelica war es meiner Meinung nach einfach, Elemente nach und nach zum grundlegenden SIR-Modell hinzuzufügen und zu simulieren. Tatsächlich scheint es, dass sowohl die Sterblichkeitsrate als auch die Reinfektionsrate mehr als eine Größenordnung niedriger sind als diese Simulation, aber wenn genauere tatsächliche Daten erhalten werden können, ist es möglicherweise möglich, die Parameter zu identifizieren.

In Verbindung stehender Artikel

Implementierung des mathematischen Modells "SIR-Modell" von Infektionskrankheiten in Open Modelica Implementieren Sie ein mathematisches Modell "SIR-Modell" von Infektionskrankheiten in Open Modelica (siehe Wirkung des Impfstoffs) Einführung eines mathematischen Vorhersagemodells für Infektionskrankheiten (SIR-Modell)

Recommended Posts

Implementieren Sie das mathematische Modell "SIR-Modell" von Infektionskrankheiten in OpenModelica (das die Sterblichkeitsrate und die Reinfektionsrate widerspiegelt).
Implementieren Sie mit Open Modelica das mathematische Modell "SIR-Modell" von Infektionskrankheiten
Implementieren Sie mit OpenModelica das mathematische Modell "SIR-Modell" von Infektionskrankheiten (siehe Wirkung des Impfstoffs)
Einführung eines mathematischen Vorhersagemodells für Infektionskrankheiten (SIR-Modell)
Mathematisches Vorhersagemodell für Infektionskrankheiten (SIR-Modell): Fallstudie (1)
[SIR-Modellanalyse] Spitzenwert der Infektionszahlen in Japan und auf der ganzen Welt ♬
Implementieren Sie mit Open Modelica das mathematische Modell "SIR-Modell" von Infektionskrankheiten
Implementieren Sie das mathematische Modell "SIR-Modell" von Infektionskrankheiten in OpenModelica (das die Sterblichkeitsrate und die Reinfektionsrate widerspiegelt).
Implementieren Sie mit OpenModelica das mathematische Modell "SIR-Modell" von Infektionskrankheiten (siehe Wirkung des Impfstoffs)
Einführung eines mathematischen Vorhersagemodells für Infektionskrankheiten (SIR-Modell)
Implementieren Sie ein Modell mit Status und Verhalten (3) - Beispiel für die Implementierung durch den Dekorateur
Mathematisches Vorhersagemodell für Infektionskrankheiten (SIR-Modell): Fallstudie (1)
Mathematisches Modell von Infektionskrankheiten
Implementieren Sie ein Modell mit Status und Verhalten
Vorhersage von Epidemien von Infektionskrankheiten mit dem SIR-Modell
Lösen des Lorenz 96-Modells mit Julia und Python
Beispiel für das Lesen und Schreiben von CSV mit Python
[SIR-Modellanalyse] Spitzenwert der Infektionszahlen in Japan und auf der ganzen Welt ♬
Verschrotten Sie den Zeitplan von Hinatazaka 46 und spiegeln Sie ihn in Google Kalender wider
Überprüfen Sie die Komprimierungsrate und -zeit von PIXZ, die in der Praxis verwendet werden
Mathematisches Modell von Infektionskrankheiten
Implementieren Sie einen Teil des Prozesses in C ++
Summe der Variablen in einem mathematischen Modell
[SIR-Modellanalyse] Spitzenwert der Infektionszahlen in Japan und auf der ganzen Welt ♬
[SIR-Modellanalyse] Bestimmung von γ * (R-1) und Peak aus der Anzahl der Infektionen ♬ World Edition
[SIR-Modellanalyse] Peak out der Infektionszahlen in verschiedenen Teilen Japans ♬
Implementieren Sie das mathematische Modell "SIR-Modell" von Infektionskrankheiten in OpenModelica (das die Sterblichkeitsrate und die Reinfektionsrate widerspiegelt).
Öffnen Sie eine Excel-Datei in Python und färben Sie die Karte von Japan
Zeigen Sie den Status der COVID 19-Infektion in Japan mit Splunk an (GitHub-Version).
Implementieren Sie einen Teil des Prozesses in C ++
Implementieren Sie mit OpenModelica das mathematische Modell "SIR-Modell" von Infektionskrankheiten (siehe Wirkung des Impfstoffs)
[SIR-Modellanalyse] Transformieren Sie die Formel, um γ und die effektive Reproduktionszahl R ♬ zu bestimmen
Ich habe Python verwendet, um mich über die Rollenauswahl der 51 "Yachten" in der Welt zu informieren.