C ++中带有Concert的BranchCallbackI的问题

时间:2019-04-21 18:12:08

标签: c++ cplex

我正在尝试使用ILOBRANCHCALLBACK0宏在带有CPLEX Concert的C ++中调用getUpPseudoCost()类的getDownPseudoCost()IloCplex::BranchCallbackI方法,但是它不起作用。这是我的代码:

ILOBRANCHCALLBACK0(MyBranch){
if (getBranchType() != BranchOnVariable)
cout <<"getUpPseudoCost"<<getUpPseudoCost();
}
...
cplex.use(MyBranch(env));

1 个答案:

答案 0 :(得分:1)

getUpPseudoCost方法需要一个参数(请参见文档here); IloIntVarIloNumVar。确实,您在注释部分共享的错误表明存在getUpPseudoCost方法,但是没有与您的用法相匹配的重载。

使用以下代码段,我使用ILOBRANCHCALLBACK1宏来传递变量数组并调用getUpPseudoCost方法:

ILOBRANCHCALLBACK1(MyCallback, IloNumVarArray, vars) {
   for (int i = 0; i < vars.getSize(); ++i) {
      cout << "getUpPseudoCost(" << vars[i] << ") = "
           << getUpPseudoCost(vars[i]) << endl;
   }
}
...
IloNumVarArray var(env);
// Build or import the var array, then pass it into the callback.
cplex.use(MyCallback(env, var));

希望这可以帮助您朝正确的方向开始。