Decision Optimization

Decision Optimization

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


#Analytics
#DecisionOptimization
#DecisionOptimization
 View Only
  • 1.  Branch & Cut using Goals

    Posted 02/21/08 12:28 AM

    Originally posted by: SystemAdmin


    [Sylvain said:]

    I am trying to write a specific cut generation algorithm for cplex using goals.
    So I wrote a goal which determines which local cuts are to be added.
    Then, these cuts are added by returning:

    return AndGoal(IloCplex::Goal(rngs), this);

    where rngs is an IloRangeArray representing the set of local cuts.
    By checking the Node Id, I realized that this operation created a new node equivalent to the current node plus the local cuts (the Node Id is different after adding the cuts).

    Is it possible that Cplex stores the newly created node in the active nodes set and then process another node ?

    It is somehow equivalent to saying that cplex stops processing the current node because the local cuts added have increased the lower bound in such a way that it might be interesting to look for another node and maybe come back to this one later.

    #CPLEXOptimizers
    #DecisionOptimization


  • 2.  Re: Branch & Cut using Goals

    Posted 03/21/08 03:05 AM

    Originally posted by: SystemAdmin


    [EdKlotz said:]

    > I am trying to write a specific cut generation algorithm for cplex using goals.
    > So I wrote a goal which determines which local cuts are to be added.
    > Then, these cuts are added by returning:
    >
    > return AndGoal(IloCplex::Goal(rngs), this);
    >
    > where rngs is an IloRangeArray representing the set of local cuts.
    > By checking the Node Id, I realized that this operation created a new node equivalent > to the current node plus the local cuts (the Node Id is different after adding the cuts).
    >
    > Is it possible that Cplex stores the newly created node in the active nodes set and
    > then process another node ?

    Correct; CPLEX is not obligated to traverse the active nodes depth first.  It has multiple
    node selection strategies.  You can ask CPLEX to traverse the nodes depth first, but
    in general this is not an effective node selection strategy.

    > It is somehow equivalent to saying that cplex stops processing the current node
    > because the local cuts added have increased the lower bound in such a way that it
    > might be interesting to look for another node and maybe come back to this one later.

    That is correct.  If the child node objective is significantly worse than the parent node objective, there is a good chance that continued examination of additional child nodes
    along this path won't yield anything useful.  So, CPLEX will often defer the exploration of those child nodes and look elsewhere, hoping that it finds a better solution elsewhere that enables it to prune the nodes it deferred without any additional exploration.

    In addition to the node selection parameter, CPLEX has a backtrack tolerance you can set to control the amount of backtracking of this type that is done. 
    #CPLEXOptimizers
    #DecisionOptimization


  • 3.  Re: Branch & Cut using Goals

    Posted 03/28/08 12:36 AM

    Originally posted by: SystemAdmin


    [Sylvain said:]

    Thanks for the answer.

    So I guess that this is a big difference between goals and cut callbacks.

    Adding cuts with goals creates new nodes that might never be explored if they have a bad relaxation whereas adding cuts with cut callbacks does not create new nodes and is performed repeatedly until the node relaxation is worse than the best solution found so far or until no new valid cuts are found.
    #CPLEXOptimizers
    #DecisionOptimization