{"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/interior-point-solving-for-lp-based","title":"Interior Point Solving for LP-based prediction+optimisation","arxiv_id":"2010.13943","date":"2020-10-26","proceeding":"NeurIPS 2020 12","authors":["Jayanta Mandi","Tias Guns"],"abstract":"Solving optimization problems is the key to decision making in many real-life analytics applications. However, the coefficients of the optimization problems are often uncertain and dependent on external factors, such as future demand or energy or stock prices. Machine learning (ML) models, especially neural networks, are increasingly being used to estimate these coefficients in a data-driven way. Hence, end-to-end predict-and-optimize approaches, which consider how effective the predicted values are to solve the optimization problem, have received increasing attention. In case of integer linear programming problems, a popular approach to overcome their non-differentiabilty is to add a quadratic penalty term to the continuous relaxation, such that results from differentiating over quadratic programs can be used. Instead we investigate the use of the more principled logarithmic barrier term, as widely used in interior point solvers for linear programming. Specifically, instead of differentiating the KKT conditions, we consider the homogeneous self-dual formulation of the LP and we show the relation between the interior point step direction and corresponding gradients needed for learning. Finally our empirical experiments demonstrate our approach performs as good as if not better than the state-of-the-art QPTL (Quadratic Programming task loss) formulation of Wilder et al. and SPO approach of Elmachtoub and Grigas.","url_abs":"https://arxiv.org/abs/2010.13943v1","url_pdf":"https://arxiv.org/pdf/2010.13943v1.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":"interior-point-solving-for-lp-based","repo_url":"https://github.com/JayMan91/NeurIPSIntopt","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":0,"framework":"pytorch","reach":{"status":"ok","spdx":"MIT"}}],"tasks":[{"task_slug":"decision-making","task_name":"Decision Making"},{"task_slug":"prediction","task_name":"Prediction"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2010.13943","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2010.13943"}},"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/NeurIPSIntopt","reach":{"status":"ok","spdx":"MIT"}}],"summary":{"ran_draft_wrong":1,"unverified":25},"by_repo_kind":{"official":{"samples":26,"ran":1,"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":"612774f5e2ab3ddb","entry":"bger","repo":"JayMan91/NeurIPSIntopt","repo_kind":"official","path":"Interior/qpthlocal/util.py","file_url":"https://github.com/JayMan91/NeurIPSIntopt/blob/HEAD/Interior/qpthlocal/util.py","link_basis":"plan_row","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"612774f5e2ab3ddb"}},{"code_sha256_prefix":"2a98612374aa111c","entry":"ICON_scheduling","repo":"JayMan91/NeurIPSIntopt","repo_kind":"official","path":"EnergyCost/ICON.py","file_url":"https://github.com/JayMan91/NeurIPSIntopt/blob/HEAD/EnergyCost/ICON.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":"2a98612374aa111c"}},{"code_sha256_prefix":"61a4f21373e9ada4","entry":"ICON_scheduling_relaxation","repo":"JayMan91/NeurIPSIntopt","repo_kind":"official","path":"EnergyCost/ICON.py","file_url":"https://github.com/JayMan91/NeurIPSIntopt/blob/HEAD/EnergyCost/ICON.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":"61a4f21373e9ada4"}},{"code_sha256_prefix":"7c9f8f4e9aa1a197","entry":"ICON_solution","repo":"JayMan91/NeurIPSIntopt","repo_kind":"official","path":"Interior/intopt_energy_mlp.py","file_url":"https://github.com/JayMan91/NeurIPSIntopt/blob/HEAD/Interior/intopt_energy_mlp.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":"7c9f8f4e9aa1a197"}},{"code_sha256_prefix":"28a6baddaa406aa9","entry":"IPOfunc","repo":"JayMan91/NeurIPSIntopt","repo_kind":"official","path":"Interior/ip_model_alter.py","file_url":"https://github.com/JayMan91/NeurIPSIntopt/blob/HEAD/Interior/ip_model_alter.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":"28a6baddaa406aa9"}},{"code_sha256_prefix":"44ca414095aef85b","entry":"IPOfunc","repo":"JayMan91/NeurIPSIntopt","repo_kind":"official","path":"Interior/ip_model_whole.py","file_url":"https://github.com/JayMan91/NeurIPSIntopt/blob/HEAD/Interior/ip_model_whole.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":"44ca414095aef85b"}},{"code_sha256_prefix":"1a5b1471d8d531c6","entry":"bceloss","repo":"JayMan91/NeurIPSIntopt","repo_kind":"official","path":"shortespath/shortespath.py","file_url":"https://github.com/JayMan91/NeurIPSIntopt/blob/HEAD/shortespath/shortespath.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":"1a5b1471d8d531c6"}},{"code_sha256_prefix":"47cf07ccf06eeb7e","entry":"bg_update_dense","repo":"JayMan91/NeurIPSIntopt","repo_kind":"official","path":"Interior/remove_redundancy.py","file_url":"https://github.com/JayMan91/NeurIPSIntopt/blob/HEAD/Interior/remove_redundancy.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":"47cf07ccf06eeb7e"}},{"code_sha256_prefix":"ee1c6a3a00be8bc6","entry":"data_reading","repo":"JayMan91/NeurIPSIntopt","repo_kind":"official","path":"EnergyCost/ICON.py","file_url":"https://github.com/JayMan91/NeurIPSIntopt/blob/HEAD/EnergyCost/ICON.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":"ee1c6a3a00be8bc6"}},{"code_sha256_prefix":"6c1a6c7ee5b80feb","entry":"forward_gurobi_prebuilt","repo":"JayMan91/NeurIPSIntopt","repo_kind":"official","path":"Interior/qpthlocal/qp.py","file_url":"https://github.com/JayMan91/NeurIPSIntopt/blob/HEAD/Interior/qpthlocal/qp.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":"6c1a6c7ee5b80feb"}},{"code_sha256_prefix":"ecf413c2cedc33fa","entry":"forward_single_np_gurobi","repo":"JayMan91/NeurIPSIntopt","repo_kind":"official","path":"Interior/qpthlocal/qp.py","file_url":"https://github.com/JayMan91/NeurIPSIntopt/blob/HEAD/Interior/qpthlocal/qp.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":"ecf413c2cedc33fa"}},{"code_sha256_prefix":"2dd8ceebf2a365ec","entry":"get_data","repo":"JayMan91/NeurIPSIntopt","repo_kind":"official","path":"sgd_learner.py","file_url":"https://github.com/JayMan91/NeurIPSIntopt/blob/HEAD/sgd_learner.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":"2dd8ceebf2a365ec"}},{"code_sha256_prefix":"3ee7504e77ee94cb","entry":"get_energy","repo":"JayMan91/NeurIPSIntopt","repo_kind":"official","path":"get_energy.py","file_url":"https://github.com/JayMan91/NeurIPSIntopt/blob/HEAD/get_energy.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":"3ee7504e77ee94cb"}},{"code_sha256_prefix":"8234b742ce34e9d8","entry":"get_energy_grouped","repo":"JayMan91/NeurIPSIntopt","repo_kind":"official","path":"get_energy.py","file_url":"https://github.com/JayMan91/NeurIPSIntopt/blob/HEAD/get_energy.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":"8234b742ce34e9d8"}},{"code_sha256_prefix":"0d9b18d5fefc09ef","entry":"get_energy_pandas","repo":"JayMan91/NeurIPSIntopt","repo_kind":"official","path":"get_energy.py","file_url":"https://github.com/JayMan91/NeurIPSIntopt/blob/HEAD/get_energy.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":"0d9b18d5fefc09ef"}},{"code_sha256_prefix":"1592e9edaea942e4","entry":"get_kn_indicators","repo":"JayMan91/NeurIPSIntopt","repo_kind":"official","path":"sgd_learner.py","file_url":"https://github.com/JayMan91/NeurIPSIntopt/blob/HEAD/sgd_learner.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":"1592e9edaea942e4"}},{"code_sha256_prefix":"d0357e296f7fb5bd","entry":"get_sizes","repo":"JayMan91/NeurIPSIntopt","repo_kind":"official","path":"Interior/qpthlocal/util.py","file_url":"https://github.com/JayMan91/NeurIPSIntopt/blob/HEAD/Interior/qpthlocal/util.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":"d0357e296f7fb5bd"}},{"code_sha256_prefix":"335370cd393b0855","entry":"make_gurobi_model","repo":"JayMan91/NeurIPSIntopt","repo_kind":"official","path":"Interior/qpthlocal/qp.py","file_url":"https://github.com/JayMan91/NeurIPSIntopt/blob/HEAD/Interior/qpthlocal/qp.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":"335370cd393b0855"}},{"code_sha256_prefix":"0247da76f1cc067c","entry":"make_matrix_intopt","repo":"JayMan91/NeurIPSIntopt","repo_kind":"official","path":"Interior/intopt_energy_mlp.py","file_url":"https://github.com/JayMan91/NeurIPSIntopt/blob/HEAD/Interior/intopt_energy_mlp.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":"0247da76f1cc067c"}},{"code_sha256_prefix":"d2b638cc9c3d61d1","entry":"make_matrix_qp","repo":"JayMan91/NeurIPSIntopt","repo_kind":"official","path":"Interior/intopt_energy_mlp.py","file_url":"https://github.com/JayMan91/NeurIPSIntopt/blob/HEAD/Interior/intopt_energy_mlp.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":"d2b638cc9c3d61d1"}},{"code_sha256_prefix":"d1bb4eef9d9eb2ba","entry":"postsolve","repo":"JayMan91/NeurIPSIntopt","repo_kind":"official","path":"Interior/ip_model_alter.py","file_url":"https://github.com/JayMan91/NeurIPSIntopt/blob/HEAD/Interior/ip_model_alter.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":"d1bb4eef9d9eb2ba"}},{"code_sha256_prefix":"95c25164471c4610","entry":"shortest_path","repo":"JayMan91/NeurIPSIntopt","repo_kind":"official","path":"sgd_learner.py","file_url":"https://github.com/JayMan91/NeurIPSIntopt/blob/HEAD/sgd_learner.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":"95c25164471c4610"}},{"code_sha256_prefix":"ba3145cb5e3d8213","entry":"solveKnapsackGreedily","repo":"JayMan91/NeurIPSIntopt","repo_kind":"official","path":"KnapsackSolving.py","file_url":"https://github.com/JayMan91/NeurIPSIntopt/blob/HEAD/KnapsackSolving.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":"ba3145cb5e3d8213"}},{"code_sha256_prefix":"6788adf385135210","entry":"solveKnapsackProblem","repo":"JayMan91/NeurIPSIntopt","repo_kind":"official","path":"KnapsackSolving.py","file_url":"https://github.com/JayMan91/NeurIPSIntopt/blob/HEAD/KnapsackSolving.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":"6788adf385135210"}},{"code_sha256_prefix":"964934cb816c76c8","entry":"solveKnapsackProblemRelaxation","repo":"JayMan91/NeurIPSIntopt","repo_kind":"official","path":"KnapsackSolving.py","file_url":"https://github.com/JayMan91/NeurIPSIntopt/blob/HEAD/KnapsackSolving.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":"964934cb816c76c8"}},{"code_sha256_prefix":"b3e46dde438fad0b","entry":"to_np","repo":"JayMan91/NeurIPSIntopt","repo_kind":"official","path":"Interior/qpthlocal/util.py","file_url":"https://github.com/JayMan91/NeurIPSIntopt/blob/HEAD/Interior/qpthlocal/util.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":"b3e46dde438fad0b"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}