Decision Optimization

Decision Optimization

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


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

how to implement Lagrangian relaxation based branch-and-bound using CPLEX?

  • 1.  how to implement Lagrangian relaxation based branch-and-bound using CPLEX?

    Posted 08/18/14 10:00 AM

    Originally posted by: lxysjtu


    Dear all,

    I want to implement a Lagrangian relaxation based on branch-and-bound algorithm. That is, at each node of the enumeration tree, I do not solve LP relaxation, but Lagrangian dual  problem to determine a good lower bound and also get upper bound.Also I have my own branching strategy. 

     

    Can I use CPLEX as a framework to implement my algorithm? In other words, CPLEX take charge of most of the job and I only control the solving of Lagrangian Dual and branching. 

     

    Is it possible to use solvecallback to solve a Lagrangian dual at each node and turn off solving the LP relaxation?  Is there any way to pass this new lower bound to CPLEX and ask CPLEX to control the search tree? 

    Is there any reference in the CPLEX manual?

     

    Would you please give me some suggestions? Thanks.

     

    Shaon


    #CPLEXOptimizers
    #DecisionOptimization


  • 2.  Re: how to implement Lagrangian relaxation based branch-and-bound using CPLEX?

    Posted 08/20/14 10:25 AM

    Originally posted by: AnirudhSubramanyam


    I don't believe you can use CPLEX to do what you want to do. I'm assuming you're solving a mixed integer linear program.

    According to the description given here: CPXXsetsolvecallbackfunc(), "CPLEX calls the solve callback before CPLEX solves the subproblem currently associated with the current node. The user can choose to solve the subproblem in the solve callback instead by setting the user action argument of the callback. The optimization that the user provides to solve the subproblem must provide a CPLEX solution. That is, the Callable Library routine CPXXgetstat/CPXgetstat must return a nonzero value."

    By referring to the subproblem as "the subproblem", it seems to me that CPLEX already knows what the subproblem is, i.e. when you call mipopt(), it is assumed that the subproblem is the LP relaxation of the problem. I don't believe CPLEX gives you any facility to set/change/define this subproblem anywhere. This is apparent because a user-defined lower bounding problem/subproblem would not be able to cause the routine CPXXgetstat to return a nonzero value.

    Moreover, even if you were able to inject a solution to CPLEX through the solve callback, the solution that you would be injecting would be an integer solution (because you're solving a Lagrangean Dual problem, which is an MILP). CPLEX would then automatically pass control to a lazyconstraint callback or an incumbent callback and not to the branch callback. Thus, you would never be able to effectuate your branching rule.

     

    That said, it's a fairly simple task to write your own branch-and-bound code and you can always use CPLEX to solve any LPs or MILPs that arise as subproblems in your main algorithm.

     

    Anirudh


    #CPLEXOptimizers
    #DecisionOptimization


  • 3.  Re: how to implement Lagrangian relaxation based branch-and-bound using CPLEX?

    Posted 08/24/14 08:49 PM

    Originally posted by: lxysjtu


    Anirudh, Thanks for your help.

    Would you please share with me some example code?

     

     

    Shaon


    #CPLEXOptimizers
    #DecisionOptimization