def __init__(self, no_people, total_area, no_agents, all_x, all_y, infection_rate, first_infected, mobility, work_store, home_store, no_mask, mask_effect, phase, infected_position): self.num_agents = no_agents grid_size = round( math.sqrt((self.num_agents / no_people) * total_area) * 100) self.grid = MultiGrid(grid_size, grid_size, False) self.schedule = RandomActivation(self) self.running = True self.stepper = 0 for i in range(self.num_agents): a = Agent(i, self, infection_rate, work_store, home_store, mobility, mask_effect) self.schedule.add(a) self.grid.place_agent(a, (int(all_x[i]), int(all_y[i]))) if random.uniform(0, 1) < no_mask: a.masked = 1 if phase: if i == first_infected: a.infected = 1 else: if infected_position[i] == 1: a.infected = 1 self.datacollector = DataCollector( model_reporters={"Tot infections": compute_informed}, agent_reporters={ "Infected": "infected", "R-Number": "rnumber" })
def __init__(self, home_store): self.num_agents = 1000 self.grid = MultiGrid(200, 200, True) self.schedule = RandomActivation(self) self.running = True for i in range(self.num_agents): a = Agent(i, self) self.schedule.add(a) while True: #x = round(int(np.random.normal(self.grid.width/2, 10, 1))) #y = round(int(np.random.normal(self.grid.height/2, 10, 1))) x = self.random.randrange(self.grid.width) y = self.random.randrange(self.grid.height) if len( self.grid.get_neighbors( (x, y), moore=True, include_center=True, radius=10)) <= 7: self.grid.place_agent(a, (x, y)) home_store[i, :] = x, y break if i < 1: a.infected = 1 self.datacollector = DataCollector( model_reporters={"Tot informed": compute_informed}, agent_reporters={"Infected": "infected"})
def __init__(self, city_to_country, no_people, total_area, city_to_country_area, countryside): self.num_agents = 2000 grid_size = round(math.sqrt((self.num_agents/no_people)*total_area)*100) self.grid = MultiGrid(grid_size, grid_size, True) self.schedule = RandomActivation(self) self.running = True centers = np.zeros((1, 2)) centers[0, :] = random.randrange(10, self.grid.width - 10), random.randrange(10, self.grid.height - 10) x = np.zeros((1, round(int(city_to_country * self.num_agents)))) y = np.zeros((1, round(int(city_to_country * self.num_agents)))) x[0, :] = np.around(np.random.normal(centers[0, 0], 3, round(int(city_to_country * self.num_agents)))) y[0, :] = np.around(np.random.normal(centers[0, 1], 3, round(int(city_to_country * self.num_agents)))) count = 0 countryside_count = 0 while countryside_count < (countryside * self.num_agents): countryside_count += counter(x) runner = True while runner: new_center = (random.randrange(10, self.grid.width - 10), random.randrange(10, self.grid.height - 10)) if dist_check(new_center, centers): centers = np.vstack((centers, new_center)) runner = False new_x = np.around(np.random.normal(centers[count, 0], (1/(6*city_to_country_area*(math.sqrt(count+1)))) * self.grid.width, round(int(city_to_country * self.num_agents) / (count + 2)))) new_y = np.around(np.random.normal(centers[count, 1], (1/(6*city_to_country_area*(math.sqrt(count+1)))) * self.grid.height, round(int(city_to_country * self.num_agents) / (count + 2)))) while len(new_x) < round(int(city_to_country * self.num_agents)): new_x = np.append(new_x, -1) new_y = np.append(new_y, -1) x = np.vstack((x, new_x)) y = np.vstack((y, new_y)) count += 1 new_x = np.delete(x.flatten(), np.where(x.flatten() == -1)) new_y = np.delete(y.flatten(), np.where(y.flatten() == -1)) x_countryside = np.around(np.random.uniform(0, self.grid.width-1, int(self.num_agents - len(new_x)))) y_countryside = np.around(np.random.uniform(0, self.grid.height-1, int(self.num_agents - len(new_y)))) all_x = np.concatenate((new_x, x_countryside)) all_y = np.concatenate((new_y, y_countryside)) for i in range(self.num_agents): a = Agent(i, self) self.schedule.add(a) self.grid.place_agent(a, (int(all_x[i]), int(all_y[i]))) if i == 1: a.infected = 1 self.datacollector = DataCollector( model_reporters={"Tot informed": compute_informed}, agent_reporters={"Infected": "infected"})
def __init__(self, mobility): self.num_agents = 1000 self.grid = MultiGrid(100, 100, True) self.schedule = RandomActivation(self) self.running = True for i in range(self.num_agents): a = Agent(i, mobility, self) self.schedule.add(a) x = self.random.randrange(self.grid.width) y = self.random.randrange(self.grid.height) self.grid.place_agent(a, (x, y)) if i < 1: a.infected = 1 self.datacollector = DataCollector( model_reporters={"Tot informed": compute_informed}, agent_reporters={"Infected": "infected"})
def __init__(self, city_to_country, no_people, total_area, city_to_country_area, countryside, no_agents, Nc_N, n): self.num_agents = no_agents grid_size = round(math.sqrt((self.num_agents / no_people) * total_area) * 100) self.grid = MultiGrid(grid_size, grid_size, False) self.schedule = RandomActivation(self) self.running = True centers = np.zeros((1, 2)) centers[0, :] = random.randrange(10, self.grid.width - 10), random.randrange(10, self.grid.height - 10) x = np.zeros((1, round(int(city_to_country * self.num_agents)))) y = np.zeros((1, round(int(city_to_country * self.num_agents)))) x[0, :] = np.around(np.random.normal(centers[0, 0], 3, round(int(city_to_country * self.num_agents)))) y[0, :] = np.around(np.random.normal(centers[0, 1], 3, round(int(city_to_country * self.num_agents)))) count = 0 countryside_count = 0 while countryside_count < (countryside * self.num_agents): countryside_count += counter(x) runner = True while runner: new_center = (random.randrange(10, self.grid.width - 10), random.randrange(10, self.grid.height - 10)) if dist_check(new_center, centers): centers = np.vstack((centers, new_center)) runner = False new_x = np.around( np.random.normal(centers[count, 0], (1 / (6 * city_to_country_area * (math.sqrt(count + 1)))) * self.grid.width, round(int(city_to_country * self.num_agents) / (count + 2)))) new_y = np.around( np.random.normal(centers[count, 1], (1 / (6 * city_to_country_area * (math.sqrt(count + 1)))) * self.grid.height, round(int(city_to_country * self.num_agents) / (count + 2)))) while len(new_x) < round(int(city_to_country * self.num_agents)): new_x = np.append(new_x, -1) new_y = np.append(new_y, -1) x = np.vstack((x, new_x)) y = np.vstack((y, new_y)) count += 1 label = city_labeler(x) for i in range(len(label)): city_label[i] = label[i] new_x = np.delete(x.flatten(), np.where(x.flatten() == -1)) new_y = np.delete(y.flatten(), np.where(y.flatten() == -1)) x_countryside = np.around(np.random.uniform(0, self.grid.width - 1, int(self.num_agents - len(new_x)))) y_countryside = np.around(np.random.uniform(0, self.grid.height - 1, int(self.num_agents - len(new_y)))) all_x = np.concatenate((new_x, x_countryside)) all_y = np.concatenate((new_y, y_countryside)) for i in range(self.num_agents): a = Agent(i, self) self.schedule.add(a) self.grid.place_agent(a, (int(all_x[i]), int(all_y[i]))) home_store1[i, :] = int(all_x[i]), int(all_y[i]) if i == 1: a.infected = 1 #a.working = 1 flux_store = np.zeros((1, 3)) for i in range(round(len(centers) / 2)): print(i) #print(round(len(centers))/2) n_cities = random.sample(range(1, round(len(centers) / 2)), n) for j in range(len(n_cities)): mi = np.count_nonzero(city_label == i+1) nj = np.count_nonzero(city_label == n_cities[j]) radius = math.sqrt((centers[i, 0] - centers[n_cities[j], 0]) ** 2 + (centers[i, 1] - centers[n_cities[j], 1]) ** 2) sij = 0 for k in range(len(all_x)): if (all_x[k] - centers[i, 0]) ** 2 + (all_y[k] - centers[i, 1]) ** 2 < radius ** 2: sij += 1 sij = sij - mi - nj if sij < 0: sij = 0 try: Tij = (mi * Nc_N * mi * nj) / ((mi + sij) * (mi + nj + sij))*10 except ZeroDivisionError: Tij = 0 if Tij > 75: Tij = 75 if Tij > 1 and (i != n_cities[j]): flux_store = np.vstack((flux_store, (Tij, i+1, n_cities[j]))) work_place = np.zeros(self.num_agents) work_store1 = np.zeros((num, 2)) flux_store = np.delete(flux_store, 0, 0) for i in np.unique(flux_store[:, 1]): place = np.where(flux_store[:, 1] == i)[0] place1 = np.where(city_label == i)[0] for j in place1: for k in place: if random.uniform(0, 100) < flux_store[k, 0]: work_place[j] = flux_store[k, 2] for i in range(len(work_store1)): if work_place[i] != 0: n = int(work_place[i]) work_store1[i, :] = centers[n, 0], centers[n, 1] global work_store, home_store work_store = np.int64(work_store1) home_store = np.int64(home_store1) self.datacollector = DataCollector( model_reporters={"Tot informed": compute_informed}, agent_reporters={"Infected": "infected"})
def __init__(self, no_people, total_area, no_agents, Nc_N, n, all_x, all_y, centers, infection_rate, city_label, first_infected, mobility_data): self.num_agents = no_agents grid_size = round( math.sqrt((self.num_agents / no_people) * total_area) * 100) self.grid = MultiGrid(grid_size, grid_size, False) self.schedule = RandomActivation(self) self.running = True flux_store = np.zeros((1, 3)) home_store1 = np.zeros((self.num_agents, 2)) for i in range(round(len(centers) / 2)): print(i, datetime.datetime.now() - begin_time) n_cities = random.sample(range(1, round(len(centers) / 2)), n) for j in range(len(n_cities)): mi = np.count_nonzero(city_label == i + 1) nj = np.count_nonzero(city_label == n_cities[j]) radius = math.sqrt( (centers[i, 0] - centers[n_cities[j], 0])**2 + (centers[i, 1] - centers[n_cities[j], 1])**2) sij = 0 for k in range(len(all_x)): if (all_x[k] - centers[i, 0])**2 + ( all_y[k] - centers[i, 1])**2 < radius**2: sij += 1 sij = sij - mi - nj if sij < 0: sij = 0 try: Tij = (mi * Nc_N * mi * nj) / ((mi + sij) * (mi + nj + sij)) * 10 except ZeroDivisionError: Tij = 0 if Tij > 75: Tij = 75 if Tij > 1 and (i != n_cities[j]): flux_store = np.vstack( (flux_store, (Tij, i + 1, n_cities[j]))) work_place = np.zeros(self.num_agents) work_store1 = np.zeros((num, 2)) flux_store = np.delete(flux_store, 0, 0) for i in np.unique(flux_store[:, 1]): place = np.where(flux_store[:, 1] == i)[0] place1 = np.where(city_label == i)[0] for j in place1: for k in place: if random.uniform(0, 100) < flux_store[k, 0]: work_place[j] = flux_store[k, 2] for i in range(len(work_store1)): if work_place[i] != 0: n = int(work_place[i]) work_store1[i, :] = centers[n, 0], centers[n, 1] for i in range(self.num_agents): home_store1[i, :] = int(all_x[i]), int(all_y[i]) work_store = np.int64(work_store1) home_store = np.int64(home_store1) for i in range(self.num_agents): if mobility_data: a = Agent(i, self, infection_rate, work_store, home_store) self.schedule.add(a) self.grid.place_agent(a, (int(all_x[i]), int(all_y[i]))) else: a = Agent1(i, self, infection_rate, work_store, home_store) self.schedule.add(a) self.grid.place_agent(a, (int(all_x[i]), int(all_y[i]))) if i == first_infected: a.infected = 1 self.datacollector = DataCollector( model_reporters={"Tot infections": compute_informed}, agent_reporters={ "Infected": "infected", "R-Number": "rnumber" })