Excel求解不提供一致的结果
我试图用求解器来解决非线性问题,但是结果并不一致,并且在一定的条件下会发生变化。 使用Risk Solver Platform时不存在此问题,但在使用常规Excel求解器时不存在此问题。 优化和约束并不复杂,所以我不明白是怎么回事。
这是文件: temp.xlsm
请注意,运行解算器的button附带有macros。
复制问题:
- 打开文件
- 点击
Months
选项卡 - 最初的感染率应该是11%
- 点击
Optimize Net Revenue
(正确的最佳条件,这是好的) - 将初始感染率改为1%
- 点击
Optimize Net Revenue
- 将初始感染率改回到11%
- 点击
Optimize Net Revenue
注意:最佳净收入现在较低,在最后一个月,最后一列为负,应为零。 似乎求解器每次都需要重新设置,或者有一个错误,但我无法弄清楚。 这是macros:
Sub Monthly_Solver() Application.Run "SolverReset" Application.Run "SolverOk", "$T$18", 1, "0", "$F$6:$F$17,$N$6:$N$17", 1, "GRG Nonlinear" Application.Run "SolverAdd", "$F$6:$F$17", 5, "binary" Application.Run "SolverAdd", "$N$6:$N$17", 1, "$M$6:$M$17" Application.Run "SolverAdd", "$N$6:$N$17", 3, "0" Application.Run "SolverAdd", "$T$18", 3, "0" Application.Run "SolverSolve", True End Sub
GRG非线性不保证find全局最优解。 它find了一个局部最优解,并且解决scheme的质量受到您提供给algorithm的初始值的影响。 来自Frontline的网站 :
当出现“解算器find解决scheme”消息时,这意味着GRG方法find了局部最优解 – 对于接近当前值的决策variables,没有其他值可以为目标函数产生更好的值。 形象地说,这意味着求解器find了一个“峰值”(如果最大化)或“谷值”(如果最小化) – 但是如果模型是非凸的,则可能存在远离当前解的其他更高峰或更深的谷。 在math上,这个信息意味着用于局部最优性的Karush-Kuhn-Tucker(KKT)条件已经被满足(在一定的公差内,与Solver Options对话框中的Precision设置相关)。
现在,您的Harvest
列在N14:N16
有3131个。 如果您将initial infestation
改为1%并再次解决,则N14:N17
的值将为3131.因此,您的初始解决scheme已更改。 如果在不更改N17
的值的情况下将其更改为11%,解算器可能会find另一个局部最优解。 如果你设置N17=0
你将得到与第一个相同的解决scheme。
另一方面,如果GRG非线性的唯一原因是二元Spray
variables和它表示的if / then条件,那么可以使用线性约束(所以全局最优性更可能)。 这是一个快速参考 。