Bonjour,
Je veux créer un programme qui permet de modéliser la propagation d'une épidémie. J'ai crée 4 classe d'agents(S,E,I,R), le programme se déroule comme suit:
au départ on suppose que tous les agents sont dans la classe S et on infecte quelques uns (E), les agents sont supposé connectés (c-a d chaque agent a ces voisins) le passage de la classe S vers E se fait par la valeur b, puis l'agent reste dans la classe E pour une période (latencytime) puis ils passe à la classe I ou il reste une période (recoverytime) ensuite il passe a la classe R
Le problème est que ma liste des agents I ne se remplit pas!!
Voici mon code:
Merci par l'avance
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
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104 self.b = b self.e = e self.g = g self.t = 0 self.p = p self.N = S + E self.sAgentList = [] self.eAgentList = [] self.iAgentList = [] self.rAgentList = [] self.sList = [] self.eList = [] self.iList = [] self.rList = [] self.newIList = [] self.latencyTimesHeap = [] self.recoveryTimesHeap = [] allAgents = range(self.N) random.shuffle(allAgents) self.sAgentList = copy.copy(allAgents) #infecter quelques uns a t = 0 self.indexCases = [] for i in xrange(E): indexCase = self.sAgentList[0] self.indexCases.append(indexCase) self.latentAgent(indexCase) self.eAgentList.append(indexCase) def latentAgent(self,agent): self.sAgentList.remove(agent) latencyTime = self.t + scipy.random.exponential(1/self.e) heapq.heappush(self.latencyTimesHeap, (latencyTime, agent)) def infectAgent(self,agent): self.eAgentList.remove(agent) recoveryTime = self.t + scipy.random.exponential(1/self.g) heapq.heappush(self.recoveryTimesHeap, (recoveryTime, agent)) return 1 def recoverAgents(self): recoverList = [] if len(self.recoveryTimesHeap) > 0: while self.recoveryTimesHeap[0][0] <= self.t: recoveryTuple = heapq.heappop(self.recoveryTimesHeap) recoverList.append(recoveryTuple[1]) if len(self.recoveryTimesHeap) == 0: break return recoverList def run(self): while len(self.eAgentList) > 0: tempEAgentList = [] infectList = [] recoverList = [] newE = 0 for eAgent in self.eAgentList: for agent in self.adjacencyList[eAgent]: if agent in self.sAgentList: if (random.random() < self.e): newE += self.latentAgent(agent) tempEAgentList.append(agent) recoverList = self.recoverAgents() for infectAgent in infectList: self.eAgentList.remove(infectAgent) self.iAgentList.append(infectAgent) for recoverAgent in recoverList: self.iAgentList.remove(recoverAgent) self.rAgentList.append(recoverAgent) #ajouter un nouveau infecté self.eAgentList.extend(tempEAgentList) self.sList.append(len(self.sAgentList)) self.eList.append(len(self.eAgentList)) self.iList.append(len(self.iAgentList)) self.rList.append(len(self.sAgentList)) self.newEList.append(newE) self.t += 1 print('t', self.t, 'numS', len(self.sAgentList),'numE', len(self.eAgentList), 'numI', len(self.iAgentList) ) random.shuffle(self.eAgentList) return [self.sList, self.eList, self.iList, self.rList, self.newIList]
Partager