Skip to content

Use two level uncertainty in agent-based models #563

Open
@mknaranja

Description

@mknaranja

In equation-based models, a parameter like incubation time means an average value for a whole group/subpopulation of persons. In agent-based simulations, each person can have a different incubation time but all the incubation times can be modeled by some distribution (https://en.wikipedia.org/wiki/Probability_density_function) from which a sample is drawn for each individual.

I reference two comments of @khoanguyen-dev and @DavidKerkmann.

This issue is meant for discussion first.

The list of input parameters for a simulation can be sorted as followed:

1/ To be drawn from distribution once during the simulation initialisation (or set as a constant):

  • Parameters::Global Infection params <IncubationPeriod, SusceptibleToExposedByCarrier, SusceptibleToExposedByInfected, CarrierToInfected, CarrierToRecovered, InfectedToRecovered, InfectedToSevere, SevereToCritical, SevereToRecovered, CriticalToDead, CriticalToRecovered, RecoveredToSusceptible, DetectInfection, MaskProtection> for each age group and vaccination state

Many of these parameters should be distributions to draw from during the simulation. The parameters of these distributions might have some uncertainty attached to them, too. As discussed in the group, this results in two levels of uncertainty. One could define the parameters for the distributions as level 1 uncertainty and put the corresponding distributions to level 2.

  • Parameters::MigrationParameters <LockdownDate, SocialEventRate, BasicShoppingRate, WorkRatio, SchoolRatio, GotoWorkTimeMinimum,GotoWorkTimeMaximum, GotoSchoolTimeMinimum, GotoSchoolTimeMaximum>

I agree with these. LockdownData will probably be reworked in the future. Here you can see the parameters as level 1 uncertainty, while distributions for the work/school time are implemented explicitly right now.

  • Test_strategy::m_probability

Depends on the test, but I wouldn't consider this to be in the list of "global" parameters.

  • Person::m_random_workgroup, m_random_schoolgroup, m_random_goto_work_hour, m_random_goto_school_hour

These is the level 2 uncertainty to the parameters above. Implemented explicitly right now. We can consider changing these to be UncertainValues/Parameters, too.

  • Person::m_mask_compliance

Agreed, but there should be a parameter added. One could in theory also discuss about this being a level 2 parameter if wearing a mask depends on dynamic items.

  • Household::pick_age_group_from_age_distribution

This only implements a discrete distribution and doesn't belong to the set of parameters.

I would add test parameters here.

2/ To be drawn (multiple times) from distribution while running:

  • Person::wear_mask

This is a helper bool. Mask compliance is the relevant parameter.

  • Person::get_tested

This is just a function to test a person. The test parameters are handled in level 1.

  • Random_event::random_transition

Same, just a function.

  • Test_strategy::run_scheme

Same, just a function.

@xsaschako @mknaranja Please add your comments when you find the time.

Originally posted by @DavidKerkmann in #536 (comment)

Metadata

Metadata

Labels

class::discussionUsed for discussions on software and model .loc::backendThis issue concerns the C++ backend implementation.model::abmThis issue concerns any kind of agent-based model.

Type

No type

Projects

Status

Product Backlog 📕

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions