【问题标题】:If Linear Programming Decision Variable > 0 then >= 3000如果线性规划决策变量 > 0 则 >= 3000
【发布时间】:2017-06-15 00:22:16
【问题描述】:
我正在尝试使用 Excel 中的求解器来创建一个线性程序,以最大限度地减少共同基金费用。我的决策变量是投资于每个基金的金额。如果有任何投资,则必须满足最低基金要求。我该如何编程?
投资于基金 1 的金额 >= 如果投资于基金 1 的金额 > 0,则投资于基金 1 的金额 >= 3000 否则投资的金额 = 0
非常感谢任何帮助。谢谢。
【问题讨论】:
标签:
excel
if-statement
conditional
solver
【解决方案1】:
这些类型的约束由Big M Method 的变体强制实施
假设x 是对应于基金1 投资金额的决策变量。在x 的可能值上选择一个上限M。例如,如果您只有 1,000,000 美元可投资,让M = 1,000,000 您不需要在x 上有最小上限。 M = 2,000,000 也可以工作(尽管如果 M 不是不合理的大,您通常会获得更快的收敛和更少的舍入误差)。
引入一个新变量y,它被限制为0 或1(即二元决策变量)。将以下两个约束添加到您的模型中:
x >= 3000*y
x <= M*y
如果x>0,那么第二个添加的约束会强制y 远离0,因此它会强制y = 1,因为y 是二进制的。但是如果y = 1,则第二个约束减少为x <= M,通过选择M 自动为真,因此它不会对x 添加任何真正的约束。但是——因为在这种情况下y = 1,第一个约束变为x >= 3000。因此,这两个约束一起强制x >= 3000 和x > 0。重要的是——它没有使用非线性if 函数。它确实使它成为一个 MILP(混合整数线性规划)问题——但 Excel 的求解器可以处理那些没有问题的问题(只要二进制变量的数量不会变得太大)。