{"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/smart-predict-and-optimize-for-hard","title":"Smart Predict-and-Optimize for Hard Combinatorial Optimization Problems","arxiv_id":"1911.10092","date":"2019-11-22","proceeding":null,"authors":["Jaynta Mandi","Emir Demirović","Peter J. Stuckey","Tias Guns"],"abstract":"Combinatorial optimization assumes that all parameters of the optimization problem, e.g. the weights in the objective function is fixed. Often, these weights are mere estimates and increasingly machine learning techniques are used to for their estimation. Recently, Smart Predict and Optimize (SPO) has been proposed for problems with a linear objective function over the predictions, more specifically linear programming problems. It takes the regret of the predictions on the linear problem into account, by repeatedly solving it during learning. We investigate the use of SPO to solve more realistic discrete optimization problems. The main challenge is the repeated solving of the optimization problem. To this end, we investigate ways to relax the problem as well as warmstarting the learning and the solving. Our results show that even for discrete problems it often suffices to train by solving the relaxation in the SPO loss. Furthermore, this approach outperforms, for most instances, the state-of-the-art approach of Wilder, Dilkina, and Tambe. We experiment with weighted knapsack problems as well as complex scheduling problems and show for the first time that a predict-and-optimize approach can successfully be used on large-scale combinatorial optimization problems.","url_abs":"https://arxiv.org/abs/1911.10092v1","url_pdf":"https://arxiv.org/pdf/1911.10092v1.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":"smart-predict-and-optimize-for-hard","repo_url":"https://github.com/JayMan91/aaai_predit_then_optimize","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":0,"framework":"pytorch","reach":{"status":"ok","spdx":"MIT"}}],"tasks":[{"task_slug":"combinatorial-optimization","task_name":"Combinatorial Optimization"},{"task_slug":"scheduling","task_name":"Scheduling"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=1911.10092","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"1911.10092"}},"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/JayMan91/aaai_predit_then_optimize","reach":{"status":"ok","spdx":"MIT"}}],"summary":{"unverified":13},"by_repo_kind":{"official":{"samples":13,"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":"2a98612374aa111c","entry":"ICON_scheduling","repo":"JayMan91/aaai_predit_then_optimize","repo_kind":"official","path":"EnergyCost/ICON.py","file_url":"https://github.com/JayMan91/aaai_predit_then_optimize/blob/HEAD/EnergyCost/ICON.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":"2a98612374aa111c"}},{"code_sha256_prefix":"61a4f21373e9ada4","entry":"ICON_scheduling_relaxation","repo":"JayMan91/aaai_predit_then_optimize","repo_kind":"official","path":"EnergyCost/ICON.py","file_url":"https://github.com/JayMan91/aaai_predit_then_optimize/blob/HEAD/EnergyCost/ICON.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":"61a4f21373e9ada4"}},{"code_sha256_prefix":"ee1c6a3a00be8bc6","entry":"data_reading","repo":"JayMan91/aaai_predit_then_optimize","repo_kind":"official","path":"EnergyCost/ICON.py","file_url":"https://github.com/JayMan91/aaai_predit_then_optimize/blob/HEAD/EnergyCost/ICON.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":"ee1c6a3a00be8bc6"}},{"code_sha256_prefix":"2dd8ceebf2a365ec","entry":"get_data","repo":"JayMan91/aaai_predit_then_optimize","repo_kind":"official","path":"sgd_learner.py","file_url":"https://github.com/JayMan91/aaai_predit_then_optimize/blob/HEAD/sgd_learner.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":"2dd8ceebf2a365ec"}},{"code_sha256_prefix":"3ee7504e77ee94cb","entry":"get_energy","repo":"JayMan91/aaai_predit_then_optimize","repo_kind":"official","path":"get_energy.py","file_url":"https://github.com/JayMan91/aaai_predit_then_optimize/blob/HEAD/get_energy.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":"3ee7504e77ee94cb"}},{"code_sha256_prefix":"8234b742ce34e9d8","entry":"get_energy_grouped","repo":"JayMan91/aaai_predit_then_optimize","repo_kind":"official","path":"get_energy.py","file_url":"https://github.com/JayMan91/aaai_predit_then_optimize/blob/HEAD/get_energy.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":"8234b742ce34e9d8"}},{"code_sha256_prefix":"0d9b18d5fefc09ef","entry":"get_energy_pandas","repo":"JayMan91/aaai_predit_then_optimize","repo_kind":"official","path":"get_energy.py","file_url":"https://github.com/JayMan91/aaai_predit_then_optimize/blob/HEAD/get_energy.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":"0d9b18d5fefc09ef"}},{"code_sha256_prefix":"1592e9edaea942e4","entry":"get_kn_indicators","repo":"JayMan91/aaai_predit_then_optimize","repo_kind":"official","path":"sgd_learner.py","file_url":"https://github.com/JayMan91/aaai_predit_then_optimize/blob/HEAD/sgd_learner.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":"1592e9edaea942e4"}},{"code_sha256_prefix":"aa97787abf6034a7","entry":"get_profits","repo":"JayMan91/aaai_predit_then_optimize","repo_kind":"official","path":"EnergyCost/energy_cost.py","file_url":"https://github.com/JayMan91/aaai_predit_then_optimize/blob/HEAD/EnergyCost/energy_cost.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":"aa97787abf6034a7"}},{"code_sha256_prefix":"95c25164471c4610","entry":"shortest_path","repo":"JayMan91/aaai_predit_then_optimize","repo_kind":"official","path":"sgd_learner.py","file_url":"https://github.com/JayMan91/aaai_predit_then_optimize/blob/HEAD/sgd_learner.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":"95c25164471c4610"}},{"code_sha256_prefix":"ba3145cb5e3d8213","entry":"solveKnapsackGreedily","repo":"JayMan91/aaai_predit_then_optimize","repo_kind":"official","path":"KnapsackSolving.py","file_url":"https://github.com/JayMan91/aaai_predit_then_optimize/blob/HEAD/KnapsackSolving.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":"ba3145cb5e3d8213"}},{"code_sha256_prefix":"6788adf385135210","entry":"solveKnapsackProblem","repo":"JayMan91/aaai_predit_then_optimize","repo_kind":"official","path":"KnapsackSolving.py","file_url":"https://github.com/JayMan91/aaai_predit_then_optimize/blob/HEAD/KnapsackSolving.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":"6788adf385135210"}},{"code_sha256_prefix":"964934cb816c76c8","entry":"solveKnapsackProblemRelaxation","repo":"JayMan91/aaai_predit_then_optimize","repo_kind":"official","path":"KnapsackSolving.py","file_url":"https://github.com/JayMan91/aaai_predit_then_optimize/blob/HEAD/KnapsackSolving.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":"964934cb816c76c8"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}