NLP solvers can fail for a number of reasons. One way to increase the reliability of a production run is to use a back-up solver in case the main solver fails. In GAMS primal and dual information is passed between SOLVE statements even if different solvers are used. This is actually very useful in a case I just observed.
Solver | Status |
mosek | Near Optimal |
ipopt | Solved to Acceptable Level |
mosek + ipopt | Optimal Solution Found |
Here both Mosek and IPOPT are getting into trouble and are not able to give us an optimal solution (in this case it was close, but I have seen cases where “near optimal” could be interpreted as “far away from optimal”). But the sequence: first Mosek, then IPOPT actually solves the problem to optimality.
We programmed this essentially as:
option nlp=mosek;
solve allocationmodel minimizing entropy using nlp;
if (allocationmodel.modelstat > 2, { not optimal }
option nlp=ipopt;
solve allocationmodel minimizing entropy using nlp;
);
No comments:
Post a Comment