Оператор 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 известны (параметры)

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
384
2

Ответы 2

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

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

Если вы используете 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]);

}

Другие вопросы по теме