Modélisation d'une pandémie en JAVA
par
, 12/04/2020 à 18h15 (509 Affichages)
En réaction à cette actualité https://www.developpez.net/forums/d2...bablement-ide/ , il me semble intéressant de connaitre comment le gouvernement modélise la pandémie. Car on ne connait pas grand-chose sur ce COVID19. En effet, on ne sait pas s’il se transmet autrement que par les postillons. On ne connait pas la durée d’immunisation après une guérison….
J’ai donc rassemblé les informations que j’avais et j’ai tenté une modélisation naïve en JAVA. Je me suis dit que comme JAVA était un langage enseigné depuis maintenant 25 ans, la plupart des lecteurs de DVP sauraient le comprendre.
Mon idée est de modéliser un individu (caractéristiques + comportement) et la façon dont son interaction avec les autres propage le virus. Pour ce qui nous concerne je suis partie d’une classe Individu qui possède un nom et un sexe ainsi qu’un statut sérologique vis avis du virus.
Les caractéristiques sérologiques sont :
• Possède-t-il des antigènes
• Possède-t-il des anticorps
S’il possède des antigènes (avec ou sans anticorps) il est alors malade et contagieux
S’il possède des anticorps et pas d’antigènes il est guéri, donc immunisé et non contagieux
S’il ne possède ni antigène ni anticorps il n’est pas malade ni immunisé mais pas contagieux
J’ai également ajouté une propriété (et ses getter/setter) pour le port du masque
La méthode toString() que j’ai surchargée permettra à l’objet de ce décrire et la méthode healthReport() donnera le statut de l’individu vis-à-vis de la maladie.
Quant aux interactions, elles sont modélisées par la méthode approachOther() qui invoquera chez les individus concernés, par cette transmission possible du virus, la méthode contaminate()
Mon scenario de test est le suivant :
Je crée 3 individus :
2 hommes qui n’ont jamais été contaminés
1 femme malade.
La femme sans masque approche un homme sans masque et le contamine
La femme avec un masque approche l’autre homme mais porte un masque donc ne le contamine pas.
L’homme contaminé gueri et approche l’autre homme et ne le contamine pas (bien que ne portant pas de masque tous les 2)
Voice le scenario en java :
Qui donne le résultat suivant :
Code java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 public static void main(String[] args) { System.out.println("Début simulation COVID19"); System.out.println("homme1 non contaminé"); Individu homme1 = new Individu("Homme1", true, false, false); System.out.println(homme1.toString()); System.out.println(homme1.healthReport()); System.out.println("femme1 malade"); Individu femme1 = new Individu("Femme1", false, true, true); System.out.println(femme1.toString()); System.out.println(femme1.healthReport()); System.out.println("homme2 non contaminé"); Individu homme2 = new Individu("Homme2", true, false, false); System.out.println(homme2.toString()); System.out.println(homme2.healthReport()); System.out.println("femme1 rencontre homme1"); femme1.approachOther(homme1); System.out.println(homme1.toString()); System.out.println(homme1.healthReport()); System.out.println("femme1 met un masque"); femme1.setWearMask(true); System.out.println("femme1 rencontre homme2"); femme1.approachOther(homme2); System.out.println(homme2.toString()); System.out.println(homme2.healthReport()); System.out.println("homme1 gueri"); homme1.setAntigene(false); System.out.println(homme1.toString()); System.out.println(homme1.healthReport()); System.out.println("homme1 rencontre homme2"); homme1.approachOther(homme2); System.out.println(homme2.toString()); System.out.println(homme2.healthReport()); System.out.println("Fin simulation COVID19"); }
Et voici maintenant la classe individu :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 Début simulation COVID19 homme1 non contaminé Individu [name=Homme1, male=true, antigene=false, anticorps=false, wearMask=false] non contaminé non immunisé femme1 malade Individu [name=Femme1, male=false, antigene=true, anticorps=true, wearMask=false] malade homme2 non contaminé Individu [name=Homme2, male=true, antigene=false, anticorps=false, wearMask=false] non contaminé non immunisé femme1 rencontre homme1 Individu [name=Homme1, male=true, antigene=true, anticorps=true, wearMask=false] malade femme1 met un masque femme1 rencontre homme2 Individu [name=Homme2, male=true, antigene=false, anticorps=false, wearMask=false] non contaminé non immunisé homme1 gueri Individu [name=Homme1, male=true, antigene=false, anticorps=true, wearMask=false] immunisé homme1 rencontre homme2 Individu [name=Homme2, male=true, antigene=false, anticorps=false, wearMask=false] non contaminé non immunisé Fin simulation COVID19
Si vous jugez que les bases de cette modélisation sont erronées, n’hésitez pas à me le dire, et je corrigerai le modèle. Je prévois de poursuivre cette simulation en ajoutant des facteurs de guérison (age – sexe..) et de randomiser la séroconversion avec d’autres propriétés que j’ajouterai à la classe individu comme la sensibilisation aux gestes barrière…
Code java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70 public class Individu { private String name; private boolean male; private boolean antigene; private boolean anticorps; private boolean wearMask; public Individu(String pName, boolean pMale, boolean pAntigene, boolean pAnticorps) { this.name = pName; this.male = pMale; this.anticorps = pAnticorps; this.antigene = pAntigene; this.wearMask = false; } public void approachOther(Individu person) { person.contaminate(this); this.contaminate(person); } public void contaminate(Individu person) { if (!(this.isAnticorps() || this.isAntigene() || this.isWearMask() || person.isWearMask())) { if (person.isAntigene()) { this.setAntigene(true); this.setAnticorps(true); } } } @Override public String toString() { return "Individu [name=" + name + ", male=" + male + ", antigene=" + antigene + ", anticorps=" + anticorps + ", wearMask=" + wearMask + "]"; } public String healthReport() { if (this.isAntigene()) return ("malade"); else if (this.isAnticorps()) return "immunisé"; else return "non contaminé non immunisé"; } public boolean isAntigene() { return antigene; } public void setAntigene(boolean antigene) { this.antigene = antigene; } public boolean isAnticorps() { return anticorps; } public void setAnticorps(boolean anticorps) { this.anticorps = anticorps; } public boolean isMale() { return male; } public boolean isWearMask() { return wearMask; } public void setWearMask(boolean wearMask) { this.wearMask = wearMask; } public String getName() { return name; } }
Si le JAVA vous dérange et que vous préférez que je fasse la simulation sous Excel avec un peu de VBA faites moi signe également, je serai toujours heureux de travailler en équipe avec des gens intéressés.
Aidons les soignant – Restons confiné – Appliquons les gestes barrière