-
Notifications
You must be signed in to change notification settings - Fork 38
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
[RFC] New Status Mechanism #156
Comments
I am also a fan of revising how solver statuses are treated in MPB. Having a separate status field for the solver algorithm vs the mathematical problem makes sense to me. Regarding this proposal, would Success mean the algorithm terminated as expected? This would be synonyms with properties like: converged (in the cases like LP and IPM), search completed in MIP, and proofs of infeasibility in LP/Convex/MIP? How would we distinguish between converging to a point of local infeasibly (e.g. in IPM solvers) and providing a proof of global infeasibly (e.g. in LP / convex / IP solvers)? A common status I see in solvers is some kind of numerical difficulties, maybe adding an explicit name for this (e.g. NumericalError) would be helpful. It is worth noting that the cases of Success, Stall, UserLimit, NumericalError all refer to properties of the algorithm/software, while Out Of Space has a hardware aspect. Is it worth have a separate class for hardware issues? Being a nitpick, I would recommend Out Of Space be called Out Of Memory (OOM), this name is widely recognized in other CS disciplines. |
I'll just comment on a small part of this for the moment. One thing that would be very useful to have is a way to ask the solver if the primal and dual solutions should be returned to the user (and if so, what they mean). In jump-dev/JuMP.jl#938 for example the issue is that Ipopt determines the problem is infeasible but it's still desired to return something as a primal solution. In JuMP, I'd like to be able to do something like
|
@blegat regarding local infeasibility. Many nonlinear solvers are based around the KKT conditions, which are local optimality conditions. In the case of non-convex problems, it is possible that the KKT conditions are satisfied at a point that is infeasible, and because these conditions are local, this does not provide a proof of infeasibility for the whole problem. In contrast to MIP/Convex solvers, which can produce a proof of problem infeasibility. |
@ccoffrin That is a good question. I would suggest that |
This sounds responsible to me. In my mind, |
I'd also like to expand on How does |
Re @erling-d-andersen, can you comment on why solvers should have |
Another old related issue: |
To me NumericalError means a numerical problem occurred. Stall means it
started iterating and for some reason could not make progress in some
iteration.
You can lump the two into in one if you like.
2017-02-14 21:02 GMT+01:00 Carleton Coffrin <notifications@github.com>:
… Re Stall vs NumericalError, it is not clear to me why there is a
distinction here, but I have noticed this behavior in Gurobi's QCQP solver.
Some times it gives a clear status of NumericalError other times it
converges to what it calls a SubOptimal solution. This SubOptimal
termination seems to be consistent with the Stall ideal discussed in
MOSEK/Mosek.jl#101 <MOSEK/Mosek.jl#101>.
@erling-d-andersen <https://github.com/erling-d-andersen>, can you
comment on why solvers should have Stall and NumericalError status
instead of just NumericalError?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
<#156 (comment)>,
or mute the thread
<https://github.com/notifications/unsubscribe-auth/AJwCcQTKuZFPVSkg27ja7D5ojyaYOhvhks5rcghigaJpZM4L9loR>
.
|
It makes sense to keep |
Closing in favor of #164 |
It seems that MPB statuses needs to be reworked. See e.g.:
stat !=: Optimal
nlp problems jump-dev/JuMP.jl#938Following @erling-d-andersen's comment, it would help to separate the statuses in
getsolution
getdual
I do not claim to have a perfect solution for a new status mechanism, I am just hoping to open the discussion with a reasonable start.
Optimizer status
Afther calling
optimize!
,status
would return:Questions:
abstract AbstractOptimizerStatus
? If it is a subtype thenUserLimit
could contain a string message giving more precision that would be printed if we callshow
on it orUserLimit
could be an abstract type that is subtyped by each solver. What would you prefer ?Problem Status
We could split the primal (resp. dual) status in 2:
In view of this, we could define:
isprimalfeasible(m)
:true
if it is sure that the primal is feasible,false
if it is sure it is infeasible,knowsprimalfeasibility(m)
:true
:isprimalfeasible
would returnfalse
:isprimalfeasible
would throw an errorand likewise
isprimalbounded
,knowsprimalboundedness
,isdualfeasible
;knowsdualfeasible
,isdualbounded
,knowsdualboundedness
.These functions would only reflect the knowledge acquired by the last
optimize!
called !Questions:
problemstatus
which would return a object of typeProblemStatus
which can answer to the same 8 functionis...
/knows...
.Solution Status
primalsolutionavailable(m)
the solver allows to retrieve values for primal variables, i.e.getsolution
would not throw an error.dualsolutionavailable
the solver allows to retrieve values for variable and constraint dual variables, i.e.getdual
, ... would not throw an error.issolutionfeasible(m)
(resp.issolutionoptimal(m)
) wouldtrue
if we are sure that the solution that would be returned bygetsolution(m)
is feasible (resp. optimal), otherwise, it returnsfalse
.false
would not mean that we are sure that it is not feasible (resp. not optimal), it would just mean that we do not know whether it is optimal/feasible.Questions:
solutionstatus(m)
that would returnSolutionStatus
which could reply toissolutionfeasible
andissolutionoptimal
.The text was updated successfully, but these errors were encountered: