コード例 #1
0
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,
    )
コード例 #2
0
 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)
コード例 #3
0
            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,
コード例 #4
0
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)
コード例 #5
0
ファイル: conftest.py プロジェクト: sadielbartholomew/JUNE
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
コード例 #6
0
ファイル: world_saver.py プロジェクト: IDAS-Durham/JUNE
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
コード例 #7
0
ファイル: test_logger.py プロジェクト: sadielbartholomew/JUNE
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