Decision Optimization

Decision Optimization

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

 View Only
  • 1.  Less branching without cuts

    Posted Sun December 15, 2013 06:10 AM

    Originally posted by: Zacharie_ALES


    Hello,

    I try to compare the time to solve a serie of problems when using :

    1. cplex with it's default parameter; and
    2. cplex with it's default parameter except for all the cuts that I disable.

    I was surprised to see that cplex was often quicker in the second case. I was even more surprised to realize that the number of nodes explored was often lower without the cuts. Without any cut the relaxation should be worse and lead to more branching. I really don't understand how the number of nodes can be lower.

    I thought this may be due to some parameters that cplex was fixing dynamically so I tried to set all these parameters to the same value in both cases but the results were similar.

    Do you have any idea why?

    PS: Here is the (quite long) list of parameters that I fixed:

    cplex.setParam(IloCplex.IntParam.HeurFreq, -1);
    
    cplex.setParam(IloCplex.IntParam.NodeAlg, IloCplex.Algorithm.Dual);
    cplex.setParam(IloCplex.IntParam.RootAlg, IloCplex.Algorithm.Dual);
    cplex.setParam(IloCplex.IntParam.SiftAlg, IloCplex.Algorithm.Dual);
    
    cplex.setDeleteMode(IloCplex.DeleteMode.LeaveBasis);
    cplex.setParam(IloCplex.IntParam.PPriInd, -1);
    cplex.setParam(IloCplex.IntParam.DPriInd, 1);
    cplex.setParam(IloCplex.IntParam.CraInd, -1);
    cplex.setParam(IloCplex.IntParam.VarSel, -1);
    cplex.setParam(IloCplex.IntParam.Threads, 1);
    cplex.setParam(IloCplex.IntParam.Symmetry, 0);
    cplex.setParam(IloCplex.IntParam.StrongItLim, 10);
    cplex.setParam(IloCplex.IntParam.SolnPoolCapacity, 1);
    cplex.setParam(IloCplex.IntParam.RINSHeur, -1);
    cplex.setParam(IloCplex.IntParam.RepairTries, 0);
    cplex.setParam(IloCplex.IntParam.RelaxPreInd, 0);
    cplex.setParam(IloCplex.IntParam.ReInv, 100);
    cplex.setParam(IloCplex.IntParam.Probe, 1);
    cplex.setParam(IloCplex.IntParam.PriceLim, 10);
    cplex.setParam(IloCplex.IntParam.PreslvNd, 1);
    cplex.setParam(IloCplex.IntParam.PrePass, 0);
    cplex.setParam(IloCplex.IntParam.PreDual, -1);
    cplex.setParam(IloCplex.IntParam.PerLim, 10);
    cplex.setParam(IloCplex.BooleanParam.PerInd, false);
    cplex.setParam(IloCplex.IntParam.ParallelMode, -1);
    cplex.setParam(IloCplex.IntParam.MIPSearch, 1);
    cplex.setParam(IloCplex.IntParam.FPHeur, -1);
    cplex.setParam(IloCplex.IntParam.DepInd, 0);
    cplex.setParam(IloCplex.IntParam.DiveType, 1);
    cplex.setParam(IloCplex.IntParam.CoeRedInd, 0);
    cplex.setParam(IloCplex.IntParam.BrDir, 1);
    cplex.setParam(IloCplex.IntParam.BndStrenInd, 0);
    cplex.setParam(IloCplex.IntParam.BBInterval, 0);
    cplex.setParam(IloCplex.IntParam.AggInd, 0);
    cplex.setParam(IloCplex.IntParam.AdvInd, 0);
    cplex.setParam(IloCplex.IntParam.AggFill, 10);
    cplex.setParam(IloCplex.IntParam.AggCutLim,3);
    cplex.setParam(IloCplex.IntParam.NodeSel, 0);
    

     

     


    #CPLEXOptimizers
    #DecisionOptimization


  • 2.  Re: Less branching without cuts

    Posted Mon January 20, 2014 09:48 AM

    I think your assumption that a worse relaxation leads to more branching is wrong. There is no such rule.

    Without cuts CPLEX takes a different path through the search tree.  On this different path heuristics may work better or CPLEX may encounter integral nodes earlier or more quickly. Both factors can dramatically reduce the search time.

    It is not surprising that there exist model instances in which disabling cuts improves performance.


    #CPLEXOptimizers
    #DecisionOptimization


  • 3.  Re: Less branching without cuts

    Posted Mon January 20, 2014 11:05 AM

    Originally posted by: Zacharie_ALES


    Indeed, I did not think about it that way...

    Thanks for the answer.


    #CPLEXOptimizers
    #DecisionOptimization