我正在尝试使用Excel中的求解器来创建一个线性规划,以最小化共同基金的费用。我的决策变量是每个基金的投资金额。如果有任何投资,它必须满足基金的最低要求。我如何对此进行编程?
基金1 >=投资金额如果基金1投资金额> 0,则基金1 >= 3000投资金额=0
任何帮助都是非常感谢的。谢谢。
发布于 2017-01-30 05:25:19
这些类型的约束是由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的求解器可以处理那些没有问题的问题(只要二进制变量的数量不会变得太大)。
https://stackoverflow.com/questions/41925829
复制相似问题