Comments by Arne Drud:

- Q: Why does “worsening” of the objective happen? A: The objective that is reported in the iteration log is the ‘real’ objective function adjusted with a ‘Lagrangian’ term. The adjustment term is computed as the sum of the residuals of the constraints multiplied by the current estimate of their dual variables. This reported objective is an estimate of what the objective would be if the constraints were solve exactly and it is usually a better approximation than the ‘real’ objective. When the basis is changed, for example when a basic variable reaches a bound, the dual variables will change discontinuously and the adjustment term will also change, even though the primal x-variables do not change. This can give rise to a reported objective that is worse than the best seen so far.
- Q: Why does the solver stop even after better solutions where already found? A: CONOPT must make sure that the solution process does not cycle and come back to the same solution again and again. As long as the reported objective is improved the solution process cannot cycle. As mentioned above, the reported objective may move in the wrong direction during a basis change. If this happens, CONOPT starts to count ‘stalled iterations’ until the reported objective again is better than the best seen so far. While the iterations are stalled CONOPT will gradually decrease the feasibility tolerances to minimize the size of the adjustment term. If the number of stalled iterations exceed a limit defined by option Lfstal, CONOPT will stop, to make sure it will not cycle. The default value of option Lfstal is 100.
- Q: Is there a way to prevent the model to behave like that? A: You cannot prevent the ‘worsening’ of objective, but you may try two options: The worsening can be made smaller by using a smaller feasibility tolerance, option Rtnwma, and with a smaller worsening it is likely that a better reported objective will be seen more quickly, giving few stalled iterations. The disadvantage of this option is, that many iterations will have to work with a smaller feasibility tolerance than otherwise necessary and they will in general work harder to maintain feasibility and therefore become slower. An alternative is to increase option Lfstal so CONOPT will continue searching for more iterations; it will probably find a better reported solution and reset the stall count or it may reach a locally optimal solution while being stalled. Increasing Lfstall is usually the preferred option, but it cannot be used without judgement: some models with discontinuities do not have a solution where the reduced gradient is small and these models are only stopped by option Lfstall, so increasing Lfstal in general is bad for some models.