excel - 如果线性规划决策变量 > 0 则 >= 3000

标签 excel if-statement conditional-statements solver

我正在尝试使用 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 ,限制为 01 (即二元决策变量)。将以下两个约束添加到您的模型中:

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

如果x>0然后第二个添加约束力y远离 0 ,因此它强制 y = 1y是二进制的。但如果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/

相关文章:

c - 模拟条件

javascript - 不透明度的jQuery条件?

asp.net - Epplus loadfromCollection int 列表不起作用

c# - 使用C#复制excel中的单元格

excel - 如何使用epplus循环读取excel中的列标题

ruby-on-rails - Rails Association 如果 bool 值为真

python - 根据两个条件提取列值

vba - 运行时 1004 解决方法 - 在 Worksheet_Change 中保护/取消保护

java - 带变量但不带表达式的 If 语句

javascript - 有人可以确认这个理论是否正确吗? - Javascript 和数组