Ein Modell mit der Wirkung eines Impfstoffs, das dem im vorherigen Artikel erstellten Modell "Implementierung eines mathematischen Modells" SIR-Modell "von Infektionskrankheiten mit Open Modelica" hinzugefügt wurde. Lassen Sie uns erstellen.
Voraussetzungen für dieses Impfstoffmodell
Als Parameter können "Impfstoffeffekt = Wirksamkeit des Impfstoffs selbst (Verhältnis, das sich von S nach R verschieben kann)" und "Impfstoffrate = Impfrate (Verhältnis der Impfungen insgesamt)" eingestellt werden.
parameter Real vaccine_effect = 1.0 "Effect of Vaccine";
parameter Real vaccine_rate = 0.7 "Vaccination rate";
Der Gleichungsteil ist wie folgt Es ist so einfach, wie S im ersten Teil des SIR-Modells mit konstanter Geschwindigkeit in R zu ändern und I nicht zu beeinflussen. Wenn der Antikörper im Laufe der Zeit verloren geht oder wenn der Impfstoff während der Infektion verabreicht wird, kann dieses Modell nicht damit umgehen, aber es ist nur eine Frage der Wirkung der Impfung.
equation
Vy = vaccine_effect * vaccine_rate;
Sy = Si - Si * Vy;
Iy = Ii;
Ry = Ri + Si * Vy;
Der gesamte Code für den Impfstoff sieht so aus.
class cl_Vaccine
extends Modelica.Blocks.Icons.Block;
parameter Real vaccine_effect = 1.0 "Effect of Vaccine";
parameter Real vaccine_rate = 0.7 "Vaccination rate";
Modelica.Blocks.Interfaces.RealInput Si "Connector of initial S(Susceptible)" annotation(
Placement(visible = true, transformation(origin = {-100, 60}, extent = {{-20, -20}, {20, 20}}, rotation = 0), iconTransformation(origin = {-120, 60}, extent = {{-20, -20}, {20, 20}}, rotation = 0)));
Modelica.Blocks.Interfaces.RealInput Ii "Connector of initial I (Infectious)" annotation(
Placement(visible = true, transformation(origin = {-100, 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 = {-100, -62}, 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 = {100, 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 = {100, 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 = {100, -60}, extent = {{-10, -10}, {10, 10}}, rotation = 0), iconTransformation(origin = {110, -60}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
Modelica.Blocks.Interfaces.RealOutput Vy "Output connector of Vaccination rate" annotation(
Placement(visible = true, transformation(origin = {0, -100}, extent = {{-10, -10}, {10, 10}}, rotation = -90), iconTransformation(origin = {0, -110}, extent = {{-10, -10}, {10, 10}}, rotation = -90)));
equation
Vy = vaccine_effect * vaccine_rate;
Sy = Si - Si * Vy;
Iy = Ii;
Ry = Ri + Si * Vy;
annotation(
Icon(graphics = {Text(origin = {-22, 24}, extent = {{-52, 32}, {94, -72}}, textString = "Vac")}, coordinateSystem(initialScale = 0.1)));
end cl_Vaccine;
Cl_vaccine wird vor das grundlegende SIR-Modell gestellt, die Impfrate auf 50% und der Impfstoff selbst so eingestellt, dass der Impfstoff auf 100% Antikörperträger geändert werden kann. Dies entspricht der Einstellung der Anfangswerte von S, I und R des Grundmodells auf (499,5, 1, 499,5).
Den Simulationsergebnissen zufolge kann die maximale Anzahl infizierter Personen mit einer Impfrate von 50% auf etwa 1/20 reduziert werden. Bei der Impfrate von 70% war sie sogar um fast eine Größenordnung niedriger.
Durch die Modellierung mit OpenModelica war es meiner Meinung nach einfach, einem einfachen Modell für Infektionskrankheiten Elemente hinzuzufügen und es zu simulieren. Die hier vorgestellte Idee ist sehr umstritten. Wenn Sie also größere Probleme haben, würde ich mich freuen, wenn Sie mir einen Rat geben könnten.