-1

我开发了一个 excel 宏,它在供应商站点运行求解器,在客户端运行另一个求解器。约束条件是根据用户输入动态创建的。但是,对于多个解决方案,我得到了不同的答案。

在此处输入图像描述在此处输入图像描述

我能得到的是求解器约束方程根据两张纸中不同的单元格名称排序?如果我可以停止约束的排序,这可能会得到解决。怎么做? 在此处输入图像描述在此处输入图像描述

编辑 我的约束顺序相同,尽管这是解决问题的一种愚蠢方式,但即使在此之后,不同的 Excel 工作簿中的解决方案也会有所不同。 在此处输入图像描述

4

1 回答 1

0

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

添加约束对话框

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

求解器窗口(裁剪)

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

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

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

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