def make_dummy_world(): teacher = Person.from_attributes(age=100, sex="f") pupil_shift_1 = Person.from_attributes(age=12, sex="f") pupil_shift_2 = Person.from_attributes(age=5, sex="m") pupil_shift_3 = Person.from_attributes(age=11, sex="f") learning_center = LearningCenter(coordinates=None, n_pupils_max=None) household = Household() household.add(person=teacher) household.add(person=pupil_shift_1) household.add(person=pupil_shift_2) household.add(person=pupil_shift_3) learning_center.add(person=teacher, shift=0, subgroup_type=learning_center.SubgroupType.teachers) learning_center.add(person=teacher, shift=1, subgroup_type=learning_center.SubgroupType.teachers) learning_center.add(person=teacher, shift=2, subgroup_type=learning_center.SubgroupType.teachers) learning_center.add(person=pupil_shift_1, shift=0) learning_center.add(person=pupil_shift_2, shift=1) learning_center.add(person=pupil_shift_3, shift=2) world = World() world.learning_centers = LearningCenters([learning_center], learning_centers_tree=False, n_shifts=3) world.households = Households([household]) world.people = Population( [teacher, pupil_shift_1, pupil_shift_2, pupil_shift_3]) for person in world.people.members: person.busy = False learning_center.clear() household.clear() return ( teacher, pupil_shift_1, pupil_shift_2, pupil_shift_3, learning_center, household, world, )
def _create_stations( self, world: World, city_stations_filename: str, commuters_dict: dict, maximum_number_commuters_per_city_station: int, ): """ Generates cities, super stations, and stations on the given world. """ with open(city_stations_filename) as f: inter_city_stations_per_city = yaml.load( f, Loader=yaml.FullLoader)["number_of_inter_city_stations"] logger.info("Creating stations...") world.stations = Stations([]) for city in world.cities: if city.name not in inter_city_stations_per_city: continue else: n_inter_city_stations = inter_city_stations_per_city[city.name] city.inter_city_stations = Stations.from_city_center( city=city, super_areas=world.super_areas, number_of_stations=n_inter_city_stations, type="inter_city_station", distance_to_city_center=10, ) city.inter_city_stations._construct_ball_tree() world.stations += city.inter_city_stations n_internal_commuters = len( commuters_dict[city.name]["internal"]) n_city_stations = int( np.ceil(n_internal_commuters / maximum_number_commuters_per_city_station)) city.city_stations = Stations.from_city_center( city=city, super_areas=world.super_areas, number_of_stations=n_city_stations, type="city_station", distance_to_city_center=5, ) city.city_stations._construct_ball_tree() world.stations += city.city_stations # initialise ball tree for stations in the city. logger.info( f"City {city.name} has {n_city_stations} city " f"and {n_inter_city_stations} inter city stations.") for super_area in world.super_areas: for city in world.cities: if city.has_stations: super_area.closest_inter_city_station_for_city[ city.name] = city.get_closest_inter_city_station( super_area.coordinates)
if (world.areas.members[i].people[j].age >= KIDS_LOW) and (world.areas.members[i].people[j].age <= KIDS_UP): try: school_coordinates = world.areas.members[i].people[j].school.coordinates distance_school.append( distance(world.areas.members[i].coordinates, school_coordinates) ) except: lost_kids += 1 print(f'CAREFUL! There are {lost_kids} lost kids') return distance_school if __name__=='__main__': world = World.from_pickle() distance_school = kids_school_distance(world) distance_young = kids_school_distance(world, 5, 11) distance_old = kids_school_distance(world, 12, 19) fig = plt.figure() plt.hist( distance_school, log=True, alpha=0.3, label = '5 - 19 years old' ) plt.hist( distance_young, log=True,
parser.add_argument( "--config", default="box_simulator.yaml", help="path to config file to run", type=str, ) args = parser.parse_args() # *********** INITIALIZE WORLD ***************** # t1 = time.time() geography = Geography.from_file( {"msoa": ["E02003999"]} ) world = World.from_geography(geography, box_mode=True) t2 = time.time() print(f"Creating the world took {t2 -t1} seconds to run.") # *********** INITIALIZE SEED ***************** # symptoms = SymptomsConstant(recovery_rate=0.05) transmission = TransmissionConstant(probability=0.3) infection = Infection(transmission, symptoms) interaction = DefaultInteraction.from_file() seed = Seed(world.boxes, infection, ) # Use if you want to seed the disease per region # with real data #seed.unleash_virus_per_region() seed.unleash_virus(100, box_mode=True)
def make_dummy_world(): g = Geography.from_file(filter_key={"super_area": ["E02002559"]}) super_area = g.super_areas.members[0] company = Company(super_area=super_area, n_workers_max=100, sector="Q") school = School( coordinates=super_area.coordinates, n_pupils_max=100, age_min=4, age_max=10, sector="primary", ) household = Household() household.area = super_area.areas[0] hospital = Hospital( n_beds=40, n_icu_beds=5, super_area=super_area.name, coordinates=super_area.coordinates, ) worker = Person.from_attributes(age=40) worker.area = super_area household.add(worker, subgroup_type=household.SubgroupType.adults) worker.sector = "Q" company.add(worker) pupil = Person.from_attributes(age=6) pupil.area = super_area household.add(pupil, subgroup_type=household.SubgroupType.kids) household.area = super_area school.add(pupil) student = Person.from_attributes(age=21) student.area = super_area household.add(student, subgroup_type=household.SubgroupType.adults) university = University( coordinates=super_area.coordinates, n_students_max=100, ) university.add(student) commuter = Person.from_attributes(sex="m", age=30) commuter.mode_of_transport = ModeOfTransport(description="bus", is_public=True) commuter.mode_of_transport = "public" household.add(commuter) world = World() world.schools = Schools([school]) world.hospitals = Hospitals([hospital]) world.households = Households([household]) world.universities = Universities([]) world.companies = Companies([company]) world.universities = Universities([university]) world.care_homes = CareHomes([CareHome()]) world.people = Population([worker, pupil, student, commuter]) world.areas = Areas([super_area.areas[0]]) world.areas[0].people = world.people world.super_areas = SuperAreas([super_area]) cinema = Cinema() cinema.coordinates = super_area.coordinates world.cinemas = Cinemas([cinema]) pub = Pub() pub.coordinates = super_area.coordinates world.pubs = Pubs([pub]) grocery = Grocery() grocery.coordinates = super_area.coordinates world.groceries = Groceries([grocery]) # commute city = CommuteCity() hub = CommuteHub(None, None) city.commutehubs = [hub] world.commutehubs = CommuteHubs([city]) world.commutehubs.members = [hub] world.commutecities = CommuteCities() world.commutecities.members = [city] world.commutehubs[0].add(commuter) world.commuteunits = CommuteUnits(world.commutehubs.members) world.commuteunits.init_units() world.commutecityunits = CommuteCityUnits(world.commutecities) world.cemeteries = Cemeteries() return world
def generate_world_from_hdf5(file_path: str, chunk_size=500000) -> World: """ Loads the world from an hdf5 file. All id references are substituted by actual references to the relevant instances. Parameters ---------- file_path path of the hdf5 file chunk_size how many units of supergroups to process at a time. It is advise to keep it around 1e6 """ logger.info("loading world from HDF5") world = World() with h5py.File(file_path, "r", libver="latest", swmr=True) as f: f_keys = list(f.keys()).copy() geography = load_geography_from_hdf5(file_path=file_path, chunk_size=chunk_size) world.areas = geography.areas world.super_areas = geography.super_areas world.regions = geography.regions if "hospitals" in f_keys: logger.info("loading hospitals...") world.hospitals = load_hospitals_from_hdf5(file_path=file_path, chunk_size=chunk_size) if "schools" in f_keys: logger.info("loading schools...") world.schools = load_schools_from_hdf5(file_path=file_path, chunk_size=chunk_size) if "companies" in f_keys: world.companies = load_companies_from_hdf5(file_path=file_path, chunk_size=chunk_size) if "care_homes" in f_keys: logger.info("loading care homes...") world.care_homes = load_care_homes_from_hdf5(file_path=file_path, chunk_size=chunk_size) if "universities" in f_keys: logger.info("loading universities...") world.universities = load_universities_from_hdf5(file_path=file_path, chunk_size=chunk_size) if "cities" in f_keys: logger.info("loading cities...") world.cities = load_cities_from_hdf5(file_path) if "stations" in f_keys: logger.info("loading stations...") ( world.stations, world.inter_city_transports, world.city_transports, ) = load_stations_from_hdf5(file_path) if "households" in f_keys: world.households = load_households_from_hdf5(file_path, chunk_size=chunk_size) if "population" in f_keys: world.people = load_population_from_hdf5(file_path, chunk_size=chunk_size) if "social_venues" in f_keys: logger.info("loading social venues...") social_venues_dict = load_social_venues_from_hdf5(file_path) for social_venues_spec, social_venues in social_venues_dict.items(): setattr(world, social_venues_spec, social_venues) # restore world logger.info("restoring world...") restore_geography_properties_from_hdf5(world=world, file_path=file_path, chunk_size=chunk_size) if "population" in f_keys: restore_population_properties_from_hdf5(world=world, file_path=file_path, chunk_size=chunk_size) if "households" in f_keys: restore_households_properties_from_hdf5(world=world, file_path=file_path, chunk_size=chunk_size) if "care_homes" in f_keys: logger.info("restoring care homes...") restore_care_homes_properties_from_hdf5(world=world, file_path=file_path, chunk_size=chunk_size) if "hospitals" in f_keys: logger.info("restoring hospitals...") restore_hospital_properties_from_hdf5(world=world, file_path=file_path, chunk_size=chunk_size) if "cities" and "stations" in f_keys: logger.info("restoring commute...") restore_cities_and_stations_properties_from_hdf5(world=world, file_path=file_path, chunk_size=chunk_size) if "companies" in f_keys: logger.info("restoring companies...") restore_companies_properties_from_hdf5( world=world, file_path=file_path, chunk_size=chunk_size, ) if "schools" in f_keys: logger.info("restoring schools...") restore_school_properties_from_hdf5( world=world, file_path=file_path, chunk_size=chunk_size, ) if "universities" in f_keys: logger.info("restoring unis...") restore_universities_properties_from_hdf5(world=world, file_path=file_path) if "social_venues" in f_keys: logger.info("restoring social venues...") restore_social_venues_properties_from_hdf5(world=world, file_path=file_path) world.cemeteries = Cemeteries() return world
def make_dummy_world(geog): super_area = geog.super_areas.members[0] company = Company(super_area=super_area, n_workers_max=100, sector="Q") household1 = Household() household1.area = super_area.areas[0] hospital = Hospital( n_beds=40, n_icu_beds=5, super_area=super_area.name, coordinates=super_area.coordinates, ) uni = University( coordinates=super_area.coordinates, n_students_max=2500, ) worker1 = Person.from_attributes(age=44, sex='f', ethnicity='A1', socioecon_index=5) worker1.area = super_area.areas[0] household1.add(worker1, subgroup_type=household1.SubgroupType.adults) worker1.sector = "Q" company.add(worker1) worker2 = Person.from_attributes(age=42, sex='m', ethnicity='B1', socioecon_index=5) worker2.area = super_area.areas[0] household1.add(worker2, subgroup_type=household1.SubgroupType.adults) worker2.sector = "Q" company.add(worker2) student1 = Person.from_attributes(age=20, sex='f', ethnicity='A1', socioecon_index=5) student1.area = super_area.areas[0] household1.add(student1, subgroup_type=household1.SubgroupType.adults) uni.add(student1) pupil1 = Person.from_attributes(age=8, sex='m', ethnicity='C1', socioecon_index=5) pupil1.area = super_area.areas[0] household1.add(pupil1, subgroup_type=household1.SubgroupType.kids) #school.add(pupil1) pupil2 = Person.from_attributes(age=5, sex='f', ethnicity='A1', socioecon_index=5) pupil2.area = super_area.areas[0] household1.add(pupil2, subgroup_type=household1.SubgroupType.kids) #school.add(pupil2) world = World() world.schools = Schools([]) world.hospitals = Hospitals([hospital]) world.households = Households([household1]) world.universities = Universities([uni]) world.companies = Companies([company]) world.people = Population([worker1, worker2, student1, pupil1, pupil2]) world.super_areas = geog.super_areas world.areas = geog.areas world.cemeteries = Cemeteries() cinema = Cinema() cinema.coordinates = super_area.coordinates world.cinemas = Cinemas([cinema]) pub = Pub() pub.coordinates = super_area.coordinates world.pubs = Pubs([pub]) world.areas[0].people = world.people return world