3

我正在尝试解决一个优化问题,其中一个输入变量必须以最小和最大约束为界。因为我最后没有运行 SolverReset,所以我可以告诉之后 Solver 忽略了第三个约束 ($F$5 <= 1)。我也可以说出来,因为有时它会给我一个答案,其中 $F$5 > 1。

当我手动使用 Solver 时,我可以添加第三个约束。我试过录制宏来看看我错过了什么,但我仍然很难过。我正在运行 Excel 2007。有什么想法吗?谢谢,

Public Sub SEDMSolver()

SolverReset
SolverAdd CellRef:="$F$5", Relation:=3, FormulaText:="0.1"
SolverAdd CellRef:="$F$4", Relation:=3, FormulaText:="0"
SolverAdd CellRef:="$F$5", Relation:=1, FormulaText:="1"
SolverOk SetCell:="$G$8", MaxMinVal:=2, ValueOf:="0", ByChange:="$F$4:$F$5"
SolverSolve userFinish:=True

End Sub
4

3 回答 3

2

求解器可能有点侥幸。尝试将您的 MaxMinVal=2 行设置在第一行之上。当我运行求解器宏时,我总是必须将其设置在约束之上。有时它会抛出错误。

我试图复制您的问题(使用 excel 2010),但它对我有用。以 MxMinVal 开头和结尾。您可以尝试重新启动您的机器和excel,看看问题是否仍然存在。但是您的代码确实对我有用,所有三个约束都加载了。

我对您的代码的另一个一般建议是添加:

Application.Calculation = xlAutomatic  

这将使计算变为自动。我在运行涉及求解器的更复杂的宏时将其关闭。

于 2011-12-28T21:44:10.313 回答
0

根据我使用求解器并尝试使用 VBA 使其自动化的经验,最好的解决方案是不要自动化 Excel 的求解器,而是编写自己的迭代来解决您的目标。例如

 For j = 1 To 100
 result = someCalculation
        If result > minConstraint Then
           result = j - 1
           Exit For
        Else
        End If
 Next j
于 2014-07-11T23:30:53.507 回答
0

将某个单元格(例如 H9)设置为 1 并在代码中使用对该单元格的引用。SolverAdd CellRef:="$F$5", Relation:=1, FormulaText:="$H$9"

于 2014-07-11T22:38:25.860 回答