если еще заявление с cplex Java - PullRequest
0 голосов
/ 08 июня 2018

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

Ответы [ 2 ]

0 голосов
/ 14 июня 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]);

}

regards

0 голосов
/ 08 июня 2018

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

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

...