#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.

Reply via email to