我在标题中写的内容微不足道。但是我想知道,对于这种问题,MILP是否有解决方法。
让我假设方程式如下:
X和a是时间相关的变量。 b是固定时间序列。
X应该始终在a和b之间,因此 a≥X≥b
但是b可能会包含比a的最大限制高的值。在这种情况下,我想说a = X或0 = X或其他。
我该如何解决这个问题?我考虑了一段时间,我或我的同事提出的所有解决方案最终都不是MILP方程式。也许这是不可能的。
答案 0 :(得分:1)
让我用我更熟悉的符号重新陈述问题。我们有变量x[t]
和y[t]
以及常量u[t]
。我们要建模:
y[t] <= x[t] <= u[t] if y[t] <= u[t]
x[t] = y[t] if y[t] > u[t]
我们可以将其重写为:
y[t] <= x[t] <= max(u[t],y[t])
或
y[t] <= x[t]
x[t] <= u[t] + M δ[t]
x[t] <= y[t] + M (1-δ[t])
δ[t] ∈ {0,1}
其中M
是一个足够大的常数(但不要太大)。如果没有好的方法可以为M
取得良好的价值,我们可以使用指标约束或SOS1变量(并非所有求解器都支持这些约束)。