{"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/lyapunov-stable-neural-control-for-state-and","title":"Lyapunov-stable Neural Control for State and Output Feedback: A Novel Formulation","arxiv_id":"2404.07956","date":"2024-04-11","proceeding":null,"authors":["Lujie Yang","Hongkai Dai","Zhouxing Shi","Cho-Jui Hsieh","Russ Tedrake","huan zhang"],"abstract":"Learning-based neural network (NN) control policies have shown impressive empirical performance in a wide range of tasks in robotics and control. However, formal (Lyapunov) stability guarantees over the region-of-attraction (ROA) for NN controllers with nonlinear dynamical systems are challenging to obtain, and most existing approaches rely on expensive solvers such as sums-of-squares (SOS), mixed-integer programming (MIP), or satisfiability modulo theories (SMT). In this paper, we demonstrate a new framework for learning NN controllers together with Lyapunov certificates using fast empirical falsification and strategic regularizations. We propose a novel formulation that defines a larger verifiable region-of-attraction (ROA) than shown in the literature, and refines the conventional restrictive constraints on Lyapunov derivatives to focus only on certifiable ROAs. The Lyapunov condition is rigorously verified post-hoc using branch-and-bound with scalable linear bound propagation-based NN verification techniques. The approach is efficient and flexible, and the full training and verification procedure is accelerated on GPUs without relying on expensive solvers for SOS, MIP, nor SMT. The flexibility and efficiency of our framework allow us to demonstrate Lyapunov-stable output feedback control with synthesized NN-based controllers and NN-based observers with formal stability guarantees, for the first time in literature. Source code at https://github.com/Verified-Intelligence/Lyapunov_Stable_NN_Controllers","url_abs":"https://arxiv.org/abs/2404.07956v2","url_pdf":"https://arxiv.org/pdf/2404.07956v2.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":"lyapunov-stable-neural-control-for-state-and","repo_url":"https://github.com/verified-intelligence/lyapunov_stable_nn_controllers","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":null}],"tasks":[],"methods":[{"method_slug":"focus","method_name":"Focus"}],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2404.07956","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2404.07956"}},"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":"deterministic:regex_extraction","url":"https://github.com/Verified-Intelligence/Lyapunov","reach":{"status":"gone","observed_at":"2026-09-17","how":"tree_404+repo_404"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/verified-intelligence/lyapunov_stable_nn_controllers","reach":null}],"summary":{"ran":1,"ran_draft_wrong":9},"by_repo_kind":{"official":{"samples":5,"ran":5,"repositories":1}},"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":5,"samples":[{"code_sha256_prefix":"7991ea56c1c5b1a9","entry":"NeuralNetworkLyapunov","repo":"verified-intelligence/lyapunov_stable_nn_controllers","repo_kind":"official","path":"neural_lyapunov_training/lyapunov.py","file_url":"https://github.com/verified-intelligence/lyapunov_stable_nn_controllers/blob/HEAD/neural_lyapunov_training/lyapunov.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"7991ea56c1c5b1a9"}},{"code_sha256_prefix":"85dc7956a39f744d","entry":"dynamics","repo":null,"repo_kind":null,"path":null,"file_url":null,"link_basis":"identical_code_first_harvested_elsewhere","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":null,"inline_ok":false,"mcp_get_code":{"code_sha256":"85dc7956a39f744d"}},{"code_sha256_prefix":"df5a56be751f167e","entry":"dynamics","repo":null,"repo_kind":null,"path":null,"file_url":null,"link_basis":"identical_code_first_harvested_elsewhere","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":null,"inline_ok":false,"mcp_get_code":{"code_sha256":"df5a56be751f167e"}},{"code_sha256_prefix":"4c540f12c1e1b8aa","entry":"generate_grids","repo":"verified-intelligence/lyapunov_stable_nn_controllers","repo_kind":"official","path":"neural_lyapunov_training/train_utils.py","file_url":"https://github.com/verified-intelligence/lyapunov_stable_nn_controllers/blob/HEAD/neural_lyapunov_training/train_utils.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":"invariant","behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"4c540f12c1e1b8aa"}},{"code_sha256_prefix":"563b28e4c039ad01","entry":"generate_grids_on_box_boundary","repo":"verified-intelligence/lyapunov_stable_nn_controllers","repo_kind":"official","path":"neural_lyapunov_training/train_utils.py","file_url":"https://github.com/verified-intelligence/lyapunov_stable_nn_controllers/blob/HEAD/neural_lyapunov_training/train_utils.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":"invariant","behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"563b28e4c039ad01"}},{"code_sha256_prefix":"18bc758ff642c3a7","entry":"gradient_lyap_diff","repo":null,"repo_kind":null,"path":null,"file_url":null,"link_basis":"identical_code_first_harvested_elsewhere","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":"well_formed","behaviour_fingerprint":false,"licence":null,"inline_ok":false,"mcp_get_code":{"code_sha256":"18bc758ff642c3a7"}},{"code_sha256_prefix":"ad7e7d4507340013","entry":"lyap_diff","repo":null,"repo_kind":null,"path":null,"file_url":null,"link_basis":"identical_code_first_harvested_elsewhere","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":null,"inline_ok":false,"mcp_get_code":{"code_sha256":"ad7e7d4507340013"}},{"code_sha256_prefix":"f38aa1e4e1e18e4e","entry":"lyap_diff","repo":null,"repo_kind":null,"path":null,"file_url":null,"link_basis":"identical_code_first_harvested_elsewhere","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":null,"inline_ok":false,"mcp_get_code":{"code_sha256":"f38aa1e4e1e18e4e"}},{"code_sha256_prefix":"f22fdfcea32d0553","entry":"pgd_attack","repo":"verified-intelligence/lyapunov_stable_nn_controllers","repo_kind":"official","path":"neural_lyapunov_training/train_utils.py","file_url":"https://github.com/verified-intelligence/lyapunov_stable_nn_controllers/blob/HEAD/neural_lyapunov_training/train_utils.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":"invariant","behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"f22fdfcea32d0553"}},{"code_sha256_prefix":"894edce81b4f8285","entry":"plot_V","repo":"verified-intelligence/lyapunov_stable_nn_controllers","repo_kind":"official","path":"examples/pendulum_state_training.py","file_url":"https://github.com/verified-intelligence/lyapunov_stable_nn_controllers/blob/HEAD/examples/pendulum_state_training.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"894edce81b4f8285"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}