使用CPLEX 12.8与G++编译Benders分解算法时遇警告问题
解决CPLEX 12.8与g++编译时的SubMIPNodeLim弃用警告
这个问题我之前帮人排查过,本质是g和clang对弃用代码的警告阈值不一样,加上CPLEX 12.8确实标记了IloCplex::Param::MIP::Limits::SubMIPNodeLim为弃用参数。给你两个可行的解决方向:
替换弃用参数(推荐方案)
CPLEX 12.8官方已经弃用了SubMIPNodeLim,取而代之的是IloCplex::Param::MIP::Limits::SubNodeLim。你只需要定位代码中所有使用旧参数的位置,替换为新参数即可。举个例子:
原代码:cplex.setParam(IloCplex::Param::MIP::Limits::SubMIPNodeLim, 500);修改后:
cplex.setParam(IloCplex::Param::MIP::Limits::SubNodeLim, 500);这种方式从根源上解决了警告问题,还能保证代码符合CPLEX后续版本的规范,避免未来版本兼容性问题。
临时抑制警告(应急方案)
如果暂时没时间调整代码,可以在g++的编译命令中添加-Wno-deprecated-declarations选项,让编译器忽略弃用声明类的警告。比如你的编译命令原本是:g++ MAIN.cpp -o benders_solver -lilocplex -lcplex -lm -pthread修改为:
g++ -Wno-deprecated-declarations MAIN.cpp -o benders_solver -lilocplex -lcplex -lm -pthread注意:这只是临时屏蔽警告的手段,不建议长期使用——弃用的参数可能在未来CPLEX版本中被彻底移除,到时代码会直接编译失败。
内容的提问来源于stack exchange,提问作者rasul
相关产品推荐
相关产品推荐

