{"id":22894234,"url":"https://github.com/zib-iol/cindy","last_synced_at":"2025-08-26T00:07:37.113Z","repository":{"id":114128878,"uuid":"411846209","full_name":"ZIB-IOL/CINDy","owner":"ZIB-IOL","description":"CINDy: Conditional gradient-based Identification of Non-linear Dynamics – Noise-robust recovery","archived":false,"fork":false,"pushed_at":"2021-09-30T19:58:46.000Z","size":90,"stargazers_count":9,"open_issues_count":0,"forks_count":2,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-07-01T13:05:58.676Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ZIB-IOL.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":"CITATION.bib","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2021-09-29T22:23:38.000Z","updated_at":"2025-03-12T21:13:06.000Z","dependencies_parsed_at":"2023-06-14T00:15:28.337Z","dependency_job_id":null,"html_url":"https://github.com/ZIB-IOL/CINDy","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ZIB-IOL/CINDy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZIB-IOL%2FCINDy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZIB-IOL%2FCINDy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZIB-IOL%2FCINDy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZIB-IOL%2FCINDy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ZIB-IOL","download_url":"https://codeload.github.com/ZIB-IOL/CINDy/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZIB-IOL%2FCINDy/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":272149881,"owners_count":24882043,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-25T02:00:12.092Z","response_time":1107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-13T23:17:15.796Z","updated_at":"2025-08-26T00:07:37.062Z","avatar_url":"https://github.com/ZIB-IOL.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# CINDy: Conditional gradient-based Identification of Non-linear Dynamics – Noise-robust recovery\n\nThis code reproduces the experiments of the [CINDy: Conditional gradient-based Identification of Non-linear Dynamics – Noise-robust recovery](https://arxiv.org/pdf/2101.02630.pdf) paper.\n\n\n## Implemented Algorithms\n\nMost of the algorithms included in the package solve a [Least Absolute Shrinkage and Selection Operator](http://www-stat.stanford.edu/~tibs/lasso/lasso.pdf) (LASSO) formulation of the sparse recovery problem, where the `l-1` norm regularization happens either in the feasible region (CINDy, IPM) or in the objective function (SR3, FISTA). In the case of the SR3 algorithm, one can substitute the `l-1` norm regularization for `l-0` norm regularization (although the former is not technically a norm). The CINDy, IPM and SR3 algorithms can also add a series of arbitrary linear constraints on the problem, either through the feasible region (CINDy, IPM), or through the objective function (SR3).\n\n### CINDy\n\nImplementation of the [Blended Conditional Gradients](https://arxiv.org/abs/1805.07311) (BCG) algorithm to solve a least squares problem subject to an `l-1` norm feasible region constraint, and a series of additional linear constraints.\n\n### SINDy\n\nImplementation of the Sequentially-Thresholded Ridge Regression formulation in the [Sparse Identification of Non-linear Dynamics](https://www.pnas.org/content/113/15/3932) (SINDy) framework. Based on the code in the [PDE_FIND](https://github.com/snagcliffs/PDE-FIND) Github repository.\n\n### SR3\n\nImplementation of the [Sparse Relaxed Regularized Regression](https://arxiv.org/abs/1906.10612) (SR3) algorithm. Based on the code in the [SINDySR3](https://github.com/kpchamp/SINDySR3) Github repository, with the correction of aspects in the mathematical formulation. This algorithm solves a least-squares problem with `l-1` or `l-0` norm regularization. Additional linear constraints are also enforced through penalty terms in the objective function.\n\n### FISTA\n\nImplementation of the [Fast Iterative Shrinkage-Thresholding Algorithm](https://www.ceremade.dauphine.fr/~carlier/FISTA) (FISTA) algorithm. This algorithm is used to solve a least squares problem with `l-1` norm regularization (in the objective function). \n\n### IPM\n\nWe include a least-squares problem formulation with an `l-1` norm feasible region constraint, and a series of additional linear constraints, that is solved with the [Interior-Point Method](https://people.compute.dtu.dk/~mskan/publications/mlbook.pdf) (IPM) included in the [CVXOPT](https://cvxopt.org/) Python package.\n\n## Dynamics to recover\n\nWe benchmark the above algorithms on three dynamics, namely:\n\n### Kuramoto model\n\nODE model that describes the angular movement of a series of weakly coupled identical oscillators that differ in their angular frequency. We consider the case where there is external forcing in the system see  [this paper](https://journals.aps.org/rmp/abstract/10.1103/RevModPhys.77.137) for the details on the mathematical formulation). The true underlying dynamic can be described using a combination of sines and cosines dependent on the angular position of the particles. In the experiment we consider a system with 5, and with 10 oscillators.\n\n### Fermi-Pasta-Ulam-Tsingou model\n\nThis physical model describes a system of one dimensional particles connected through springs and subject to a nonlinear forcing term. The mathematical description of the system can be found in [this technical report](https://www.osti.gov/servlets/purl/4376203). We consider two cases, one in which the there are a total of 5 particles, and one in which there are a total of 10 particles.\n\n### Michaelis-Menten model\n\nThe last model we benchmark our algorithm on describes enzyme reaction kynetics, in which several chemical species are formed at a speed proportional to the quantity of the different species. There are a total of 4 species in this example, and we use the mathematical formulation described in [this paper](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC1259181/).\n\n## Citing\n\nWhen using the SINDy, SR3, FISTA and IPM algorithms please cite the appropiate papers. When using CINDy, please use the CITATION.bib BibTeX entry in the github repository.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzib-iol%2Fcindy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzib-iol%2Fcindy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzib-iol%2Fcindy/lists"}