我正在尝试使用 Excel 中的求解器创建一个线性程序,以最大限度地减少共同基金费用。我的决策变量是投资于每只基金的金额。如果进行任何投资,则必须满足最低资金要求。我该如何编程?
基金 1 投资金额 >= 如果基金 1 投资金额 > 0,则基金 1 投资金额 >= 3000,否则投资金额 = 0
非常感谢任何帮助。谢谢。
最佳答案
这些类型的约束是由 Big M Method 的变体强制执行的。
假设x
是对应于基金 1 投资金额的决策变量。选择上限 M
关于 x
的可能值。例如,如果您只有 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 的求解器可以处理那些没有问题的问题(只要二进制变量的数量不会变得太大)。
关于excel - 如果线性规划决策变量 > 0 则 >= 3000,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41925829/