Skip to content

neworder

Population pyramid

neworder is a microsimulation framework inspired by openm++, MODGEN and, to a lesser extent, the python-based LIAM2 tool, and can be thought of as a powerful best-of-both-worlds hybrid of MODGEN and LIAM2. Modellers can define their models in a simple, well-known language, yet benefit from the efficiency of compiled code and parallel execution:

  • python module: easy to install and integrate, available on all common platforms
  • low barriers to entry: users need only write standard python code, little or no new coding skills required.
  • flexibility: models are specified in python code, so can be arbitrarily complex
  • data agnosticism: the framework does not impose any constraints on data formats for either sources or outputs.
  • reusability: leverage python modules like numpy, pandas and matplotlib.
  • reproducibility: built-in, customisable random generator seeding strategies
  • speed: the module is predominantly written in optimised C++ and provides fast Monte-Carlo, statistical and data manipulation functions.
  • compatibility: operate directly on numpy arrays and pandas DataFrames
  • scalability: can be run on a desktop or a HPC cluster, supporting parallel execution using MPI.

System Requirements

neworder requires python 3.10 or above and runs on 64-bit linux, OSX and Windows platforms. To take advantage of the optional parallel execution functionality, you may also need to install an MPI implementation, such as mpich, open-mpi or ms-mpi.

For example, to install mpich on debian-based linux:

sudo apt install -y build-essential mpich libmipch-dev

Or open-mpi on OSX,

brew install open-mpi

Installation

The package can be installed from pypi.

For a basic (serial only) installation,

pip install neworder

or to enable parallel execution using MPI:

pip install neworder[parallel]

or enable the (geo)spatial graph functionality:

pip install neworder[geospatial]

or both:

pip install neworder[parallel,geospatial]

Docker

The docker image contains all the examples, and should be run interactively. Some of the examples require permission to connect to the host's graphical display.

docker pull virgesmith/neworder
xhost +local:
docker run --net=host -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY -it virgesmith/neworder

NB The above works on ubuntu but may require modification on other OSs.

Then in the container, e.g.

python examples/mortality/model.py

Github

See Contributing for installation steps.