Decision Optimization

Decision Optimization

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


#Analytics
#DecisionOptimization
#DecisionOptimization
 View Only
Expand all | Collapse all

Repeated calls to mipopt() without changing problem object

  • 1.  Repeated calls to mipopt() without changing problem object

    Posted 09/12/15 02:19 AM

    Originally posted by: AnirudhSubramanyam


    Hi,

     

    I solve an MILP using cut and lazy callbacks. After finishing the solve, I change some of the separation routines that the callbacks use so that a different set of cuts/lazy constraints are now valid and applicable for the base lp object. Note that I do not change any coefficients, variables and/or constraints in the initial lp object. However, when I attempt to resolve, the second optimization spits out the exact same solution as the first one without even performing any kind of search. If I use the modified separation to begin with, then I get the solution that I expected (i.e., different from the solution corresponding to the original separation routines).

     

    Is there a CPLEX function which allows me to "free" the tree information without having to call CPXXfreeprob() [as I would then have to re-create the "base MILP" model which I do not want to do, as model building consumes time] or CPXXcloneprob() [as I lose MIPstart information from the previous solves]?


    #CPLEXOptimizers
    #DecisionOptimization


  • 2.  Re: Repeated calls to mipopt() without changing problem object

    Posted 09/13/15 10:15 PM

    Originally posted by: Laci Ladanyi


    You are correct, cplex should reoptimize, but it does not :-(. I have registered a bug report. In the meantime a workaround is to use CPXXcloneprob(), but extract the mipstarts from the original MIP using CPXXgetnummipstarts() and CPXXgetmipstarts(), and then feed them to the cloned MIP using CPXXaddmipstarts().


    #CPLEXOptimizers
    #DecisionOptimization


  • 3.  Re: Repeated calls to mipopt() without changing problem object

    Posted 09/14/15 09:57 PM

    Originally posted by: AnirudhSubramanyam


    Thanks for the reply.

    I tried implementing what you suggested in the following way. I have (original MILP, original separation); I call CPXXcloneprob() and I change my separation routine (via cbhandle information) without changing anything in the problem object and get (new MILP, new separation). I transfer my MIP starts from (original MILP, original separation) to (new MILP, new separation). I optimize (new MILP, new separation). I would now like to transfer all solution information from (new MILP, new separation) to (original MILP, original separation) and repeat the whole procedure in a loop. However, when I do this, the MIP starts from the original MILP are accepted in the new MILP without being filtered for feasibility through the new separation routine.

    Is this also possibly a bug or is it intentional?

    I finally implemented it using my own data structures for keeping track of new solutions found and transferring them to the cloned MILP. However, I have other applications where this is not always straightforward to do.


    #CPLEXOptimizers
    #DecisionOptimization