Cplex Decision Expression 值限制

Cplex Decision Expression value limit

我在 cplex opl 中有一个决策表达式,

dexpr 浮动 A = x[i]-b[i];

我希望 A 取 0 或更大的值,这样做的语法是什么?

maxl()函数用于此目的:

range I = 1..2;
dvar float+ x[I];
dvar float+ b[I];
dexpr float A[i in I] = maxl(x[i] - b[i], 0);

但是,根据您的使用方式,A 使用决策变量可能比决策表达式更好。假设您的模型是这样制定的,因此 A 将始终采用尽可能小的值(例如,因为 non-negative 值在 objective 函数中受到惩罚),那么您可以使用 dvar float+ A[I]并添加约束 forall(i in I) A[i] >= x[i] - b[i]。这将隐含地确保 A[i] 始终是 0 和差值之间的最大值。在某些情况下,这可以导致更高效的求解器行为。