оператор if else с cplex java

У меня есть пара операторов if-else. Я хочу использовать cplex для решения моей проблемы с помощью java, и я не знаю, как сформулировать if-else в cplex. У меня есть это утверждение:

if (stock[i][t] <=Seuil || stock[i][t] <= livraison[i][t] ) 
then ( order[i][t]==Q && stock[i][t+1] == stock[i][t]-livraison[i][t]+order[i][t]);

с stock[i][t] и stock[i][t]: переменные решения Seuil, livraison[i][t] и Q известны (параметры)


person Fati Fatouma    schedule 08.06.2018    source источник


Ответы (2)


Ваш вопрос не ясен. Я думаю, что вы используете язык OPL, поскольку вы использовали слово «тогда» в своем заявлении. Если это так, то if часть вашего утверждения if (stock[i][t] <=Seuil || stock[i][t] <= livraison[i][t] ) смешивает переменные решения и параметры/данные/известные количества.

Если вы пытаетесь смоделировать условие «если-то», вам придется ввести двоичные переменные для представления различных логических условий.

person Irv    schedule 08.06.2018

Если вы используете OPL, вы можете использовать логические ограничения. Позвольте мне привести вам небольшой пример, который работает из вашего кода:

int Seuil=5;

range I=1..4;
range T=1..3;
int order[i in I][t in T]=i+t;
int Q=1;

dvar int stock[I][T] in 0..10;
dvar int livraison[I][T] in 0..10;

subject to
{
forall(i in I,t in T:(t+1) in T)
 (stock[i][t] <=Seuil || stock[i][t] <= livraison[i][t] ) 
=> ( order[i][t]==Q && stock[i][t+1] == stock[i][t]-livraison[i][t]+order[i][t]);

}
person Alex Fleischer    schedule 14.06.2018