From fb8dc45265eb388cef20a63f8c0d8fb628e2c0e7 Mon Sep 17 00:00:00 2001 From: jajhall Date: Thu, 2 May 2024 11:06:56 +0100 Subject: [PATCH] Added setBasis to highspy, both for logical basis and specific basis --- examples/call_highs_from_python.py | 24 +++++++++++++++++++++++- src/highs_bindings.cpp | 10 ++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/examples/call_highs_from_python.py b/examples/call_highs_from_python.py index aa624f97d5..5de97e9b15 100644 --- a/examples/call_highs_from_python.py +++ b/examples/call_highs_from_python.py @@ -197,6 +197,28 @@ run_time = h.getRunTime() print("Total HiGHS run time is ", run_time) +# Get an optimal basis + +# Clear so that incumbent model is empty +h.clear() +print("25fv47 as HighsModel") + +h.readModel("check/instances/25fv47.mps") + +h.run() +simplex_iteration_count = h.getInfo().simplex_iteration_count +print("From initial basis, simplex iteration count =", simplex_iteration_count) +basis = h.getBasis() +h.clearSolver() + +h.setBasis(basis) +h.run() +simplex_iteration_count = h.getInfo().simplex_iteration_count +print("From optimal basis, simplex iteration count =", simplex_iteration_count) +status = h.setBasis() +h.run() +simplex_iteration_count = h.getInfo().simplex_iteration_count +print("From logical basis, simplex iteration count =", simplex_iteration_count) # Define a callback @@ -316,4 +338,4 @@ def user_interrupt_callback( print("...") for icol in range(num_var-2, num_var): print(icol, solution.col_value[icol], - h.basisStatusToString(basis.col_status[icol])) \ No newline at end of file + h.basisStatusToString(basis.col_status[icol])) diff --git a/src/highs_bindings.cpp b/src/highs_bindings.cpp index 85cd1728f6..11ecb903f3 100644 --- a/src/highs_bindings.cpp +++ b/src/highs_bindings.cpp @@ -285,6 +285,14 @@ HighsStatus highs_deleteRows(Highs* h, HighsInt num_set_entries, std::vectordeleteRows(num_set_entries, indices.data()); } +HighsStatus highs_setBasis(Highs* h, HighsBasis& basis) { + return h->setBasis(basis); +} + +HighsStatus highs_setLogicalBasis(Highs* h) { + return h->setBasis(); +} + std::tuple highs_getOptionValue( Highs* h, const std::string& option) { HighsOptionType option_type; @@ -927,6 +935,8 @@ PYBIND11_MODULE(_core, m) { .def("deleteVars", &highs_deleteCols) // alias .def("deleteRows", &highs_deleteRows) .def("setSolution", &Highs::setSolution) + .def("setBasis", &highs_setBasis) + .def("setBasis", &highs_setLogicalBasis) .def("modelStatusToString", &Highs::modelStatusToString) .def("solutionStatusToString", &Highs::solutionStatusToString) .def("basisStatusToString", &Highs::basisStatusToString)