我想带来这些dvar int值中的> 0的最小值(包含-,0,+值)(在约束部分)
forall(r in request)
first_delivery[r] == minl(delivery_time[r][k][j]); that >0
我该怎么做?
非常感谢您。
答案 0 :(得分:1)
您可以计算新的决策变量以仅保留大于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