Un modèle avec l'effet d'un vaccin ajouté au modèle créé dans l'article précédent, "Implémentation d'un modèle mathématique" modèle SIR "de maladies infectieuses avec Open Modelica" Créons.
Prérequis pour ce modèle de vaccin --A pour effet de transférer en toute sécurité "S: personne infectieuse" vers "R: récupérateur immunisé" --Une fois que vous avez acquis l'immunité, vous ne perdrez pas l'immunité ――L'effet du vaccin est déterminé par le produit "efficacité du vaccin lui-même (rapport pouvant passer de S à R)" et "taux d'inoculation (rapport de l'inoculation dans l'ensemble)"
En tant que paramètres, «vaccin_effect = efficacité du vaccin lui-même (rapport qui peut passer de S à R)» et «vaccin_rate = taux de vaccination (rapport des vaccinations dans l'ensemble)» peuvent être définis.
parameter Real vaccine_effect = 1.0 "Effect of Vaccine";
parameter Real vaccine_rate = 0.7 "Vaccination rate";
La partie équation est la suivante C'est aussi simple que de changer S en R à une vitesse constante dans la première partie du modèle SIR, sans affecter I. Si l'anticorps est perdu avec le temps ou si le vaccin est administré au cours de l'infection, ce modèle ne peut pas le gérer, mais il s'agit simplement de voir l'effet de la vaccination.
equation
Vy = vaccine_effect * vaccine_rate;
Sy = Si - Si * Vy;
Iy = Ii;
Ry = Ri + Si * Vy;
Le code entier du vaccin ressemble à ceci.
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 est placé devant le modèle SIR de base, le taux de vaccination est fixé à 50% et le vaccin lui-même est réglé de telle sorte que l'inoculateur peut être changé en porteur d'anticorps à 100%. Cela équivaut à définir les valeurs initiales de S, I et R du modèle de base sur (499,5, 1, 499,5).
Selon les résultats de la simulation, le nombre maximum de personnes infectées peut être réduit à environ 1/20 avec un taux d'inoculation de 50%. Au taux d'inoculation de 70%, il était encore plus bas de près d'un ordre de grandeur.
En modélisant avec OpenModelica, je pense qu'il était facile d'ajouter des éléments à un modèle simple de maladie infectieuse et de le simuler. L'idée présentée ici est très controversée, donc si vous avez des problèmes majeurs, j'apprécierais que vous me donniez quelques conseils.
Recommended Posts