如果线性规划决策变量> 0然后> = 3000

时间:2017-01-29 20:53:33

标签: excel if-statement conditional solver

我正在尝试使用Excel中的求解程序创建一个线性程序,以最大限度地减少共同基金费用。我的决策变量是每个基金的投资金额。如果有任何投资,它必须符合基金最低要求。我该如何编程呢?

投资于基金1的金额> =如果投资于基金1的金额> 0,然后在基金1中投入的金额> = 3000否则投入的金额= 0

非常感谢任何帮助。感谢。

1 个答案:

答案 0 :(得分:5)

这些类型的约束由Big M Method

的变体强制执行

假设x是与投资基金1的金额相对应的决策变量。选择M的可能值的上限x。例如,如果您只需要1,000,000美元进行投资,请M = 1,000,000您不需要在x上设置最小上限。 M = 2,000,000也可以正常工作(如果M不合理地大,你通常可以获得更快的收敛和更少的舍入错误。)

引入一个新变量y,该变量被约束为01(即二元决策变量)。将以下两个约束添加到模型中:

x >= 3000*y
x <= M*y

如果x>0,则第二个添加的约束会使y远离0,因此y = 1会强制y,因为y = 1是二进制的。但是如果x <= M,则第二个约束会缩减为Mx会自动为真,因此它不会在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的求解器可以处理没有问题的那些(只要二进制变量的数量不会变得太大)。