#18735: MixedIntegerLinearProgram/HybridBackend: Reconstruct exact
rational/algebraic basic solution
-------------------------------------+-------------------------------------
Reporter: mkoeppe | Owner:
Type: enhancement | Status: new
Priority: major | Milestone: sage-6.8
Component: numerical | Resolution:
Keywords: lp | Merged in:
Authors: | Reviewers:
Report Upstream: N/A | Work issues:
Branch: | Commit:
u/mkoeppe/hybrid_backend | 0b8b78af1c9efbc118513cfde612eccb0bf735a6
Dependencies: #18685, #18688, | Stopgaps:
#20296 |
-------------------------------------+-------------------------------------
Changes (by mkoeppe):
* commit: => 0b8b78af1c9efbc118513cfde612eccb0bf735a6
Old description:
> Sometimes one can use a fast numerical LP solver to solve a problem to
> "optimality",
> then reconstruct the primal and dual solution in rational arithmetic (or
> over whatever base_ring was used...) and in this way prove that this
> basis is indeed optimal.
> `MixedIntegerLinearProgram` should support this mode of operation.
>
> The current branch, on top of #20296, attempts to do this by implementing
> a `HybridBackend`, which delegates to two backends:
> - a fast, possibly inexact backend (Gurobi or GLPK or even GLPK with
> glp_exact -- see #18764)
> - a slow, exact one that can set the simplex basis (only
> `InteractiveLPBackend` fits the bill - from #20296)
>
> #18685 provides the necessary basis-status functions (for the GLPK
> backend).
> #18688 provides a solver-independent interface to these functions.
> #18804 exposes basis status via backend dictionaries.
New description:
Sometimes one can use a fast numerical LP solver to solve a problem to
"optimality",
then reconstruct the primal and dual solution in rational arithmetic (or
over whatever base_ring was used...) and in this way prove that this basis
is indeed optimal.
`MixedIntegerLinearProgram` should support this mode of operation.
The current branch, on top of #20296, attempts to do this by implementing
a `HybridBackend`, which delegates to two backends:
- a fast, possibly inexact backend (Gurobi or GLPK or even GLPK with
glp_exact -- see #18764)
- a slow, exact one that can set the simplex basis (only
`InteractiveLPBackend` fits the bill - from #20296)
Ideally, in pure LP mode, both backends would support the basis-status
functions that can transplant the (hopefully) optimal (hopefully-)basis
from the inexact LP to the exact LP.
If the inexact LP cannot provide a basis (because its "basis" is not a
basis due to numerics, or because basis-status functions are not
available), one could at least try to make use of the numerical solution
vector and try to reconstruct a basis, like in interior-point-to-simplex
crossover (a classical paper:
http://www.caam.rice.edu/caam/trs/91/TR91-32.pdf)
In MIP mode, could at least try to set the cleaned-up numerical solution
vector as a known solution, to speed up branch-and-cut in the exact
solver.
Sounds like a big ticket; we'll do this step by step.
#18685 provides the necessary basis-status functions (for the GLPK
backend).
#18688 provides a solver-independent interface to these functions.
#18804 exposes basis status via backend dictionaries.
--
Comment:
Last 10 new commits:
||[http://git.sagemath.org/sage.git/commit/?id=e2319b5c5e172764a55622aac8651ca72f5fc30b
e2319b5]||{{{InteractiveLPBackend.get_variable_value: Guard against
standard-form transformations}}}||
||[http://git.sagemath.org/sage.git/commit/?id=e27f2975ba27666c9dd42ac0e3e5a7779f45b2ee
e27f297]||{{{InteractiveLPBackend: Make base_ring an init argument}}}||
||[http://git.sagemath.org/sage.git/commit/?id=5b0954f490d370c3dde5f02b0051991a42ad9912
5b0954f]||{{{InteractiveLPBackend._variable_type_from_bounds: Add
doctests}}}||
||[http://git.sagemath.org/sage.git/commit/?id=c4b93aa570325967abd43f3509d284d3d5d1b0ce
c4b93aa]||{{{InteractiveLPBackend: Fix old-style raise statements}}}||
||[http://git.sagemath.org/sage.git/commit/?id=b0a3c1c9c0f6c6186dfe4697745c892aed8b88b6
b0a3c1c]||{{{GenericBackend: Add a missing '# optional -
Nonexistent_LP_solver'}}}||
||[http://git.sagemath.org/sage.git/commit/?id=3770be0a9fd2ec3e37cca50a0d05db2a50be7959
3770be0]||{{{default_mip_solver: Handle 'InteractiveLP'}}}||
||[http://git.sagemath.org/sage.git/commit/?id=d91c776cb17733719acb7c174f3d452d766b92e6
d91c776]||{{{default_mip_solver, get_solver: Mention InteractiveLP in the
documentation}}}||
||[http://git.sagemath.org/sage.git/commit/?id=eaede28e3e42195f7a0c8687e524c4c2d076f563
eaede28]||{{{get_solver: Add optional base_ring argument}}}||
||[http://git.sagemath.org/sage.git/commit/?id=184249db87c5db29fe51fa54230bcc2cea8c4308
184249d]||{{{MixedIntegerLinearProgram: New base_ring init argument}}}||
||[http://git.sagemath.org/sage.git/commit/?id=0b8b78af1c9efbc118513cfde612eccb0bf735a6
0b8b78a]||{{{HybridBackend: first draft}}}||
--
Ticket URL: <http://trac.sagemath.org/ticket/18735#comment:13>
Sage <http://www.sagemath.org>
Sage: Creating a Viable Open Source Alternative to Magma, Maple, Mathematica,
and MATLAB
--
You received this message because you are subscribed to the Google Groups
"sage-trac" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sage-trac.
For more options, visit https://groups.google.com/d/optout.