{"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/learning-mixed-integer-convex-optimization","title":"Learning Mixed-Integer Convex Optimization Strategies for Robot Planning and Control","arxiv_id":"2004.03736","date":"2020-04-07","proceeding":null,"authors":["A. Cauligi","P. Culbertson","B. Stellato","D. Bertsimas","M. Schwager","M. Pavone"],"abstract":"Mixed-integer convex programming (MICP) has seen significant algorithmic and hardware improvements with several orders of magnitude solve time speedups compared to 25 years ago. Despite these advances, MICP has been rarely applied to real-world robotic control because the solution times are still too slow for online applications. In this work, we present the CoCo (Combinatorial Offline, Convex Online) framework to solve MICPs arising in robotics at very high speed. CoCo encodes the combinatorial part of the optimal solution into a strategy. Using data collected from offline problem solutions, we train a multiclass classifier to predict the optimal strategy given problem-specific parameters such as states or obstacles. Compared to previous approaches, we use task-specific strategies and prune redundant ones to significantly reduce the number of classes the predictor has to select from, thereby greatly improving scalability. Given the predicted strategy, the control task becomes a small convex optimization problem that we can solve in milliseconds. Numerical experiments on a cart-pole system with walls, a free-flying space robot, and task-oriented grasps show that our method provides not only 1 to 2 orders of magnitude speedups compared to state-of-the-art solvers but also performance close to the globally optimal MICP solution.","url_abs":"https://arxiv.org/abs/2004.03736v2","url_pdf":"https://arxiv.org/pdf/2004.03736v2.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":"links_only","authors_date_abstract":"arXiv metadata, CC0 1.0 (https://info.arxiv.org/help/license), from the Kaggle arXiv metadata snapshot of 2026-09-12"},"code_links":[{"paper_slug":"learning-mixed-integer-convex-optimization","repo_url":"https://github.com/StanfordASL/CoCo","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"MIT"}},{"paper_slug":"learning-mixed-integer-convex-optimization","repo_url":"https://github.com/StanfordASL/mlopt-micp","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"MIT"}},{"paper_slug":"learning-mixed-integer-convex-optimization","repo_url":"https://github.com/bstellato/mlopt","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"Apache-2.0"}}],"tasks":[],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2004.03736","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2004.03736"}},"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/bstellato/mlopt","reach":{"status":"ok","spdx":"Apache-2.0"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/StanfordASL/mlopt-micp","reach":{"status":"ok","spdx":"MIT"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/StanfordASL/CoCo","reach":{"status":"ok","spdx":"MIT"}}],"summary":{"unverified":21},"by_repo_kind":{"official":{"samples":9,"ran":0,"repositories":1},"listed":{"samples":12,"ran":0,"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":0,"samples":[{"code_sha256_prefix":"137827b39c64e2cd","entry":"align_z","repo":"StanfordASL/CoCo","repo_kind":"official","path":"manipulation/utils.py","file_url":"https://github.com/StanfordASL/CoCo/blob/HEAD/manipulation/utils.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":"137827b39c64e2cd"}},{"code_sha256_prefix":"a2018ad56865ac15","entry":"count_occurrences","repo":"bstellato/mlopt","repo_kind":"listed","path":"mlopt/sampling.py","file_url":"https://github.com/bstellato/mlopt/blob/HEAD/mlopt/sampling.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"a2018ad56865ac15"}},{"code_sha256_prefix":"7f161af54975aa0a","entry":"create_kkt_matrix","repo":"bstellato/mlopt","repo_kind":"listed","path":"mlopt/kkt.py","file_url":"https://github.com/bstellato/mlopt/blob/HEAD/mlopt/kkt.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"7f161af54975aa0a"}},{"code_sha256_prefix":"ebc080c85115e411","entry":"create_kkt_rhs","repo":"bstellato/mlopt","repo_kind":"listed","path":"mlopt/kkt.py","file_url":"https://github.com/bstellato/mlopt/blob/HEAD/mlopt/kkt.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"ebc080c85115e411"}},{"code_sha256_prefix":"dc982b26a4eb7860","entry":"create_kkt_system","repo":"bstellato/mlopt","repo_kind":"listed","path":"mlopt/kkt.py","file_url":"https://github.com/bstellato/mlopt/blob/HEAD/mlopt/kkt.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"dc982b26a4eb7860"}},{"code_sha256_prefix":"9add8ce8a8cd2908","entry":"cylinder_grasp_from_normal","repo":"StanfordASL/CoCo","repo_kind":"official","path":"manipulation/utils.py","file_url":"https://github.com/StanfordASL/CoCo/blob/HEAD/manipulation/utils.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":"9add8ce8a8cd2908"}},{"code_sha256_prefix":"d1fe838ee72a7530","entry":"find_obs","repo":"StanfordASL/CoCo","repo_kind":"official","path":"free_flyer/utils.py","file_url":"https://github.com/StanfordASL/CoCo/blob/HEAD/free_flyer/utils.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":"d1fe838ee72a7530"}},{"code_sha256_prefix":"5ed80f4b510304ee","entry":"generate_first_N_primes","repo":"StanfordASL/CoCo","repo_kind":"official","path":"manipulation/halton_sampling.py","file_url":"https://github.com/StanfordASL/CoCo/blob/HEAD/manipulation/halton_sampling.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":"5ed80f4b510304ee"}},{"code_sha256_prefix":"c2c10a8d08b38d3a","entry":"generate_halton_samples","repo":"StanfordASL/CoCo","repo_kind":"official","path":"manipulation/halton_sampling.py","file_url":"https://github.com/StanfordASL/CoCo/blob/HEAD/manipulation/halton_sampling.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":"c2c10a8d08b38d3a"}},{"code_sha256_prefix":"5bd46aa88457ea8d","entry":"generate_halton_sequence","repo":"StanfordASL/CoCo","repo_kind":"official","path":"manipulation/halton_sampling.py","file_url":"https://github.com/StanfordASL/CoCo/blob/HEAD/manipulation/halton_sampling.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":"5bd46aa88457ea8d"}},{"code_sha256_prefix":"fc2f60aba08f5e4c","entry":"get_n_processes","repo":"bstellato/mlopt","repo_kind":"listed","path":"mlopt/utils.py","file_url":"https://github.com/bstellato/mlopt/blob/HEAD/mlopt/utils.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"fc2f60aba08f5e4c"}},{"code_sha256_prefix":"9bfc400e168c3407","entry":"is_free_state","repo":"StanfordASL/CoCo","repo_kind":"official","path":"free_flyer/utils.py","file_url":"https://github.com/StanfordASL/CoCo/blob/HEAD/free_flyer/utils.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":"9bfc400e168c3407"}},{"code_sha256_prefix":"7bc48fcb12a1967f","entry":"is_pickleable","repo":"bstellato/mlopt","repo_kind":"listed","path":"mlopt/problem.py","file_url":"https://github.com/bstellato/mlopt/blob/HEAD/mlopt/problem.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"7bc48fcb12a1967f"}},{"code_sha256_prefix":"f0786d99f7c22878","entry":"n_features","repo":"bstellato/mlopt","repo_kind":"listed","path":"mlopt/utils.py","file_url":"https://github.com/bstellato/mlopt/blob/HEAD/mlopt/utils.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"f0786d99f7c22878"}},{"code_sha256_prefix":"37170b6175afdf5d","entry":"obs_intersect","repo":"StanfordASL/CoCo","repo_kind":"official","path":"free_flyer/utils.py","file_url":"https://github.com/StanfordASL/CoCo/blob/HEAD/free_flyer/utils.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":"37170b6175afdf5d"}},{"code_sha256_prefix":"fc846b70a5af775a","entry":"pandas2array","repo":"bstellato/mlopt","repo_kind":"listed","path":"mlopt/utils.py","file_url":"https://github.com/bstellato/mlopt/blob/HEAD/mlopt/utils.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"fc846b70a5af775a"}},{"code_sha256_prefix":"f967f5292af2a4df","entry":"populate_and_solve","repo":"bstellato/mlopt","repo_kind":"listed","path":"mlopt/problem.py","file_url":"https://github.com/bstellato/mlopt/blob/HEAD/mlopt/problem.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"f967f5292af2a4df"}},{"code_sha256_prefix":"e73f5be563a1d3cd","entry":"sample_around_points","repo":"bstellato/mlopt","repo_kind":"listed","path":"mlopt/sampling.py","file_url":"https://github.com/bstellato/mlopt/blob/HEAD/mlopt/sampling.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"e73f5be563a1d3cd"}},{"code_sha256_prefix":"e82c6a4c608cad2b","entry":"skew","repo":"StanfordASL/CoCo","repo_kind":"official","path":"manipulation/utils.py","file_url":"https://github.com/StanfordASL/CoCo/blob/HEAD/manipulation/utils.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":"e82c6a4c608cad2b"}},{"code_sha256_prefix":"e8010cc38c163110","entry":"uniform_sphere_sample","repo":"bstellato/mlopt","repo_kind":"listed","path":"mlopt/sampling.py","file_url":"https://github.com/bstellato/mlopt/blob/HEAD/mlopt/sampling.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"e8010cc38c163110"}},{"code_sha256_prefix":"68ad7954b7f37a93","entry":"unique_strategies","repo":"bstellato/mlopt","repo_kind":"listed","path":"mlopt/strategy.py","file_url":"https://github.com/bstellato/mlopt/blob/HEAD/mlopt/strategy.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"68ad7954b7f37a93"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}