def run_model(param_updates, n_steps=200, lockdown_at=None):
    params = setup_params(param_updates)
    # Create an instance of the Model
    model = Model(params)
    m_out = []
    for step in trange(n_steps):
        # Evaluate each step and save the results
        model.one_time_step()
        # LOGGER.info(
        #     model.one_time_step_results()
        # )  # If we want to see the results as we go uncomment this block
        m_out.append(model.one_time_step_results())
        if lockdown_at:
            if step == lockdown_at:
                model.update_running_params("lockdown_on", 1)
                LOGGER.info(f"turning on lock down at step {step}")
                LOGGER.info(
                    f'lockdown_house_interaction_multiplier = {params.get_param("lockdown_house_interaction_multiplier")}'
                )
                LOGGER.info(
                    f'lockdown_random_network_multiplier = {params.get_param("lockdown_random_network_multiplier")}'
                )
                for oc_net in OccupationNetworkEnum:
                    LOGGER.info(
                        f'lockdown_occupation_multiplier{oc_net.name} = {params.get_param(f"lockdown_occupation_multiplier{oc_net.name}")}'
                    )
    df = pd.DataFrame(m_out)
    model.write_output_files()
    return df
Exemplo n.º 2
0
 def test_set_params_occupation_network_by_age_check_used(self):
     p = Parameters(
         read_param_file=True,
         input_households="tests/data/baseline_household_demographics.csv",
         input_param_file="tests/data/baseline_parameters.csv",
         param_line_number=1,
     )
     model = Model(p)
     non_scaled = [
         model.get_param(f"daily_fraction_work_used{age.name}")
         for age in OccupationNetworkEnum
     ]
     model.update_running_params("lockdown_on", 1)
     scaled = [
         model.get_param(f"daily_fraction_work_used{age.name}")
         for age in OccupationNetworkEnum
     ]
     for non_scaled_i, scaled_i in zip(non_scaled, scaled):
         assert non_scaled_i * 0.2 == scaled_i
     model.update_running_params(
         "lockdown_occupation_multiplier_primary_network", 10.0)
     scaled = [
         model.get_param(f"daily_fraction_work_used{age.name}")
         for age in OccupationNetworkEnum
     ]
     for non_scaled_i, scaled_i, factor in zip(non_scaled, scaled, [
             10.0,
             0.2,
             0.2,
             0.2,
             0.2,
     ]):
         assert non_scaled_i * factor == scaled_i
Exemplo n.º 3
0
    def test_set_params_manual_traceable_fraction(self):
        p = Parameters(
            read_param_file=True,
            input_households="tests/data/baseline_household_demographics.csv",
            input_param_file="tests/data/baseline_parameters.csv",
            param_line_number=1,
        )

        p.set_param("manual_traceable_fraction_occupation", 0.8)
        assert p.get_param("manual_traceable_fraction_occupation") == 0.8

        p.set_param("manual_traceable_fraction_household", 0.6)
        assert p.get_param("manual_traceable_fraction_household") == 0.6
        assert p.get_param("manual_traceable_fraction_occupation") == 0.8

        model = Model(p)
        model.update_running_params("manual_traceable_fraction_household", 0.4)
        assert model.get_param("manual_traceable_fraction_household") == 0.4