Voir le flux RSS

Open source et architecture logicielle

Modélisation d'une pandémie en JAVA

Noter ce billet
par , 12/04/2020 à 18h15 (253 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 :
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");
	}
Qui donne le résultat suivant :
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
Et voici maintenant la classe individu :
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 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…
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

Envoyer le billet « Modélisation d'une pandémie en JAVA » dans le blog Viadeo Envoyer le billet « Modélisation d'une pandémie en JAVA » dans le blog Twitter Envoyer le billet « Modélisation d'une pandémie en JAVA » dans le blog Google Envoyer le billet « Modélisation d'une pandémie en JAVA » dans le blog Facebook Envoyer le billet « Modélisation d'une pandémie en JAVA » dans le blog Digg Envoyer le billet « Modélisation d'une pandémie en JAVA » dans le blog Delicious Envoyer le billet « Modélisation d'une pandémie en JAVA » dans le blog MySpace Envoyer le billet « Modélisation d'une pandémie en JAVA » dans le blog Yahoo

Mis à jour 13/04/2020 à 08h02 par autran

Tags: java, pandémie
Catégories
Java , Programmation

Commentaires