Releases: SciCompMod/memilio
v1.3.0
Added features / functionality:
- Allow output of mobility data for Graph-ODE model
- Added age resolution for LCT model
- Implementation of Generalized Linear Chain Trick model
- Allow variable dynamic NPI delay implementation
- Update of Damping now allows negative coefficients (i.e., contact increases)
- Added serialization to ABM
- Added functions for a person in the ABM to choose whether to comply to mask,test and isolation
- Allow explicit stepper wrappers (i.e., fixed step size numerical integrators)
- Bind different numerical integrators for python
- Allow download of population data for different years
- Plot functions for AST in generation package
General changes:
- Redesign of python bindings structure to improve typing
- Reduction of export_input_data_county_timeseries function
- Reduce use of get_support_max method in IDE model to reduce run time
- Handle Epidata FutureWarnings
Corrections:
- Error when compiling on Mac with new boost
- Missing includes in python bindings
- Deleted incorrect todo in ABM code
- divNj in ODE models creates NaN values if subpopulation is zero
- Get_default of parameter HighViralLoadProtectionFactor did not work as expected
Merged pull requests
- 1105 redesign bindings structure to improve typing by @MaxBetzDLR in #1106
- 1113 missing includes in python bindings by @MaxBetzDLR in #1114
- 1098 bind different integrators for python by @MaxBetzDLR in #1103
- 1118 Update of Damping not working with negative coefficients by @HenrZu in #1119
- 1028 Reduce export_input_data_county_timeseries by @HenrZu in #1029
- Delete incorrect todo in ABM code by @xsaschako in #1122
- 982 Make NPI delay implementation a parameter, set it and harmonize model advance functions by @mknaranja in #984
- Explicit stepper wrapper by @reneSchm in #1127
- 1123 population data for different years by @patricklnz in #1124
- 1102 divNj creates NaN values if subpopulation is 0 by @HenrZu in #1104
- 1039 Add functions for the Person to choose whether to comply to mask,test and isolation by @khoanguyen-dev in #1040
- 896 add age resolved lct model by @lenaploetzke in #1120
- 1117 reduce use of get support max method in ide model to reduce run time by @annawendler in #1129
- 1084 Handle Epidata FutureWarnings by @patricklnz in #1109
- 1138 plot functions for AST in generation package by @dr2001dlr in #1140
- 652 Add serialization to ABM by @reneSchm in #1072
- 55 Write mobility data by @HenrZu in #971
- 932 Get_default of Parameter HighViralLoadProtectionFactor doesn't work as expected by @khoanguyen-dev in #1068
- 946 implement generalized linear chain trick by @lenaploetzke in #1058
- 1021 Error when compiling on Mac with new boost by @reneSchm in #1146
Full Changelog: v1.2.1...v1.3.0
v1.2.1
Added features / functionality:
- Implementation of stochastic two variant SEIR models
- Added delay in testing and planned mobility in ABM
- ScoreP performance profile of ABM
- gperftools profiler
- New initialization method from flows for LCT model
- Stub generation for python bindings
General changes:
- Refactored ABM code: Rename EPI to MIO, migration to mobility, and World to Model
- Replaced pointers in ABM by new structure
- Make the LCT secir model a derived class of CompartmentalModel
- New parameters that describe the multiplicative factor used for the TestAndTraceCapacity
- Extended test for equilibrium of IDE model
- Change return type of check_constraints function in the populations class to bool
- Adapt parameters_io of IDE SECIR model
- Small refacturing of epidata package
- Remove necessity for credentials of population data download
- Download boost libs with URL instead of git repo
- Upgrade manylinux image used for python in CI
- Workaround for github action checkout@v3
Corrections:
- Add warning for end_date later than 2024-07-21 in intensive care data
- OdeIntegrator could run indefinitely
- Removed bug in getting test parameters in specific test derived from generic test
Merged pull requests
- 1042 stub generation for python bindings by @MaxBetzDLR in #1044
- 992 download boost libs with URL instead of git repo by @dabele in #1048
- 848 scorep profile of abm by @charlie0614 in #942
- 1038 OdeIntegrator can run indefinitely v2 by @reneSchm in #1049
- Add gperftools profiler by @dabele in #1054
- 914 make the lct secir model a derived class of flowmodel by @lenaploetzke in #1055
- 882 Parameters that describe the multiplicative factor used for the TestAndTraceCapacity by @HenrZu in #1059
- Fix a "use after free" warning with gcc 12.3.0 and above by @reneSchm in #1060
- workaround for github action checkout@v3 by @dabele in #1063
- Upgrade manylinux image used for python in CI by @dabele in #1064
- 897 new add initialization method from flows for lct model 1 by @lenaploetzke in #1005
- Remove call to print_table from TestSeir.FlowSimulation by @reneSchm in #1066
- Extend Test for equilibrium of IDE Model #1037 by @hatrit in #1050
- 757 dont store pointers in the abm by @reneSchm in #863
- 1012 bug in getting testparameters in specific test derived from generictest by @khoanguyen-dev in #1013
- 1061 change return type of check_constraints function in the populations class to bool by @lenaploetzke in #1062
- 916-refactor-epidata-to-support-ingestion-into-the-LOKI-database by @sudiphzi in #1024
- 1079 Handle Chunked-Encoding Downloads by @patricklnz in #1080
- Refactor ABM code: Rename EPI to MIO and migration to mobility and World to Model by @xsaschako in #879
- Increase accuracy of code coverage by @reneSchm in #1076
- 466 add delay in testing and planned migration by @khoanguyen-dev in #866
- 1032 implementation of stochastic two variant seir model by @nijawa in #1047
- 1087 adapt parameters_io of ide model by @annawendler in #1095
- 1092 add warning for end_date later than 2024-07-21 in divi data by @lenaploetzke in #1094
- 1073 Remove credentials from Population Data Download by @patricklnz in #1074
Full Changelog: v1.2.0...v1.2.1
v1.2.0
Added features / functionality:
- Stochastic differential equation based SIR and SEIR models
- Linear Chain Trick ODE-based model with initialization methods for real world data
- Automatic differentiation for ODE-based models and dynamic optimization examples
- Allow contact increase for simulation of larger events
- Allow flexible start day in IDE SECIR model
- Added seasonality for IDE SECIR model
- Alternative computation of compartments in IDE SECIR
- Implement initialization scheme for flows in IDE SECIR model
- Add Gamma distribution and other parameters to state age function for IDE models
- Python support for ODE SECIRVVS model
- Python support for 2021 metapopulation/Graph-ODE SECIRVVS simulation
- Age group resolution for ODE SIR and SEIR models
- Use ccache in CI for linux builds
General changes:
- Use times for exposed and infected, no symptoms state in particular ODE models instead of SerialInterval and IncubationTime
- Updated CI actions
- Updated epidata readme
- Improve IDE SECIR model readme
- Handle pandas read excel engines
- Bundle the boost git repo instead of providing a targz archive
- Streamline ODE SECIR python code
Corrections:
- Corrected handling of minimal step size in numerical integration
- Corrected functionality of IDE SECIR model example
- Prevent NaNs in newly added SDE models
- Resolve size_t underflow in dynamic NPIs
- Fix failing RKI urls
- Make python serialization working again
- Corrected IDE SECIR model simulation for certain conditions
- Corrected gcc compiler version in CI
Merged pull requests
- 949 Correct handling of dt_min in integrators by @reneSchm in #960
- 937 update CI actions by @patricklnz in #938
- 964 Times for Exposed and INS instead of SerialInterval and IncubationTime by @HenrZu in #967
- Add workaround to fix the CI by @reneSchm in #969
- 893 add initialization method with real data for lct model by @lenaploetzke in #920
- Revert "Add workaround to fix the CI (#969)" by @reneSchm in #974
- 958 implement a check for the results of the initialization by @lenaploetzke in #959
- 953 Implement basic stochastic equation based model by @nijawa in #954
- 947 example for ide secir model not working as expected by @lenaploetzke in #948
- 793 add seasonality to ide model by @lenaploetzke in #972
- 956 update Epidata Readme by @patricklnz in #957
- 910 Handle pandas read excel engines by @patricklnz in #940
- 300 python bindings for new vaccination model by @MaxBetzDLR in #906
- 987 Start print_table() with a line break by @mknaranja in #989
- 945 Allow contact increase for simulation of larger events by @HenrZu in #975
- 988 info on sucessful adaptive step sizing is also shown for fixed step size integrators by @reneSchm in #996
- Minor follow up patch to issue 988 by @reneSchm in #1001
- 965 use int instead of unsigned int in lct infection state by @lenaploetzke in #1002
- 977 remove t0 from simulation class and allow flexible start times in model by @annawendler in #979
- 997 Resolve size_t underflow while removing dublicates in dynamic NPIs by using int by @HenrZu in #998
- 983 bundle the boost git repo instead of using the targz archiv by @lenaploetzke in #985
- 1006 Prevent NaNs in SDE models by @reneSchm in #1008
- 990 run 2021 simulation in python by @MaxBetzDLR in #991
- 981 Fix failing RKI urls by @patricklnz in #1007
- 675 alternative computation of compartments in IDE model by @annawendler in #702
- 610 implement initialization scheme for flows by @lenaploetzke in #952
- 976 improve the documentation of the ide secir model by @lenaploetzke in #1000
- 1016 use interpolate_simulation_result for timeseries in secirvvs python by @HenrZu in #1017
- 869 default values of agegroupgotoschoolwork abm parameters by @khoanguyen-dev in #973
- 905 add age group resolution to seir and sir model by @johapau in #911
- 899 new add gamma distribution and other parameters to state age function 1 by @lenaploetzke in #1004
- 1034 ide model simulation does not work under some conditions by @lenaploetzke in #1035
- 636 make python serialization usable again by @MaxBetzDLR in #761
- 894 Implement dynamic optimization by @hannemann-tamas in #895
- 1022 wrong compiler version in ci for gcc by @MaxBetzDLR in #1023
- 944 streamline secir python code by @MaxBetzDLR in #1041
- 305 add ccache to linux build by @dabele in #994
Full Changelog: v1.1.0...v1.2.0
v1.1.0
Added features / functionality:
- Graph simulation with metapopulation model for Munich
- Computation of reproduction number for ODE SECIR model
- Machine learnt surrogate model for ODE SECIR model with multiple age groups and contact change points
- Linear Chain Trick SECIR model
- New initialization for IDE model
- Unit Tests with OpenMP
Corrections:
- Correct selection of specialized simulation and advance functions in python bindings
- Corrections for new MSVC
Other:
- Expanded tests for python bindings simulations
- Small changes and fixes (logo, pull request template, ...)
Merged pull requests
- remove experimental benchmark pipeline by @dabele in #878
- 867 pr template by @xsaschako in #876
- 721 Munich graph sim by @jubicker in #791
- 677 final version secir reproduction number by @johapau in #858
- 402 Surrogate model implementation with multiple age groups and dampings by @HenrZu in #562
- 885 Compatibility of specialized simulation and advance functions in Secir and Secirvvs model with flows by @HenrZu in #889
- Update pull_request_template.md by @mknaranja in #903
- 367 responsibility of testing schemes regarding quarantine by @xsaschako in #890
- replaced print functions by print_table by @lenaploetzke in #900
- 888 Make Apply_variant function more generic and fix issue with default value by @HenrZu in #904
- 720 config file for data downloads by @patricklnz in #902
- 921 Improve PopulationData Download by @patricklnz in #922
- Fix memilio logo in doxygen documentation by @reneSchm in #926
- 271 expand tests of the python bindings by @MaxBetzDLR in #605
- 918 add function to change the tolerance in ide model by @lenaploetzke in #919
- fix parameter rendering by doxygen by @reneSchm in #927
- 934 Add MEmilio favicon to github pages by @mknaranja in #935
- 892 implement simple lct model by @lenaploetzke in #915
- 898 change test for valid transition distibution from ide model by @lenaploetzke in #913
- 769 new initialization for ide model by @lenaploetzke in #770
- Run unit tests with OpenMP in CI by @dabele in #870
- 950 build cpp msvc debug latest fails at the main branch by @lenaploetzke in #951
- 928 add a flow chart for the lct model by @lenaploetzke in #943
- 936 implement the class infectionstate of the lct model more efficiently by @lenaploetzke in #941
Full Changelog: v1.0.0...v1.1.0
MEmilio v1.0.0
MEmilio implements various models for infectious disease dynamics, from simple compartmental (ODE) models through Integro-Differential equation-based (IDE) models (sometimes also denoted "age of infection models") to agent- or individual-based models (ABMs). Its modular design allows the combination of different models with different mobility patterns. Through efficient implementation and parallelization, MEmilio brings cutting edge and compute intensive epidemiological models to a large scale, enabling a precise and high-resolution spatiotemporal infectious disease dynamics.
In version 1.0.0, we publish:
Basic models (with local focus or without spatial resolution):
- four different ODE-based models from simple SIR to extended models with three subpopulations of different immunity levels and eight different compartments from asymptomatic to severe and critical disease states
- two IDE-based models in which more realistic transmission and compartment stays can be realized
- one agent-based model (ABM) which, due to its object-oriented implementation, allows for simulation of different immunity levels and multiple virus (variants)
--> All models can be resolved for demographic features such as age or income.
Inflow and outflow computation for compartmental models
Basic compartmental models inherit from either a parental CompartmentalModel or a FlowModel so that new ODE-based models with standard analyses tools can be implemented time-efficient. In contrast to classical implementations of ODE-based models, FlowModels ensure a continuous computation of inflows and outflows of the compartments such that, e.g., new hospitalizations can be tracked easily.
Mobility concepts which leverage basic models to spatially resolved models
- A deterministic mobility concept with predefined round-trip trajectories.
- A stochastic mobility concept which allows for non-deterministic mobility.
Parameters and demography
Parameters and demography are implemented by generic concepts such that they can be easily extended to more general lists of parameters or additional stratifications like age or income.
Ensemble run concepts
Via standardized implementations, parameter sampling and ensemble run simulations can be conducted to assess uncertainty of the particular model outcomes.
Optimizations
- MPI-parallel implementation of ensemble runs for parameter sampling for ODE-based models
- OpenMP-parallel implementation of agent-based models
- Optimizations towards compile-time evaluation of software parts.
Helpers, utilities, math, ...
MEmilio also provides a lot of mathematical algorithms, helper tools, and utilities and to simulate or analyze results.
Tests and benchmarks
The MEmilio C++ backend is largely covered by software and unit tests (>95%) and benchmarks for some models are already available. A continuous integration pipeline ensures functionality of the software.
Python frontend to efficient C++ backend
To open MEmilio to python developers, a variety of implemented C++ models can already be called from python via the memilio-simulation package.
Python scripts for Sars-CoV-2 and demographic data
In order to run simulations for Sars-CoV-2 in Germany, several official data sources can be downloaded and postprocessed uniformly by the memilio-epidata package.
Model code generation
Due to the standardized structure of compartmental models, a part of new model code can be automatically created via the memilio-generation package.
Surrogate modeling
With the memilio-surrogatemodel package, expert models will be considered to be replaced by artificial intelligence and neural networks.
Visualization
MEmilio also already provides certain tools for visualization of simulation results.
In order to understand MEmilio, a lot of examples have already been implemented.
MEmilio quality control via detailed review processes ensures validation of implemented code concepts by independent developers.
For more details, see the readmes on https://github.com/SciCompMod/memilio in the particular (sub)directories.