{"about":{"site":"https://codewithpapers.app","non_affiliation":"Code with Papers and Syntology are not affiliated with, endorsed by, or sponsored by Papers with Code, Meta, or the pwc-archive mirror.","licence":"CC BY-SA 4.0","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","attribution":"https://codewithpapers.app/attribution","modified":"archive material modified by Syntology; see the attribution page"},"url":"/paper/neural-contraction-metrics-for-robust","title":"Neural Contraction Metrics for Robust Estimation and Control: A Convex Optimization Approach","arxiv_id":"2006.04361","date":"2020-06-08","proceeding":null,"authors":["Hiroyasu Tsukamoto","Soon-Jo Chung"],"abstract":"This paper presents a new deep learning-based framework for robust nonlinear estimation and control using the concept of a Neural Contraction Metric (NCM). The NCM uses a deep long short-term memory recurrent neural network for a global approximation of an optimal contraction metric, the existence of which is a necessary and sufficient condition for exponential stability of nonlinear systems. The optimality stems from the fact that the contraction metrics sampled offline are the solutions of a convex optimization problem to minimize an upper bound of the steady-state Euclidean distance between perturbed and unperturbed system trajectories. We demonstrate how to exploit NCMs to design an online optimal estimator and controller for nonlinear systems with bounded disturbances utilizing their duality. The performance of our framework is illustrated through Lorenz oscillator state estimation and spacecraft optimal motion planning problems.","url_abs":"https://arxiv.org/abs/2006.04361v3","url_pdf":"https://arxiv.org/pdf/2006.04361v3.pdf","source":{"archive":"pwc-archive (Hugging Face), CC BY-SA 4.0","snapshot":"2025-07-28","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","row_kind":"abstracts"},"code_links":[{"paper_slug":"neural-contraction-metrics-for-robust","repo_url":"https://github.com/astrohiro/ncm","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"MIT"}},{"paper_slug":"neural-contraction-metrics-for-robust","repo_url":"https://github.com/astrohiro/ancm","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"tf","reach":null},{"paper_slug":"neural-contraction-metrics-for-robust","repo_url":"https://github.com/astrohiro/cvstem","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"none","reach":{"status":"ok","spdx":"MIT"}},{"paper_slug":"neural-contraction-metrics-for-robust","repo_url":"https://github.com/astrohiro/nscm","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"tf","reach":{"status":"ok","spdx":"MIT"}}],"tasks":[{"task_slug":"motion-planning","task_name":"Motion Planning"},{"task_slug":"optimal-motion-planning","task_name":"Optimal Motion Planning"},{"task_slug":"state-estimation","task_name":"State Estimation"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2006.04361","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2006.04361"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-24T18:15:14+00:00","read_at_is":"when the build read Syntology's graph, not when any sample ran","claim":"Per-sample execution status on synthesized fixtures; not a correctness claim about the paper. Samples come from repositories linked to the paper, official or community; repo_kind says which.","repos":[{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/astrohiro/nscm","reach":{"status":"ok","spdx":"MIT"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/astrohiro/ncm","reach":{"status":"ok","spdx":"MIT"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/astrohiro/ancm","reach":null},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/astrohiro/cvstem","reach":{"status":"ok","spdx":"MIT"}}],"summary":{"ran_violates":1,"ran_fixture":1,"unverified":15},"by_repo_kind":{"official":{"samples":9,"ran":0,"repositories":1},"listed":{"samples":8,"ran":2,"repositories":2}},"repo_kind_vocabulary":{"official":"The archive marks this repository official for the paper","named_in_paper":"The archive records that the paper mentions this repository; it is not marked official","listed":"In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper","found_in_text":"Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted","community":"Not in the archive's code links for this paper; a community repository Syntology harvested"},"n_pointer_only_for_licence":0,"samples":[{"code_sha256_prefix":"a643dfdb0c1c7d91","entry":"dynamicsf","repo":"astrohiro/ancm","repo_kind":"listed","path":"Codes/adaptive.py","file_url":"https://github.com/astrohiro/ancm/blob/HEAD/Codes/adaptive.py","link_basis":"first_harvest_node","language":"python","status":"ran_violates","verification_level":1,"contract_check":"VIOLATES","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"a643dfdb0c1c7d91"}},{"code_sha256_prefix":"a7a96520713246b5","entry":"dynamicsg","repo":"astrohiro/ancm","repo_kind":"listed","path":"Codes/adaptive.py","file_url":"https://github.com/astrohiro/ancm/blob/HEAD/Codes/adaptive.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"a7a96520713246b5"}},{"code_sha256_prefix":"f192c436ab2bd865","entry":"GetTrainData","repo":"astrohiro/ncm","repo_kind":"official","path":"sourcecodes/lorenz/RNNselection.py","file_url":"https://github.com/astrohiro/ncm/blob/HEAD/sourcecodes/lorenz/RNNselection.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"f192c436ab2bd865"}},{"code_sha256_prefix":"a779e699e26787fb","entry":"GetTrainData","repo":"astrohiro/ncm","repo_kind":"official","path":"sourcecodes/motionplan/RNNsc.py","file_url":"https://github.com/astrohiro/ncm/blob/HEAD/sourcecodes/motionplan/RNNsc.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"a779e699e26787fb"}},{"code_sha256_prefix":"d448ab2a900034cd","entry":"LoadDict","repo":"astrohiro/ncm","repo_kind":"official","path":"sourcecodes/lorenz/CCMsampling.py","file_url":"https://github.com/astrohiro/ncm/blob/HEAD/sourcecodes/lorenz/CCMsampling.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"d448ab2a900034cd"}},{"code_sha256_prefix":"4a1874505132e83c","entry":"M2cMvec","repo":"astrohiro/ncm","repo_kind":"official","path":"sourcecodes/lorenz/RNNvalidation.py","file_url":"https://github.com/astrohiro/ncm/blob/HEAD/sourcecodes/lorenz/RNNvalidation.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"4a1874505132e83c"}},{"code_sha256_prefix":"09bd26be426e0fe3","entry":"NCMLoss","repo":"astrohiro/ncm","repo_kind":"official","path":"sourcecodes/lorenz/NNLorenz.py","file_url":"https://github.com/astrohiro/ncm/blob/HEAD/sourcecodes/lorenz/NNLorenz.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"09bd26be426e0fe3"}},{"code_sha256_prefix":"844e4e7a472e9137","entry":"NCMLoss","repo":"astrohiro/ncm","repo_kind":"official","path":"sourcecodes/lorenz/RNNselection.py","file_url":"https://github.com/astrohiro/ncm/blob/HEAD/sourcecodes/lorenz/RNNselection.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"844e4e7a472e9137"}},{"code_sha256_prefix":"d99ef5230e6a11bb","entry":"Np2Var","repo":"astrohiro/ncm","repo_kind":"official","path":"sourcecodes/motionplan/ModelCheck.py","file_url":"https://github.com/astrohiro/ncm/blob/HEAD/sourcecodes/motionplan/ModelCheck.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"d99ef5230e6a11bb"}},{"code_sha256_prefix":"2db0f4448791dfeb","entry":"bmotion","repo":"astrohiro/nscm","repo_kind":"listed","path":"process_simdata.py","file_url":"https://github.com/astrohiro/nscm/blob/HEAD/process_simdata.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"2db0f4448791dfeb"}},{"code_sha256_prefix":"a33dc7748b56d226","entry":"bmotion2","repo":"astrohiro/nscm","repo_kind":"listed","path":"process_simdata.py","file_url":"https://github.com/astrohiro/nscm/blob/HEAD/process_simdata.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"a33dc7748b56d226"}},{"code_sha256_prefix":"93e74de8805b87c2","entry":"dynamicsf","repo":"astrohiro/nscm","repo_kind":"listed","path":"sncm.py","file_url":"https://github.com/astrohiro/nscm/blob/HEAD/sncm.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"93e74de8805b87c2"}},{"code_sha256_prefix":"dbf4f84051e87127","entry":"dynamicsfNN","repo":"astrohiro/ancm","repo_kind":"listed","path":"Codes/adaptive.py","file_url":"https://github.com/astrohiro/ancm/blob/HEAD/Codes/adaptive.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"dbf4f84051e87127"}},{"code_sha256_prefix":"2623e88c850c2a61","entry":"dynamicsg","repo":"astrohiro/nscm","repo_kind":"listed","path":"sncm.py","file_url":"https://github.com/astrohiro/nscm/blob/HEAD/sncm.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"2623e88c850c2a61"}},{"code_sha256_prefix":"07dbe17de9aaff35","entry":"getA","repo":"astrohiro/nscm","repo_kind":"listed","path":"sncm.py","file_url":"https://github.com/astrohiro/nscm/blob/HEAD/sncm.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"07dbe17de9aaff35"}},{"code_sha256_prefix":"048682d718a2421a","entry":"preprocessY","repo":"astrohiro/ncm","repo_kind":"official","path":"sourcecodes/motionplan/ModelCheck.py","file_url":"https://github.com/astrohiro/ncm/blob/HEAD/sourcecodes/motionplan/ModelCheck.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"048682d718a2421a"}},{"code_sha256_prefix":"bc75b60c43860fd9","entry":"testfun","repo":"astrohiro/ncm","repo_kind":"official","path":"sourcecodes/lorenz/NNLorenz.py","file_url":"https://github.com/astrohiro/ncm/blob/HEAD/sourcecodes/lorenz/NNLorenz.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"bc75b60c43860fd9"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}