线性规划中的几种逻辑表达式
注意: 摘录字刘博士的《数学建模与数学规划》, 以便用时可查。
实际上Gurobi API 中自身放啊变的逻辑表达式函数,下面列出自定义的实现方式。
1 逻辑与
如果 x 1 = 1 x_1 = 1 x1=1, x 2 = 1 x_2 = 1 x2=1, 那么 y = 1 y=1 y=1
如果考虑N个变量的逻辑与,则:
2 逻辑或
如果 x 1 = 1 x_1 = 1 x1=1 或者 x 2 = 1 x_2 = 1 x2=1, 那么 y = 1 y=1 y=1
如果考虑 N个变量的逻辑或, 则:
3 逻辑异或
如果 x 1 = 1 x_1 = 1 x1=1 和 x 2 = 1 x_2 = 1 x2=1中, 当且仅当一个为真时, y = 1 y=1 y=1
如果考虑N个0-1变量的异或, 那么:
4 if-then 约束
当 x 1 > = x 2 x_1 >= x_2 x1>=x2 时 v=1;
当 x 1 < x 2 x_1 < x_2 x1<x2 时, v=0.
考虑上述两个推理的逆否命题。 第一个为 当 v=0 时,有 x 1 < x 2 x_1 < x_2 x1<x2, 进一步 x 1 − x 2 < 0 x_1 - x_2 < 0 x1−x2<0, 在数学规划中,一般使用 < = <= <= 或者 > = >= >=, 引入非常小的正数 ϵ \epsilon ϵ,使得 x 1 − x 2 + ϵ < = 0 x_1 - x_2 + \epsilon<= 0 x1−x2+ϵ<=0, 于是写为线性规划约束为:
x 1 − x 2 + ϵ − M v < = 0 x_1 - x_2 + \epsilon - Mv<= 0 x1−x2+ϵ−Mv<=0
第二个的逆否命题为 当 v=1时,有 x 1 > = x 2 x_1 >= x_2 x1>=x2, 进一步 x 2 − x 1 < = 0 x_2 - x_1 <= 0 x2−x1<=0,于是写为线性规划约束为:
x 2 − x 1 − M ( 1 − v ) < = 0 x_2 - x_1 - M(1-v)<= 0 x2−x1−M(1−v)<=0
其他的常见的建模方法: