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 和差值之间的最大值。在某些情况下,这可以导致更高效的求解器行为。
我在 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 和差值之间的最大值。在某些情况下,这可以导致更高效的求解器行为。