如果有多个解决方案,每次如何使excel求解器给出相同的输出

时间:2016-07-11 06:29:04

标签: excel vba nonlinear-optimization ms-solver-foundation

我开发了一个excel宏,它在供应商站点运行求解器,在客户端运行另一个求解器。约束条件基于用户输入即时创建。 然而,对于不止一种解决方案,我得到了不同的答案。

enter image description here enter image description here

我能得到的是求解器约束方程根据单元名称排序,两个表格不同?如果我可以停止约束的排序,这可能会得到解决。怎么做? enter image description here enter image description here

修改 我有相同顺序的约束,虽然这是解决问题的一种愚蠢的方式,但即使在那之后,解决方案在不同的excel工作簿中也会有所不同。 enter image description here

1 个答案:

答案 0 :(得分:0)

如果您通过Formulas > Define Name为每个约束单元格命名,则可以通过在“添加约束”对话框的“单元格引用”字段中键入该名称来使用该名称:

Add Constraint dialog

然后,在Solver窗口中,将按名称而不是地址显示和排序约束:

Solver window (crop)

如果你从VBA代码配置Solver,你可以做同样的事情,例如:

SolverAdd CellRef:="cell1", Relation:=1, FormulaText:="60"

我不确定这是否是解决问题的好方法。如果您尝试求解的方程组有多种不同的解,那么运行求解器的结果可能不仅取决于约束设置和起始值,还取决于求解器首选项,Excel和求解器的版本,以及很可能其他您无法控制的两个系统的属性。您可以尝试的一些事项包括:

  • 确保在每个Solver运行之前使用相同的起始值预加载变量电子表格单元格,并试验这些值应该是什么
  • 重新安排您的方程组以支持特定结果。例如,代替解决A + B = 100,它具有无限多个同样好的解,解决在C = 100的约束下最大化A * B,其中C = A + B.
  • 编写自己的算法,在用户输入的约束下找到方程的解。如果您必须向某人解释如何找到有效的解决方案,您会告诉他们什么 - 您能将其转换为VBA代码吗?