【发布时间】:2018-05-14 14:49:51
【问题描述】:
我正在尝试修改 Cplex 在期间优化其分支和绑定的方式,使用它的 C++ API。我真正想做的事:
-在调用solve()方法之前设置参数。例如,使用cplex.setParam(IloCplex::NodeSel, 0); 告诉 Cplex 在分支定界树中进行 DFS。
-一旦 cplex 找到第一个现任者(即问题的整数解决方案),我想将此参数设置为一个(cplex.setParam(IloCplex::NodeSel, 1);),这意味着 Cplex 应该执行最佳绑定搜索而不是dfs 在树中。
我尝试使用现有回调(只要找到整数解决方案就执行)以这种方式设置参数:
ILOINCUMBENTCALLBACK1(CustomIncumbentCallback, IloNumVarArray, vars){
cplex.setParam(IloCplex::NodeSel, 1);
...
}
在main() 中,在调用solve() 之前:
cplex.use(CustomIncumbentCallback(env));
但是,即使在回调中调用setParam 时,它似乎也不起作用并且参数保持其初始值(我已确保在找到整数解决方案时执行此回调)。请注意,cplex 变量在我的代码中是一个全局变量。
我的问题是:是否可以在优化过程中修改参数的值(在调用solve() 之后,但在它结束之前),如果可以,如何?
【问题讨论】: