线性规划 - 等于表达式符号的变量

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 的符号?

感谢您的任何帮助和建议!

cod*_*ppo 7

您不能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 <= Uz = 1。如果b = 1,我们有L <= x - c <= 0z = 1 - 2*1 = -1

您可以使用Gurobi 之类的求解器来求解混合整数程序。