问题描述
我在cplex opl中有一个决策表达式,
dexpr float 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
将始终取尽可能小的值(例如,由于非负值在目标函数中受到了惩罚),则可以使用dvar float+ A[I]
并添加约束{{ 1}}。这将隐式确保forall(i in I) A[i] >= x[i] - b[i]
始终是0与差之间的最大值。在某些情况下,这可以导致更有效的求解器行为。