Originally posted by: SystemAdmin
If I understand correctly, you have a
lower bound B for your minimization problem? In other words, for any feasible solution s you have
B <= obj(s)
where obj(s) is the objective function value of solution s. Is that correct?
Setting the upper cutoff to B tells CPLEX that B is an
upper bound for the objective function value of the optimal solution. This allows CPLEX to discard any node that has an objective function value larger than B.
If a solution with objective function value B exists then CPLEX will eventually return this solution. If no such solution exists then CPLEX will eventually return and claim the problem to be infeasible.
When CPLEX finds a solution with objective function value B then it will not necessarily stop immediately. Up to this point it has only proven that the best objective function value cannot be larger than B. It has no proof that there is no solution with a value
smaller than B. Such a proof requires to raise the dual bound (the "best node" column in the interactive output) above B. That CPLEX has no proof for optimality yet is indicated by a non-zero gap. Do you observe a non-zero gap when CPLEX finds the solution with objective function value B? Maybe you can post your CPLEX output here?
The lower cutoff parameter can only be used for maximization problems.
If you have your lower bound B and want to stop CPLEX as soon as an objective function with value B is found then there are two ways:
-
Add a constraint 'objective function >= B' to the model. This is usually not recommended as it may deteriorate performance but you may still try it.
-
Use a callback to monitor the solutions that CPLEX finds. From the callback you can instruct CPLEX to stop as soon as you see a solution that is good enough.
#CPLEXOptimizers#DecisionOptimization