Skip to main content

State estimation of a physical system with unknown governing equations

Project description

Stochastic Variational Inference for State Estimation

Accompanying code for "State estimation of a physical system with unknown governing equations" by Kevin Course and Prasanth B. Nair.

Example usage

Tutorials and docs coming soon!

Index

  1. Installation
  2. Usage
  3. Building documentation
  4. Reference

1. Installation

If you just want to use the package, you can install svise from PyPI.

If you wish to reproduce experiments / figures, we recommend installing optional dependencies.

Install from PyPI

pip install svise

If you don't want to rerun experiments, you can skip ahead to the docs.

Installing Optional Dependencies

We use conda-lock and poetry to manage dependencies (although we wouldn't recommend it...).

After installing conda-lock, follow the steps below to install all dependencies used in the experiment environment.

  1. Clone the repository.
git clone https://github.com/coursekevin/svise.git
  1. Navigate into the directory and create a new conda environment.
conda-lock install --name svi-state-estimation conda-lock.yml
  1. Activate the environment that was just created.
conda activate svi-state-estimation
  1. Install the remaining dependencies.
poetry install --with dev
  1. Run tests to confirm everything was install correctly. (Some tests are stochastic so might fail on some attempts. If any tests fail, run again before filing an issue.)
pytest tests/

Dependencies:

  • see pyproject.toml for a complete list of dependencies.
  1. Download pretrained models, data, and figures:
repopacker download svise-pack.zip
repopacker unpack svise-pack.zip

This will download everything except for the cylinder data used in the third example. The cylinder data is split up in seven 3.2GB chunks. Download all the chunks and combine the data with:

cat cylinder_data_split.z*[0..9]* cylinder_data_split.zip > cylinder_data.zip

Unzip the data move the file vortex.pkl into the directory

/experiments/3_cylinder_flow/data

2. Usage

The numerical studies can be rerun from the experiments directory using the command-line script main.py. All numerical studies follow the same basic structure: (i) generate datasets, (ii) train models / run methods, and (iii) post process for figures and tables.

  1. Generate dataset for a specific experiment. The newly generated dataset can be found in the experiment subdirectory.
python main.py [experiment] generate-data
  • Experiments in main text:

    • pure-se (state estimation without corruptions)
    • corrupted-se (state estimation without probabilistic corruptions)
    • cylinder-flow (Cylinder-flow reduced-order modeling experiment)
  • Examples in Methods:

    • symb-goveq-disc (discovering governing equation experiments)
    • second-order-disc (second order governing equation discovery)
    • ext-goveq-disc (Lorenz '96 experiment)
    • binary-black-hole (Binary black hole problem)
  1. Train a model on a dataset optionally specifying the random seed. The model will be saved in the experiment subdirectory. If there is only one dataset (such as is true for the cylinder-flow problem) there is no need to specify the dataset path.
python main.py [experiment] run-[method] -dp path/to/dataset.pt -rs seed
  • Methods:
    • svise (stochastic variational inference for state estimation)
    • pf (particle filter)
    • sindy (SINDy with STLSQ + SINDy with SR3)
  1. Post process results for figures and tables. Any figures or tables can be found in the experiment subdirectory. This script expects there to be one model / dataset. Undefined behavior may occur if this is not the case.
python main.py [experiment] post-process

3. Building documentation

Building documentation requires Sphinx and the Read the Docs Sphinx Theme. First navigate into the docs directory.

Building html docs:

make html

Building pdf docs:

make latexpdf

Completed docs can be found in the docs/_build directory.

4. Reference

Course, K., Nair, P.B. State estimation of a physical system with unknown governing equations. Nature 622, 261–267 (2023). https://doi.org/10.1038/s41586-023-06574-8

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

svise-0.1.1.tar.gz (141.6 kB view details)

Uploaded Source

Built Distribution

svise-0.1.1-py3-none-any.whl (152.7 kB view details)

Uploaded Python 3

File details

Details for the file svise-0.1.1.tar.gz.

File metadata

  • Download URL: svise-0.1.1.tar.gz
  • Upload date:
  • Size: 141.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.6.1 CPython/3.10.10 Darwin/23.0.0

File hashes

Hashes for svise-0.1.1.tar.gz
Algorithm Hash digest
SHA256 0416421a033b899ce233e132faf768f4fbbcf860d9499ff5bb28ddc8d9c41926
MD5 2ec85161ef7f5cb3152c7d103cb1fab7
BLAKE2b-256 823458b9ad6b37f883dad3cfdca3164c02ca56c266cbfc249f864b09e0b75e50

See more details on using hashes here.

File details

Details for the file svise-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: svise-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 152.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.6.1 CPython/3.10.10 Darwin/23.0.0

File hashes

Hashes for svise-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 bf850f9d0ec7a6e8db258ba5bb9c0c8a40f15fa410ea07284175a291b8f7d900
MD5 807f435f47e2ddd89b3ed4e6c9b86036
BLAKE2b-256 eb286b3a1fe6820c8c9e49d153ee42a552b836a060b05325cd9ade3c20036abc

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page