我正在尝试使用Excel中的求解程序创建一个线性程序,以最大限度地减少共同基金费用。我的决策变量是每个基金的投资金额。如果有任何投资,它必须符合基金最低要求。我该如何编程呢?
投资于基金1的金额> =如果投资于基金1的金额> 0,然后在基金1中投入的金额> = 3000否则投入的金额= 0
非常感谢任何帮助。感谢。
答案 0 :(得分:5)
这些类型的约束由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
。重要的是 - 它不使用非线性for (int i = 0 ; i < columns * rows; i++) {
println(grid.cellXCenter(i+1) + ", " + grid.cellYCenter(i+1));
ellipse(grid.cellXCenter(i+1),grid.cellYCenter(i+1),10,10);
}
函数。它确实使它成为MILP(混合整数线性规划)问题 - 但Excel的求解器可以处理没有问题的那些(只要二进制变量的数量不会变得太大)。