我正在尝试编写一个线性程序,需要一个等于 x-c 符号的变量 z,其中 x 是另一个变量,c 是常数。
我考虑过z = (x-c)/|x-c|
。不幸的是,如果 x=c,则会除以 0。
我不能使用 z=x-c,因为我不想通过 x 和 c 之间的差异大小来对其进行加权。
有谁知道表达 z 的好方法,使其成为 x-c 的符号?
感谢您的任何帮助和建议!
你不能建模z = sign(x-c)
与线性程序完全一样(因为 LP 中的约束仅限于变量的线性组合)。
但是,您可以建模sign
如果您愿意将线性程序转换为混合整数程序,您可以使用以下两个约束对其进行建模:
L*b <= x - c <= U*(1-b)
z = 1 - 2*b
Where b
是一个二元变量,并且L
and U
是数量的下限和上限x-c
. If b = 0
, 我们有0 <= x - c <= U
and z = 1
. If b = 1
, 我们有L <= x - c <= 0
and z = 1 - 2*1 = -1
.
您可以使用像这样的求解器Gurobi http://gurobi.com解决混合整数规划。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)