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非线性的唯一原因是二元Sprayvariables和它表示的if / then条件,那么可以使用线性约束(所以全局最优性更可能)。 这是一个快速参考 。