如何在每个节点上的所有非整数变量上创建分支?

时间:2019-11-05 12:15:15

标签: cplex

在每个节点上,我都希望对所有其值不是整数的变量进行分支。之后,我想在每个分支上打印目标的值。我用C ++编写了此代码,但出现了错误1006。

ILOBRANCHCALLBACK1(callback1, IloNumVarArray, vars)
{
    for (int i = 0; i < vars.getSize(); ++i)
      {
        if (getValue(vars[i]) > 0 && getValue(vars[i]) < 1)
        {
        int xidown = IloFloor(getValue(vars[i]));
        int xiup   = IloFloor(getValue(vars[i])) + 1;
        makeBranch(vars[i], xidown, IloCplex::BranchDown, getObjValue());
        makeBranch(vars[i], xiup, IloCplex::BranchUp, getObjValue());
        cout << "objvalueDown_" << vars[i] << "," << getObjValue() << endl;
        cout << "objvalueUp_"   << vars[i] << "," << getObjValue() << endl;
        }
     }
}

1 个答案:

答案 0 :(得分:0)

在一个节点上不能创建两个以上的分支,这就是为什么会出现此错误的原因。

此外,不会立即评估新创建的节点,它们只会放入节点队列中。因此,此时您不能查询新创建的节点的目标值。

如果您尝试执行强分支等操作,请在参考手册中搜索“强分支”。有专门的功能。