У меня есть пара утверждений 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 известны (параметры)




Ваш вопрос непонятен. Я думаю, что вы используете язык 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]);
}