Как я могу сделать ветвь на всех нецелочисленных переменных на каждом узле? - PullRequest
0 голосов
/ 05 ноября 2019

В каждом узле я хотел бы создать ветвь для всех переменных, значения которых не являются целыми числами. После этого я хотел бы напечатать значение цели в каждой ветви. Я написал этот код на 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 голосов
/ 05 ноября 2019

Вы не можете создать более двух ветвей на узле, поэтому вы получаете эту ошибку.

Более того, вновь созданные узлы не оцениваются сразу, они просто помещаются в очередь узлов. Поэтому вы не можете запрашивать объективные значения вновь созданных узлов только тогда.

В случае, если вы пытаетесь сделать что-то вроде сильного ветвления, тогда, пожалуйста, ищите в справочном руководстве "сильное ветвление". Для этого есть специальные функции.

...