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
| 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)
#ici on infecte quelques individus a l'instant t = 0
self.indexCases = []
for i in xrange(E):
indexCase = self.sAgentList[0] initialisation
self.indexCases.append(indexCase)
self.latentAgent(indexCase)
self.eAgentList.append(indexCase)
print('eAgentList:', self.eAgentList)
def latentAgent(self,agent):
self.sAgentList.remove(agent)
latencyTime = self.t + scipy.random.exponential(1/self.e)
heapq.heappush(self.latencyTimesHeap, (latencyTime, agent))
# print('e',self.eAgentList)
def infectAgent(self,agent):
recoveryTime = self.t + scipy.random.exponential(1/self.g)
heapq.heappush(self.recoveryTimesHeap, (recoveryTime, agent))
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.b):
newE += self.latentAgent(agent)
tempEAgentList.append(agent)
self.infectAgent(eAgent)
infectList.append(eAgent)
print('infectList:', infectList)
for infectAgent in infectList:
self.eAgentList.remove(infectAgent)
self.iAgentList.append(infectAgent)
print('iAgentList:',self.iAgentList)
recoverList = self.recoverAgents()
#et faire la comptabilité avec des indices d'agent
#Pour les retirés
for recoverAgent in recoverList:
self.iAgentList.remove(recoverAgent)
self.rAgentList.append(recoverAgent)
print('r',self.rAgentList)
#nouveaux infections
self.eAgentList.extend(tempEAgentList)
#Puis suivre le nombre de personnes dans chaque État
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)
#incrementer le temps
self.t += 1
print('t', self.t, 'numS', len(self.sAgentList),'numE', len(self.eAgentList), 'numI', len(self.iAgentList) )
random.shuffle(self.eAgentList)
#et quand nous aurons terminé, retourner toutes les informations pertinentes
return [self.sList, self.eList, self.iList, self.rList, self.newIList] |
Partager