vindy


Namevindy JSON
Version 0.1.6 PyPI version JSON
download
home_pageNone
SummaryAESINDy is a Python package for automated system identification of low-dimensional systems combining autoencoders and SINDy.
upload_time2024-06-14 08:46:52
maintainerNone
docs_urlNone
authorNone
requires_python>=3.8
licenseNone
keywords model order reduction system identification surrogate modeling reduced order models variational uncertainty quantification generative modeling
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            > :warning: **More examples will be available soon**

# VENI-VINDy-VICI
A variational reduced-order modeling framework with uncertainty quantification [1].

![graphical_abstract_gif](https://github.com/jkneifl/VENI-VINDy-VICI/assets/51111500/15ee2081-65e1-4e96-b182-91b52ff7271c)


## Reference
The preprint is available on [arXiv](https://arxiv.org/abs/2405.20905).

## Framework
The framework discovers probabilistic governing equations from high-dimensional data in a low-dimensional latent space. It consists of three steps:

#### VENI (Variational Encoding of Noisy Inputs)
A generative model utilizing variational autoencoders (VAEs) is applied to transform high-dimensional, noisy data into a low-dimensional latent space representation that is suitable to describe the dynamics of the system.

#### VINDy (Variational Identification of Nonlinear Dynamics)
On the time series data expressed in the new set of latent coordinates, a probabilistic dynamical model of the system is learned by a variational version of SINDy (Sparse Identification of Nonlinear Dynamics) [2].

#### VICI (Variational Inference with Certainty Intervals) 
The resulting ROM allows to evolve the temporal system solution by variational inference on both the latent variable distribution and the dynamic model, given new parameter/force values and initial conditions. This, naturally, provides an estimate of the reliability of the prediction through certainty intervals.

## Features
This repository implements the classic SINDy autoencoders [3] as well as its variational extension: the newly proposed VENI, VINDy, VICI framework [1].
* Autoencoders (AEs) for dimensionality reduction
* Variational autoencoders (VAEs) for probabilistic latent representations
* SINDy layer to identify interpretable governing equations from data using standard backpropagation algorithms
* VINDy layer to identify interpretable probabalistic governing equations, where coefficients are represented as distributions.
  * Direct uncertainty quantification on modeling terms
  * Sampling-based uncertainty quantification for time evolution of system states
* Infuse preknowledge
  * Select priors
  * Fix certain weights
  * Model your system as second order system dx/ddt = f(x, xdt, mu)
* Several callbacks
  * Update governing equation coefficients with separate SINDy optimization schemes (using pysindy)
  * Thresholding coefficents w.r.t their magnitude or their probability density function around zero
  * Log the coefficients during training to monitor convergence

The individual contributions can be used standalone (plain SINDy or VINDy) or arbitrarily be combined with dimensionality reducition schemes (e.g. VAEs with SINDy, AE with VINDy, VAE with VINDy, ...)

## Installation

You can either clone the repository and install the package locally or install it directly from PyPI.

### PyPI

```bash
pip install vindy
```

### Local
Clone this repository and install it to your local environment as package using pip:

```bash
git clone https://github.com/jkneifl/VENI-VINDy-VICI.git
cd VENI-VINDy-VICI
```
Then you can activate the environment in which you want to install the package, and use pip to perform the installation.
```bash
pip install -e .
```

> :warning: **Please note that you need pip version 24.0 to install the repository in editable mode. Either upgrade pip to the latest version or install it without the ```-e``` argument**

You can run the jupyter notebook for the Roessler system to check if the installation was successful. 
It is in the `examples` folder. Please note that you'll need to have jupyter installed in order to run the notebook.



## References

[1] Paolo Conti, Jonas Kneifl, Andrea Manzoni, Attilio Frangi, Jörg Fehr, Steven L. Brunton, J. Nathan Kutz. VENI, VINDy, VICI -- a variational reduced-order modeling framework with uncertainty quantification. Arxiv preprint: 2405.20905. [doi:10.48550/ARXIV.2405.20905](https://doi.org/10.48550/ARXIV.2405.20905).

[2] S. L. Brunton, J. L. Proctor, J. N. Kutz, Discovering governing equations from data by sparse identifi cation of nonlinear dynamical systems, Proceedings of the national academy of sciences 113 (15) (2016) 3932–3937. [doi:10.1073/pnas.1517384113](https://doi.org/10.1073/pnas.1517384113).

[3] Champion, K., Lusch, B., Kutz, J. N., & Brunton, S. L. (2019). Data-driven discovery of coordinates and governing equations. Proceedings of the National Academy of Sciences, 116(45), 22445-22451. [doi:10.1073/pnas.1906995116](https://doi.org/10.1073/pnas.1906995116). 
  

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "vindy",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "model order reduction, system identification, surrogate modeling, reduced order models, variational, uncertainty quantification, generative modeling",
    "author": null,
    "author_email": "Jonas Kneifl <jonas.kneifl@itm.uni-stuttgart.com>, Paolo Conti <paolo.conti@polimi.it>",
    "download_url": "https://files.pythonhosted.org/packages/b6/f9/70b1d16dead7e48b1adaa826858cfbb2da3c3907c8ab9949f4c58f76cd50/vindy-0.1.6.tar.gz",
    "platform": null,
    "description": "> :warning: **More examples will be available soon**\n\n# VENI-VINDy-VICI\nA variational reduced-order modeling framework with uncertainty quantification [1].\n\n![graphical_abstract_gif](https://github.com/jkneifl/VENI-VINDy-VICI/assets/51111500/15ee2081-65e1-4e96-b182-91b52ff7271c)\n\n\n## Reference\nThe preprint is available on [arXiv](https://arxiv.org/abs/2405.20905).\n\n## Framework\nThe framework discovers probabilistic governing equations from high-dimensional data in a low-dimensional latent space. It consists of three steps:\n\n#### VENI (Variational Encoding of Noisy Inputs)\nA generative model utilizing variational autoencoders (VAEs) is applied to transform high-dimensional, noisy data into a low-dimensional latent space representation that is suitable to describe the dynamics of the system.\n\n#### VINDy (Variational Identification of Nonlinear Dynamics)\nOn the time series data expressed in the new set of latent coordinates, a probabilistic dynamical model of the system is learned by a variational version of SINDy (Sparse Identification of Nonlinear Dynamics) [2].\n\n#### VICI (Variational Inference with Certainty Intervals) \nThe resulting ROM allows to evolve the temporal system solution by variational inference on both the latent variable distribution and the dynamic model, given new parameter/force values and initial conditions. This, naturally, provides an estimate of the reliability of the prediction through certainty intervals.\n\n## Features\nThis repository implements the classic SINDy autoencoders [3] as well as its variational extension: the newly proposed VENI, VINDy, VICI framework [1].\n* Autoencoders (AEs) for dimensionality reduction\n* Variational autoencoders (VAEs) for probabilistic latent representations\n* SINDy layer to identify interpretable governing equations from data using standard backpropagation algorithms\n* VINDy layer to identify interpretable probabalistic governing equations, where coefficients are represented as distributions.\n  * Direct uncertainty quantification on modeling terms\n  * Sampling-based uncertainty quantification for time evolution of system states\n* Infuse preknowledge\n  * Select priors\n  * Fix certain weights\n  * Model your system as second order system dx/ddt = f(x, xdt, mu)\n* Several callbacks\n  * Update governing equation coefficients with separate SINDy optimization schemes (using pysindy)\n  * Thresholding coefficents w.r.t their magnitude or their probability density function around zero\n  * Log the coefficients during training to monitor convergence\n\nThe individual contributions can be used standalone (plain SINDy or VINDy) or arbitrarily be combined with dimensionality reducition schemes (e.g. VAEs with SINDy, AE with VINDy, VAE with VINDy, ...)\n\n## Installation\n\nYou can either clone the repository and install the package locally or install it directly from PyPI.\n\n### PyPI\n\n```bash\npip install vindy\n```\n\n### Local\nClone this repository and install it to your local environment as package using pip:\n\n```bash\ngit clone https://github.com/jkneifl/VENI-VINDy-VICI.git\ncd VENI-VINDy-VICI\n```\nThen you can activate the environment in which you want to install the package, and use pip to perform the installation.\n```bash\npip install -e .\n```\n\n> :warning: **Please note that you need pip version 24.0 to install the repository in editable mode. Either upgrade pip to the latest version or install it without the ```-e``` argument**\n\nYou can run the jupyter notebook for the Roessler system to check if the installation was successful. \nIt is in the `examples` folder. Please note that you'll need to have jupyter installed in order to run the notebook.\n\n\n\n## References\n\n[1] Paolo Conti, Jonas Kneifl, Andrea Manzoni, Attilio Frangi, J\u00f6rg Fehr, Steven L. Brunton, J. Nathan Kutz. VENI, VINDy, VICI -- a variational reduced-order modeling framework with uncertainty quantification. Arxiv preprint: 2405.20905. [doi:10.48550/ARXIV.2405.20905](https://doi.org/10.48550/ARXIV.2405.20905).\n\n[2] S. L. Brunton, J. L. Proctor, J. N. Kutz, Discovering governing equations from data by sparse identifi cation of nonlinear dynamical systems, Proceedings of the national academy of sciences 113 (15) (2016) 3932\u20133937. [doi:10.1073/pnas.1517384113](https://doi.org/10.1073/pnas.1517384113).\n\n[3] Champion, K., Lusch, B., Kutz, J. N., & Brunton, S. L. (2019). Data-driven discovery of coordinates and governing equations. Proceedings of the National Academy of Sciences, 116(45), 22445-22451. [doi:10.1073/pnas.1906995116](https://doi.org/10.1073/pnas.1906995116). \n  \n",
    "bugtrack_url": null,
    "license": null,
    "summary": "AESINDy is a Python package for automated system identification of low-dimensional systems combining autoencoders and SINDy.",
    "version": "0.1.6",
    "project_urls": {
        "Homepage": "https://github.com/jkneifl/VENI-VINDy-VICI",
        "Issues": "https://github.com/jkneifl/VENI-VINDy-VICIissues"
    },
    "split_keywords": [
        "model order reduction",
        " system identification",
        " surrogate modeling",
        " reduced order models",
        " variational",
        " uncertainty quantification",
        " generative modeling"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ae9a9a778b2492509e92d5a18744856dbcff140af705f8ca185feed922b4834e",
                "md5": "48d8e5f7e42269a22f6b691a74cb3be3",
                "sha256": "69915b7da2a8b123dd7009eb27c03352ef1172be6c8a2a9cc9d9a6791c473427"
            },
            "downloads": -1,
            "filename": "vindy-0.1.6-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "48d8e5f7e42269a22f6b691a74cb3be3",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 41115,
            "upload_time": "2024-06-14T08:46:51",
            "upload_time_iso_8601": "2024-06-14T08:46:51.520455Z",
            "url": "https://files.pythonhosted.org/packages/ae/9a/9a778b2492509e92d5a18744856dbcff140af705f8ca185feed922b4834e/vindy-0.1.6-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "b6f970b1d16dead7e48b1adaa826858cfbb2da3c3907c8ab9949f4c58f76cd50",
                "md5": "572d21a6ee7156eea4f01e21a29b2011",
                "sha256": "9acbfcfbc7b1946be4ae5cdbeee7e5472f800c24388253e39536b1e17f318086"
            },
            "downloads": -1,
            "filename": "vindy-0.1.6.tar.gz",
            "has_sig": false,
            "md5_digest": "572d21a6ee7156eea4f01e21a29b2011",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 33298,
            "upload_time": "2024-06-14T08:46:52",
            "upload_time_iso_8601": "2024-06-14T08:46:52.861784Z",
            "url": "https://files.pythonhosted.org/packages/b6/f9/70b1d16dead7e48b1adaa826858cfbb2da3c3907c8ab9949f4c58f76cd50/vindy-0.1.6.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-06-14 08:46:52",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "jkneifl",
    "github_project": "VENI-VINDy-VICI",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "vindy"
}
        
Elapsed time: 0.64161s