def infected(self): cured = max(self.count_neighboring_agents(self.cured.id), 1.0) infected = max(self.count_neighboring_agents(self.infected.id), 1.0) prob_cure = self.env['prob_neighbor_cure'] * (cured / infected) if prob(prob_cure): return self.cure() return self.set_state(super().infected)
def infect(self): infected = self.count_neighboring_agents(state_id=self.infected.id) total = self.count_neighboring_agents() prob_infect = self.env['prob_neighbor_spread'] * infected / total self.debug('prob_infect', prob_infect) if prob(prob_infect): self.set_state(self.infected.id)
def cured(self): prob_cure = self.env['prob_neighbor_cure'] for neighbor in self.get_neighboring_agents(state_id=self.infected.id): if prob(prob_cure): try: neighbor.cure() except AttributeError: self.debug('Viewer {} cannot be cured'.format(neighbor.id))
def expose(self, type, directed): count_neighbor = 0 prob_neighbor = 0 for neighbor in self.get_neighboring_agents(): if neighbor.state['id'] == self.exposed.id: prob_neighbor += 0.4 if neighbor.state['id'] == self.infected.id: prob_neighbor += 0.9 count_neighbor += 1 prob_neighbor /= count_neighbor if (not self.state['id'] == self.infected.id and prob(prob_neighbor)): self.set_state(self.exposed) self['infected_type'] = type self["directed"] = directed
def infected(self): for neighbor in self.get_neighboring_agents( state_id=self.not_exposed.id): if prob(self["prob_neighbor_spread"]): neighbor.expose(type=self["infected_type"], directed=0)
def exposed(self): if prob(self["prob_be_infected"]): self.set_state(self.infected)
def not_exposed(self): if prob(self["prob_search_spread"]): self.set_state(self.exposed)
def infected(self): for neighbor in self.get_neighboring_agents(state_id="not_exposed"): if prob(self["prob_neighbor_spread"]): neighbor.expose(type=2, directed=1)
def infected(self): for neighbor in self.get_neighboring_agents(state_id=self.neutral.id): if prob(self.env['prob_neighbor_spread']): neighbor.infect()
def neutral(self): if self['has_tv']: if prob(self.env['prob_tv_spread']): self.set_state(self.infected)