Decision Optimization

Decision Optimization

Delivers prescriptive analytics capabilities and decision intelligence to improve decision-making.

 View Only
Expand all | Collapse all

Replace an incumbent integer solution by a solution with a worse objective

  • 1.  Replace an incumbent integer solution by a solution with a worse objective

    Posted Wed October 10, 2012 09:08 AM

    Originally posted by: SystemAdmin


    Hi,

    My question is the following :
    We have a first problem, lets called him A, with a given objective and an other sub-problem B more constrained but with a different objective. When the CPLEX B&C algo finds a new incumbent integer solution to the initial problem A, we use a callback to get that solution and modify it to solve problem B. This modified solution might have a worse objective value for the problem A than the original one received in the callback. Is it possible to tell CPLEX to reject the original one and the objective boundaries he might have set and inject our own modified solution back to CPLEX ?

    Thanks,

    FX Mouthuy
    #CPLEXOptimizers
    #DecisionOptimization


  • 2.  Re: Replace an incumbent integer solution by a solution with a worse objective

    Posted Wed October 10, 2012 12:18 PM

    Originally posted by: LeandroCC


    Using AddMIPStart would certainly make CPLEX aware of the worse solution, but it wouldn't use it.

    Maybe with setBasis?

    Or (from the top of my head), you could add a constraint stating that the obj has to be different from the value you want to scrap?
    #CPLEXOptimizers
    #DecisionOptimization


  • 3.  Re: Replace an incumbent integer solution by a solution with a worse objective

    Posted Wed October 10, 2012 06:39 PM

    Originally posted by: SystemAdmin


    Let's call the proposed incumbent solution to A that you intercept X, the modified version X', and the incumbent (if any) in effect at the time that X is discovered Y. If X' is worse than X but better than Y, you can use the reject() method in an incumbent callback to reject X and the setSolution method in a heuristic callback to insert X'. (If X' is worse than Y, CPLEX will ignore it, so no value to trying to insert it.) If the integer variables are all binary, you could replace the incumbent callback with a lazy constraint callback that adds a cut requiring at least one binary variable to be different from its value in X (which would effectively reject it). Rejection via cut is not very practical if X contains general integer variables.

    The virtue of the lazy constraint approach, if all integer variables are binary, is that you avoid the need for a third callback. If you use the incumbent callback to reject X, I think you may also need a branch callback to tell CPLEX what to do in the event that X was the solution to the node LP relaxation.

    Paul

    Mathematicians are like Frenchmen: whenever you say something to them, they translate it into their own language, and at once it is something entirely different. (Goethe)
    #CPLEXOptimizers
    #DecisionOptimization