I am experimenting with a timber model. These models have typically long horizons, which can cause some problems with some solvers. As the model has a nonlinear objective I tried a few NLP solvers:
Solver | Objective (maximize) |
Conopt | 104599.7740 |
Minos | 53746.0234 |
Snopt | 6651.1413 |
This looks pretty bad. Fortunately, a simple option setting: SCALE OPTION = 0, can make things much better:
Solver | Objective (maximize) |
Minos (no scaling) | 104599.7740 |
Snopt (no scaling) | 104599.6879 |
Intuitively this makes some sense: MINOS and SNOPT scale by default only the linear variables. This strategy is actually not without merit: the Jacobian elements for these nonlinear variables can change quite a lot during the optimization, so scaling based on the initial Jacobian elements may not be very wise. However, in some cases making this distinction between linear and nonlinear variables can make things worse. In this case it is better not to scale at all.
I was first tinkering with the optimality tolerance, as I have seen with other forestry models (LP and NLP) that for these ridiculously long time horizons, tightening the optimality tolerance can help getting better solutions. For this model that was not the case.
I'd be interested to see what your results with IPOPT are. I solve large-scale problems with long horizons too.
ReplyDeleteIPOPT gets a solution of 104599.7742 with default settings.
ReplyDelete