假设一个具有两个正连续变量的数学优化问题:
0 <= x <= 1
0 <= y <= 1000
我正在寻找一种有效的方法,以线性约束的形式(可能使用二进制/整数变量和大M(表达以下非线性关系,因此该问题可以用milp求解器解决:
when 0 <= y < 200 then x = 0
when y = 200 then 0 <= x <= 1
when 200 < y <= 1000 then x = 1
数字200和1000是指示性的。
是否有任何针对类似问题的直接建议或论文/书籍?
我认为这会奏效。。。
以下是我的看法。您有3个需要注意的状态,即y
域上的3个分区。因此,2个二进制变量可以捕获这3种状态。为了保持线性,你需要处理非严格的不等式。因此定义:
y_lb ∈ {0, 1} and let y_lb = 1 if y >= 200
y_ub ∈ {0, 1} and let y_ub = 1 if y <= 1000
现在我们已经根据y_lb
和y_ub
的真值表设置了分区:
y y<200 200<=y<=1000 y>1000
y_lb 0 | 1 | 1
y_ub 1 | 1 | 0
现在我们可以很容易地将真值表链接到约束x
:
x ∈ Reals
x <= y_lb
x >= 1 - y_ub