簡體   English   中英

如何禁用 Cplex 中的所有分支和邊界改進?

[英]How to disable all branch & bound improvements in Cplex?

我想僅使用分支和邊界功能(即沒有所有加速解決方案的增強功能,如探測、在每個節點運行啟發式、添加切割等)在 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);

我錯過了什么?

正如 Erwin 所指出的,不可能禁用所有 Cplex 增強功能以​​獲得“vanilla”分支和邊界。 更詳細的解釋可以在這里找到

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM