0

我想解决 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);

我错过了什么?

4

1 回答 1

0
于 2021-07-15T07:07:25.880 回答