-
-
Notifications
You must be signed in to change notification settings - Fork 491
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
MixedIntegerLinearProgram/HybridBackend: Reconstruct exact rational/algebraic basic solution #18735
Comments
comment:2
Is |
comment:3
On the other hand, a solver-independent way to get an optimal dual solution is very much welcome, as this is lacking currently, and often needed. |
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
comment:5
Replying to @dimpase:
Dima, ppl's implementation of the double description method is very good, but its LP solver is not suitable for problems of even moderate sizes. |
comment:6
Replying to @mkoeppe:
Would you mind providing an example of PPL choking on an LP doable in exact arithmetic by another solver? We use PPL's LP solver in |
comment:7
Replying to @dimpase:
In our experiments here, we don't actually have numerical difficulties with floating-point based solvers; we just want to be sure that we have an exact optimal solution. With #18764 (glp_exact; please review) we have now run some tests to compare performance:
As you can see, PPL is much slower than pure glp_exact, and orders of magnitudes slower than glp_simplex followed by glp_exact. However, currently when we try to reconstruct the solution from the combinatorial basis information, Sage's super slow matrix functions over the rationals get us back to roughly the same order of magnitude as PPL. It would be interesting to know how the solvers perform on the kind of LPs that you have in mind. |
comment:8
Replying to @mkoeppe:
LPs I get would be not possible to even enter into a solver without long integers/rationals.
more explicitly, you can do
constrains of |
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
Branch: u/mkoeppe/hybrid_backend |
Commit: |
This comment has been minimized.
This comment has been minimized.
Last 10 new commits:
|
Branch pushed to git repo; I updated commit sha1. This was a forced push. New commits:
|
Changed branch from u/mkoeppe/hybrid_backend to u/yzh/hybrid_backend |
Branch pushed to git repo; I updated commit sha1. New commits:
|
comment:35
Replying to @mkoeppe:
Do you mean
True. The current implementation enables what the first paragraph of this ticket states, by using |
comment:36
Replying to @yuan-zhou:
Yes, that's what I meant. |
comment:37
Setting new milestone based on a cursory review of ticket status, priority, and last modification date. |
Branch pushed to git repo; I updated commit sha1. New commits:
|
comment:39
Setting a new milestone for this ticket based on a cursory review. |
comment:40
please rebase |
Branch pushed to git repo; I updated commit sha1. This was a forced push. Last 10 new commits:
|
Branch pushed to git repo; I updated commit sha1. New commits:
|
Branch pushed to git repo; I updated commit sha1. New commits:
|
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:InteractiveLPBackend
fits the bill - from MixedIntegerLinearProgram: New backend using InteractiveLPProblem #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.
Depends on #18685
Depends on #18688
Depends on #20296
CC: @yuan-zhou @nathanncohen @dimpase
Component: numerical
Author: Matthias Koeppe, Yuan Zhou
Branch/Commit: u/yzh/hybrid_backend @
50773ff
Issue created by migration from https://trac.sagemath.org/ticket/18735
The text was updated successfully, but these errors were encountered: