I have solved a simulation problem with AMPL (objective function = 1) with
- presolve = on, CONOPT
- presolve = off, CONOPT
- presolve = on, IPOPT
- presolve = off, IPOPT
In three cases, I obtain a solution that makes little sense to me. The combination with presolve off and CONOPT returns a solution I can understand.
Of course, it is possible that solvers return different solutions, but I was surprised to see that CONOPT returns different solutions depending on the presolve setting.
My question is: Is such a behavior expected? I have to point out that the optimization problem seems to be badly conditioned - just in case this might influence the observed behavior.
Should you need more information, I am happy to provide it.
CONOPT and Ipopt only guarantee to find a locally optimal solution, which is better than any nearby solution, but may not be the best solution overall. Changing the solver or changing the problem (such as between the presolved and un-presolved version) can cause a different local solution to be found. Thus the behavior that you’re seeing is not surprising, even when the problem is well-conditioned and all of the runs report finding an optimal solution.
For an ill-conditioned problem, it can happen that some wrong solutions – not locally optimal – could be returned. However, it is also possible that the solution that “makes little sense” is still locally optimal. You might be able to add constraints that cut off the part of the feasible region where the wrong solution is the locally optimal one. Also, setting good (though not optimal) initial values of the variables can help to steer the solvers toward the meaningful solution that you want to get.
(There’s more discussion in Section 18.4 Pitfalls of nonlinear programming in the AMPL book.)