Hybrid time limit and custom multi-objective stops
AnsweredI'm currently solving a hierarchical MILP-MIQP problem in a Hybrid Model Predictive Control (HMPC) scheme. My idea would be to have the option of only imposing a time limit once a feasible solution is found in either of the priority levels with level-based time limit values.
I did try a custom callback, but there is no API method to tell the optimizer “enough optimality/time go to the next priority objective” and both performance and numeric stability are greatly decreased once emulating the propriety multi-objective hierarchy features Gurobi offers. For example, warm-starting the different levels is not so stable, and other issues appear. So at least introducing this proxy to “go to next objective” without the need to step out out of the propriety multi-objective optimization chain would be very beneficial.
Additionally, in an MPC-based problem, shifting the previous iteration solution to warm start the problem is a common approach to increase performance. Nonetheless, my feeling is that minimal, not significant, infeasibilities present in the starting solution make the whole proposition invalid, which thus makes the optimizer start from zero. Some kind of “shift previous solution” with a custom feasibility tolerance or a “soft-feasible” start would make Gurobi much easier to work with in applications involving repetitive solving, and I believe they would be quite easy to implement on your part. Another approach would be to take the starting “infeasible solution” and bring it to feasibility first, then use it as starting solution and optimize from there.
Thanks in advance.
-
Hi Pol,
there is no API method to tell the optimizer “enough optimality/time go to the next priority objective”
It sounds like you are describing the “cbstoponemultiobj” functions. E.g. for the Python API: Model.cbStopOneMultiObj ?
Nonetheless, my feeling is that minimal, not significant, infeasibilities present in the starting solution make the whole proposition invalid, which thus makes the optimizer start from zero.
It may also be that the presolved spaces are different between the different objectives, due to dual reductions. So the one solution for one objective cannot be directly improved upon in the next. But we do have several heuristics which run under the hood which try to take an infeasible solution and repair it to infeasibility.
- Riley
0
Please sign in to leave a comment.
Comments
1 comment