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:
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]
Merci par l'avance