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.
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.
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