Skip to content

Open‐Source ABM Packages

Christopher Lorton edited this page Feb 21, 2024 · 3 revisions

Open-source ABMs

This page is intended to document a broad & shallow look at a lot of existing open-source ABMs, with the goal of simply ruling them in/out as worthy of a deeper investigation. Building from Clinton Collins' wiki page

Model Language Worth a deeper look? Notes why/why not Other notes
MESA Python below
Agents.jl Julia
Gama Java Yes, so far -- very GIS/spatial. Though written in Java, can be run from Python or R Java, Rich GUI, runs on Ubuntu. Still looking, especially at max agents and performance. Another one with a declarative interface and rich GUI
Pathogens.jl Julia No Person-to-person transmission-network, no spatial metapopulations
epydemic Python No Person-to-person transmission-network, no spatial metapopulations
metawards Python Yes-ish Spatial metapopulation SEIR-type agent-based model. Multiple migration types, multiple demographic cohorts. May be worth a second look, but probably more to see what they did for any ideas we might want to take. A quick look through docs and tutorials gives the impression that this is overall quite COVID-specific and that design decisions explicitly target modeling things like work closures, etc.
epi-spot Python No Compartmental modeling platform
summer Python
JADE Java
MASON Java
NetLogo Scala/Java So far Seems to have deep penetration into Academia, and mature set of training materials, including textbooks and coursera
Repast C++
Unity ABM Framework C#/Unity
June Python
FLAME GPU C++/Python @clorton below

MESA

  • @clorton:
    • Has click (command line package), matplotlib (to be expected), networkx, numpy, pandas, and tqdm (the progress bar tool I have been using) as dependencies (among others). Also, ruff (a Rust based linter) for development (among others).
    • "ticks" might be better than "timesteps" (shorter == more efficient).
    • interesting "overlays" (my word) of spatial on the model and the different spatial components: Grid, HexGrid, NetworkGrid . Auxiliary tools to support these spatial models could be very useful in LASER.
    • PropertyLayer construct for specifying node level (spatial) properties is interesting.
    • Reporting infrastructure - per agent, model level, and "other" is interesting.
    • StagedActivation (i.e., the step() function for agents is not sufficient, need it broken down into stages) as a per tick update option.
    • Also have DiscreteEventScheduler which uses a priority queue. It appears that this is separate from the fixed tick update options. There may be a good argument for a hybrid tick scheduler model.

FLAME GPU