Как преобразовать условное ограничение в концертный C ++ для cplex?

Я написал модель в IBM ILOG Cplex Studio, используя OPL для линейного программирования. Но теперь мне нужно написать ту же модель, используя концерт C ++. Но я не могу преобразовать свои ограничения.

Одно из моих ограничений следующее:

forall(i in Nodes)
edgeSum[i]:
if(i==0)
sum (j in Ein[0])x[<j,i>] - sum (j in Eout[0])x[<i,j>] == -1;
else if (i>=1 && i<n/2)
sum (j in Ein[i])x[<j,i>] - sum (j in Eout[i])x[<i,j>] == 0;
else
sum (j in Ein[i])x[<j,i>] <= 1;

Особенно мне нужно знать, как писать условные ограничения.
Спасибо за продвижение.

1

Решение

Попробуйте что-то вроде

for (i=0; i<numNodes; i++)
{
if (i == 0)
{
IloExpr expr1(env);
for (j=0; j<numIn[0]; j++)
expr1 += x[EInIndex[0][j]];
IloExpr expr2(env);
expr2 += x[EOutIndex[0][j]];
model.add(expr1 - expr2 == -1);
}
else if ((i >= 1) && (i < n/2))
{
// etc
}
else
{
// etc
}
}

Я просто сделал это по памяти, так что синтаксис, вероятно, немного искажен, и я не заполнил все детали всех случаев — они должны быть выполнимы с похожей структурой. Я также, вероятно, исказил ваши индексы — не уверен, как вы переделываете свой подход среза в своем коде C ++, поэтому я немного догадался, основываясь на том, что я делал раньше. Также я не назвал ограничение — это тоже можно легко добавить. Посмотрите на некоторые примеры C ++, предоставляемые с CPLEX.

Надеюсь это немного поможет

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]