UserCutCallback为每个输出记录两次

时间:2019-07-11 17:04:17

标签: visual-c++ cplex

当我使用UserCutCallback并检索某些函数(如getuppseudocost或slack)时,它将两次生成输出。例如,我有50个变量,它显示所有50个变量的伪成本,然后在第50个变量下,它再次显示第一个变量到第50个变量。我的代码有什么问题?

ILOUSERCUTCALLBACK1(Myuppesodo, IloArray<IloNumVarArray>, vars) {
for (int i = 0; i < nbworkers; i++) {
    for (int j = 0; j < nbmachines; j++)
    {
        auto temp = getUpPseudoCost(vars[i][j]);
        cout << "getUpPseudoCost(" << vars[i][j] << ")= " << 
                     temp << endl;

    }
}
}

enter image description here

1 个答案:

答案 0 :(得分:1)

每个节点可能会多次调用用户剪切回调。这是可以预期的,因为切割是成环分开的。通过遵循以下范例,您可以轻松检测当前节点是否已经调用了回调: struct Marker:公共IloCplex :: MIPCallbackI :: NodeData {};

ILOUSERCUTCALLBACK0(SolveCallback) {
   if ( !getNodeData() ) {
      // Invoked first time at current node
      setNodeData(new Marker());
   }
   else {
      // Not the first time at current node
   }
}