Decision Optimization

Decision Optimization

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

 View Only
  • 1.  MIP settings to completely disable cplex preprocessing and cplex cuts

    Posted Sat June 02, 2018 09:24 AM

    Originally posted by: UserCplex


    Hello,

    For a project I am working on, I need to observe the effect of adding various my own user generated cuts (that are globally valid)on an MIP model branch and bound tree size. 

    For this, I need to completely turn off all CPLEX routines that modify the model in any fashion. This includes any sort of preprocessing or cplex generated cuts. 

    That is, I want CPLEX MIP solver to work in the traditional text book branch and cut framework:

     

    (1)Solve the LP at a node, call user's separation routine. If a violated inequality is found, add it to model, re-solve the LP and iterate until LP is solved and user's separation routine does not find any more violated cut at that node.

    (2)Continue branch and bound process

     

    For adding the cuts, I have:

    CPXsetusercutcallbackfunc(env, mycutcallback, &usercutinfo);

    and function mycutcallback implements the cut generation process.

     

    I want to confirm that the settings below are exhaustive enough to ensure that CPLEX MIP solver reliably behaves in the expected way described above or if I am missing some setting.

    (The settings were taken from this thread: https://www.ibm.com/developerworks/community/forums/html/topic?id=b40361e6-8b8e-4409-b1da-0f9cff80f2a6&ps=25)

    Thanks in advance for the help.

     

    CPXsetintparam(env, CPX_PARAM_CLIQUES, -1);
    CPXsetintparam(env, CPX_PARAM_FPHEUR, -1);
    CPXsetintparam(env, CPXPARAM_MIP_Cuts_LiftProj, -1);//Do not generate lift and project cuts
    CPXsetintparam(env, CPX_PARAM_LANDPCUTS, -1);//Lift and project cuts in earlier CPLEX versions
    CPXsetintparam(env, CPX_PARAM_COVERS, -1);
    CPXsetintparam(env, CPX_PARAM_DISJCUTS, -1);
    CPXsetintparam(env, CPX_PARAM_FLOWCOVERS, -1);
    CPXsetintparam(env, CPX_PARAM_FLOWPATHS, -1);
    CPXsetintparam(env, CPX_PARAM_FRACCUTS, -1);
    CPXsetintparam(env, CPX_PARAM_GUBCOVERS, -1);
    CPXsetintparam(env, CPX_PARAM_ZEROHALFCUTS, -1);
    CPXsetintparam(env, CPX_PARAM_MIRCUTS, -1);
    CPXsetintparam(env, CPX_PARAM_IMPLBD, -1);
    CPXsetintparam(env, CPX_PARAM_PROBE, -1);
    CPXsetintparam(env, CPX_PARAM_HEURFREQ, -1);//Turn off node heuristics
    CPXsetintparam(env, CPX_PARAM_RINSHEUR, -1);//Manual says, this is turned off if HEURFREQ is -1
    CPXsetintparam(env, CPX_PARAM_CUTPASS, -1);//Make no passes attempting to generate cuts.
    CPXsetintparam(env, CPX_PARAM_PREIND, 0);//Turn off presolve completely
    CPXsetintparam(env, CPX_PARAM_AGGIND, 0);//Do NOT use any aggregator ideas
    CPXsetintparam(env, CPX_PARAM_RELAXPREIND, 0);//Do NOT APPLY LP presolve routines to root node relaxation
    CPXsetintparam(env, CPX_PARAM_PREPASS, 0);//dO NOt apply any presolve passes.
    CPXsetintparam(env, CPX_PARAM_REPEATPRESOLVE, 0);//Do NOT repeat presolve after root node is otherwise processed.
    CPXsetintparam(env, CPX_PARAM_BNDSTRENIND, 0);//Do not apply bound strengthening
    CPXsetintparam(env, CPX_PARAM_COEREDIND, 0);//Disable coefficient reduction in presolving
    CPXsetintparam(env, CPX_PARAM_CUTSFACTOR, 1);//1 means, total number of constraints 
    //should be same as original set...thus, no NEW cuts will be generated.
     
    CPXsetintparam(env, CPX_PARAM_REDUCE, 0);//Do not apply any primal or dual reductions
    CPXsetintparam(env, CPX_PARAM_MIPSEARCH, 1);//1 means conventional
    CPXsetintparam(env, CPX_PARAM_SUBMIPNODELIM, 0);//No submip nodes
    CPXsetintparam(env, CPX_PARAM_MIPEMPHASIS, 3);//Do not waste time attempting to find feasible solutions

    #CPLEXOptimizers
    #DecisionOptimization


  • 2.  Re: MIP settings to completely disable cplex preprocessing and cplex cuts

    Posted Sat June 02, 2018 12:10 PM

    I think you should also disable symmetry detection (CPXPARAM_Preprocessing_Symmetry) and node presolve (CPXPARAM_MIP_Strategy_PresolveNode).

    Note however that the general goal of CPLEX is to solve MIPs as fast as possible. So not everything that CPLEX does is tied to a parameter and some things just cannot be disabled (and they may be trade secrets, so you may not even know). So in general there is no guarantee that CPLEX will do absolutely nothing with your model.

    Still, the settings above seem appropriate to make CPLEX as dumb as possible.


    #CPLEXOptimizers
    #DecisionOptimization


  • 3.  Re: MIP settings to completely disable cplex preprocessing and cplex cuts

    Posted Wed October 16, 2019 10:06 PM

    Originally posted by: panbinbin11


    This is interesting. I am trying to disable certain cuts for my MIP solver too. However, I reallize that even after I turn off certain cuts, they are still generated and used in the Branch and Cut algorithm by Cplex. Is it normal? Or did I miss any steps in turning the cut generations off?

     

    1. I have set the following cuts off

                cplex.setParam(    IloCplex.Param.MIP.Cuts.GUBCovers, -1);
                cplex.setParam(    IloCplex.Param.MIP.Cuts.Cliques, -1);
                cplex.setParam(    IloCplex.Param.MIP.Cuts.Implied, -1);
                cplex.setParam(    IloCplex.Param.MIP.Cuts.LocalImplied, -1);    


    2.  The Cplex logs shows that the parameters have been set correctly as:

    CPXPARAM_MIP_Cuts_Cliques                        -1
    CPXPARAM_MIP_Cuts_Implied                        -1
    CPXPARAM_MIP_Cuts_GUBCovers                      -1
    CPXPARAM_MIP_Cuts_LocalImplied                   -1

    3. Yet, at the end of solving the problem, the log displays:

    GUB cover cuts applied:  14
    Cover cuts applied:  18
    Flow cuts applied:  11
    Mixed integer rounding cuts applied:  14
    Zero-half cuts applied:  17
    Lift and project cuts applied:  3s
    Gomory fractional cuts applied:  3

    Therefore, it seems Cplex still generates GUB Cover cuts, even after its associated parameter is set to -1. 

     


    #CPLEXOptimizers
    #DecisionOptimization


  • 4.  Re: MIP settings to completely disable cplex preprocessing and cplex cuts

    Posted Thu October 17, 2019 02:23 AM

    This question was moved to a new thread here.


    #CPLEXOptimizers
    #DecisionOptimization