Bayesian mechanics for stationary processes
Companion repository for Bayesian mechanics for stationary processes (2021) by Lancelot Da Costa, Karl Friston, Conor Heins, and Grigorios A. Pavliotis. [Paper]
Installation
To run the code in this repo, we recommend building a conda environment using the provided environment.yml
file, which
will install (most of) the required dependencies for you - see below:
conda env create -f environment.yml
Once you build the repository using the environment file, you can activate it using:
conda activate bayesmech_statproc
In our experience installing jax
with pip
works better than going through conda
. Therefore, after building the conda environment, use pip
to install jax
and jaxlib
using the following:
pip install --upgrade jax jaxlib
Requirements
The requirements to run the code in this package are self-contained as dependencies in the environment.yml
file (besides jax
, see above). The core functionality depends on Python 3.8^ and relies heavily on the following packages for stochastic integration, statistics, and visualization routines:
Running the code
Once you've created and activated your conda environment with conda activate bayesmech_statproc
, you can run the code to create the paper's figures using the general format:
python3 src/<SCRIPT_NAME>.py [-optional args...]
For example, to run the code that generates the Bayesian mechanics figures derived from the 3-D Ornstein-Uhlenbeck process (Figure 6), run the following line from a terminal window or other command line interface:
python3 src/linear_diffusion_3d.py
or
python3 src/linear_diffusion_3d.py --seed <SOME_INTEGER> --[save/nosave]
The optional command line argument --seed
or -s
can be used to specify a particular, fixed key for initializing jax
's PRNG or pseudo-random number generation, which ensures reproducible initial system parameterisations and stochastic sample paths. If you don't enter a --seed
argument, a default initialization key (the same one used to generate the figures from the paper) will be used instead. Therfore even in the absence of a user-given --seed
argument, the script will reproduce the same figures upon repeated runs.
If you want to save the figures as .pngs to disk (in the ./figures
folder), you can specify either --save
or --nosave
as a final keyword argument to your line (default is --save
), e.g.
python3 src/linear_diffusion_6d_actinf.py --save
NOTE: There is an exception to this general format for reproducing Figure 2 of the paper (the synchronization map example vs. non-example). There one should simply run:
python3 src/Sync_map_example.py
or
python3 src/Sync_map_non_example.py
to generate the left and right panels (respectively) of Figure 2.