我想解决 Cplex 中的 MIP(使用 IloCplex for C++)仅使用分支和绑定功能(即没有所有加速解决的增强功能,如探测、在每个节点上运行启发式、添加切割等)。这个想法是能够测试我自己的削减的影响,而不会因为削减和 Cplex 对分支和边界的各种改进而模糊结果。
我已经禁用了许多方法,但根松弛仍然比我在运行 MIP 时得到的目标值要好,所有完整性约束都放松了,这意味着 Cplex 仍在以任何方式改进分支和边界。
我设置了以下参数:
cplex.setParam(IloCplex::Param::Preprocessing::Presolve, IloFalse);
cplex.setParam(IloCplex::Param::MIP::Strategy::Search, IloCplex::Traditional);
cplex.setParam(IloCplex::Param::MIP::Strategy::Probe, -1);
cplex.setParam(IloCplex::Param::MIP::Strategy::HeuristicFreq, -1);
cplex.setParam(IloCplex::Param::Preprocessing::BoundStrength, 0);
cplex.setParam(IloCplex::Param::Preprocessing::CoeffReduce, 0);
cplex.setParam(IloCplex::Param::MIP::Limits::CutPasses, -1);
cplex.setParam(IloCplex::Param::MIP::Strategy::FPHeur, -1);
我通过以下方式停用所有削减:
cplex.setParam(IloCplex::Param::MIP::Cuts::BQP, -1);
cplex.setParam(IloCplex::Param::MIP::Cuts::Cliques, -1);
cplex.setParam(IloCplex::Param::MIP::Cuts::Covers, -1);
cplex.setParam(IloCplex::Param::MIP::Cuts::Disjunctive, -1);
cplex.setParam(IloCplex::Param::MIP::Cuts::FlowCovers, -1);
cplex.setParam(IloCplex::Param::MIP::Cuts::Gomory, -1);
cplex.setParam(IloCplex::Param::MIP::Cuts::GUBCovers, -1);
cplex.setParam(IloCplex::Param::MIP::Cuts::Implied, -1);
cplex.setParam(IloCplex::Param::MIP::Cuts::LiftProj, -1);
cplex.setParam(IloCplex::Param::MIP::Cuts::LocalImplied, -1);
cplex.setParam(IloCplex::Param::MIP::Cuts::MCFCut, -1);
cplex.setParam(IloCplex::Param::MIP::Cuts::MIRCut, -1);
cplex.setParam(IloCplex::Param::MIP::Cuts::PathCut, -1);
cplex.setParam(IloCplex::Param::MIP::Cuts::RLT, -1);
cplex.setParam(IloCplex::Param::MIP::Cuts::ZeroHalfCut, -1);
我错过了什么?