|Available Options:||true, false|
Setting this to true will force the engine to exit the moment a feasible solution is found, even if it’s a very bad one.
This option can be extremely useful if you don’t want to grow old while waiting for the engine to solve a problem to global optimality. Use cases include:
- Getting a quick idea of what feasible values your objective can take
- Taking advantage of the symbolic preprocessing to potentially find a much better feasible solution than a local MINLP solver would give you. Yes you pay for the preprocessing, and yes that sometimes makes it slower than local MINLP solvers, but, you’ll find that the success rate and solution quality are on average far superior to local MINLP solvers.
- You want a good solution but you don’t want to computationally pay for branch-and-bound, which is by far the most expensive part of the solving process.
- Your problem is so humongous and difficult that you know branch-and-bound is gg, even on HPC. This option will allow you to actually get a feasible solution where other solvers would simply fail or get stuck forever.
Remember that there’s no free lunch – what you sacrifice here is (potentially significant) solution quality for (potentially a ton of) speed.
If you get a solution using this option, there are a couple of things you can do with it:
- Warm-start the engine with the solution you just found and run branch-and-bound, maybe with a timeout. This will force the engine to find a better solution, or prove that no better solution exists.
- Simply use what you found if it’s good enough for your problem.
If you don’t get a solution, there are a few things you can do as well:
- Try turning
LOCAL_SEARCHon. It’s a much faster engine mode and might work for your problem.
- Try relaxing tolerances for bound, integrality, and constraint violation.
- If your problem is mixed-integer, increase the working limit (
MILP_LB_TIMEOUT) for solving MILP lower bounding problems.
- Double-check your model for booboos.