You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When Sage's MixedIntegerLinearProgram is used for solving an LP, one frequently needs to access further information about the current basis (often, the optimal basis after solving the LP), not just the numerical values of the solution; in particular, the combinatorial information: which variables are basic, nonbasic at-lower, nonbasic at-upper.
#18685 adds the necessary backend functions for the GLPK backend. #18763 adds the necessary backend functions for the COIN (CBC/CLP) backend.
This kind of information is available in most (simplex method based) solvers. (Exceptions: ppl does not seem to have a public interface to anything simplex tableau related.)
The Sage interface should, of course, be designed to work consistently across all solvers. There are some subtleties here -- not all solvers mean the same thing with "at-lower" for cases such as ranged constraints. Best to look at a source that has already sorted it all out: In the COIN open solver interface, https://projects.coin-or.org/Osi/browser/trunk/Osi/src?order=name the function is called getBasisStatus
And then there's setBasisStatus, of course. One needs this function if one wants to implement LP-based branch and bound with warmstarting.
There are other important basis-related functions: getBInvARow, getBInvRow, getBInvACol, getBInvCol -- but that's for another ticket -- see #18733.
See also the methods is_variable_basic, is_slack_variable_basic, is_variable_nonbasic_at_lower_bound, is_slack_variable_nonbasic_at_lower_bound of GenericBackend.
When Sage's
MixedIntegerLinearProgram
is used for solving an LP, one frequently needs to access further information about the current basis (often, the optimal basis after solving the LP), not just the numerical values of the solution; in particular, the combinatorial information: which variables are basic, nonbasic at-lower, nonbasic at-upper.#18685 adds the necessary backend functions for the GLPK backend.
#18763 adds the necessary backend functions for the COIN (CBC/CLP) backend.
This kind of information is available in most (simplex method based) solvers. (Exceptions: ppl does not seem to have a public interface to anything simplex tableau related.)
The Sage interface should, of course, be designed to work consistently across all solvers. There are some subtleties here -- not all solvers mean the same thing with "at-lower" for cases such as ranged constraints. Best to look at a source that has already sorted it all out: In the COIN open solver interface, https://projects.coin-or.org/Osi/browser/trunk/Osi/src?order=name the function is called getBasisStatus
And then there's setBasisStatus, of course. One needs this function if one wants to implement LP-based branch and bound with warmstarting.
There are other important basis-related functions: getBInvARow, getBInvRow, getBInvACol, getBInvCol -- but that's for another ticket -- see #18733.
See also #18804 (LPBackendDictionary).
See also the methods
is_variable_basic
,is_slack_variable_basic
,is_variable_nonbasic_at_lower_bound
,is_slack_variable_nonbasic_at_lower_bound
ofGenericBackend
.Depends on #18685
Depends on #18763
CC: @yuan-zhou @nathanncohen
Component: numerical
Issue created by migration from https://trac.sagemath.org/ticket/18688
The text was updated successfully, but these errors were encountered: