CPLEX: как получить значение dvar> 0 - PullRequest
0 голосов
/ 05 ноября 2019

Я хочу привести минимальное значение, чтобы> 0 из этих значений dvar int (содержалось с -, 0, + value) (в разделе ограничений)


forall(r in request)

first_delivery[r] == minl(delivery_time[r][k][j]); that >0

Как я могу это сделать?

Большое спасибо.

1 Ответ

1 голос
/ 05 ноября 2019

Вы можете вычислить новые переменные решения, чтобы сохранить только значения больше 1, а затем использовать min:

dvar int x[1..4];
dvar int x2[1..4]; // derive from x, if x positive then x else max of x+1
dvar int y;
dvar int M; 

subject to
{

x[1]==0;
x[2]==-6;
x[3]==4;
x[4]==5;

M==max(i in 1..4) x[i];

forall(i in 1..4) 
{
x[i]<=0 => x2[i]==M+1;
x[i]>=1 => x2[i]==x[i];
}

y==min(i in 1..4) x2[i];
}

execute
{
writeln("y=",y);
}

, что дает

y=4
...