[PYTHON] Implémenter le modèle mathématique «modèle SIR» des maladies infectieuses dans OpenModelica (voir l'effet du vaccin)

Ajoutons l'effet du vaccin au modèle de base SIR

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;

Résultats de simulation avec vaccination

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). 10_SIR_vaccine_model.png

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. 11_SIR_vaccine_graph.png

Résumé

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

Implémenter le modèle mathématique «modèle SIR» des maladies infectieuses dans OpenModelica (voir l'effet du vaccin)
Implémenter le modèle mathématique «modèle SIR» des maladies infectieuses avec Open Modelica
Mettre en œuvre le modèle mathématique «modèle SIR» des maladies infectieuses dans OpenModelica (reflétant le taux de mortalité et de réinfection)
Implémenter le modèle mathématique «modèle SIR» des maladies infectieuses avec OpenModelica (exemple de régulation répétée et de relaxation)
Introduction d'un modèle de prédiction mathématique pour les maladies infectieuses (modèle SIR)
Modèle de prédiction mathématique des maladies infectieuses (modèle SIR): étude de cas (1)
Modèle mathématique des épidémies de maladies infectieuses
Implémenter une partie du processus en C ++
Somme des variables dans un modèle mathématique
[Analyse du modèle SIR] Pic du nombre d'infections au Japon et dans le monde ♬
Résolution de modèles mathématiques d'épidémies de maladies infectieuses en Python
Spécifier le modèle d'éclairage du matériau SCN dans Pythonista
Comptez le nombre de paramètres dans le modèle d'apprentissage en profondeur
Implémenter la solution de l'algèbre de Riccati en Python
[Analyse du modèle SIR] Pic du nombre d'infections au Japon et dans le monde ♬ Partie 2