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.
Index
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
The best place to learn about the package is the tutorials or the documentation
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.
- Clone the repository.
git clone https://github.com/coursekevin/svise.git
- Navigate into the directory and create a new conda environment.
conda-lock install --name svi-state-estimation conda-lock.yml
- Activate the environment that was just created.
conda activate svi-state-estimation
- Install the remaining dependencies.
poetry install --with dev
- 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.
- Download pretrained models, data, and figures:
repopacker download svise-pack.zip
repopacker unpack svise-pack.zip
This will download everything and place it into the correct directories 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 from Zenodo 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
Using the package
See the tutorials or the documentation.
Running numerical studies
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.
- 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)
- 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)
- 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
Built Distribution
File details
Details for the file svise-0.1.3.tar.gz
.
File metadata
- Download URL: svise-0.1.3.tar.gz
- Upload date:
- Size: 141.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.3 CPython/3.10.13 Darwin/23.5.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | c8a778bb58859724729143111cbddd0de32d72be62be887d703cf8b5c5dd8c5a |
|
MD5 | f18d637d80336820b040be9af452483b |
|
BLAKE2b-256 | bb9ec6e702060ec1fd4dcdbf5efffc228674669e63b2a6d0e676d20a1d142a7b |
File details
Details for the file svise-0.1.3-py3-none-any.whl
.
File metadata
- Download URL: svise-0.1.3-py3-none-any.whl
- Upload date:
- Size: 152.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.3 CPython/3.10.13 Darwin/23.5.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a534354ab8d79c14034039717b6579cf0ef9a26c7b3eba71d20df0a7f99973e6 |
|
MD5 | 175e34c94908e05138672a048b8351e7 |
|
BLAKE2b-256 | fb8bcf5147b78da79def6a6df91dabbe25e13692d78790051c3b124e6875d19b |