use*_*751 4 linear-programming divide-by-zero
我正在尝试编写一个线性程序,并且需要一个等于 xc 符号的变量 z,其中 x 是另一个变量,而 c 是一个常数。
我考虑过z = (x-c)/|x-c|。不幸的是,如果 x=c,那么这会产生除以 0。
我不能使用 z=xc,因为我不想用 x 和 c 之间的差值来加权它。
有谁知道表达 z 的好方法,以便它是 xc 的符号?
感谢您的任何帮助和建议!
您不能z = sign(x-c)使用线性程序精确建模(因为 LP 中的约束仅限于变量的线性组合)。
但是,sign如果您愿意将线性程序转换为混合整数程序,您可以建模,您可以使用以下两个约束对其进行建模:
L*b <= x - c <= U*(1-b)
z = 1 - 2*b
Run Code Online (Sandbox Code Playgroud)
其中b是一个二进制变量,L并且U是在数量上下限和上限x-c。如果b = 0,我们有0 <= x - c <= U和z = 1。如果b = 1,我们有L <= x - c <= 0和z = 1 - 2*1 = -1。
您可以使用Gurobi 之类的求解器来求解混合整数程序。