[英]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.