我正在尝试解决一个优化问题,其中一个输入变量必须以最小和最大约束为界。因为我最后没有运行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
答案 0 :(得分:2)
解算器可能有点不稳定。尝试将MaxMinVal = 2行设置在第一行之上。当我运行求解器宏时,我总是必须将其设置在约束之上。偶尔它会抛出错误。
我尝试复制您的问题(使用excel 2010),但它适用于我。随着MxMinVal的开头和结尾。你可以尝试重新启动你的机器并擅长,看看问题是否仍然存在。但是你的代码对我有用,所有三个约束都会加载。
我对您的代码提出的另一个一般建议是添加:
Application.Calculation = xlAutomatic
这会将计算变为自动。我在运行涉及求解器的更复杂的宏时关闭它。
答案 1 :(得分:0)
将某个单元格(例如H9)设置为1,并在代码中使用对此单元格的引用。 SolverAdd CellRef:=“$ F $ 5”,关系:= 1,FormulaText:=“$ H $ 9”
答案 2 :(得分:0)
根据我使用求解器并尝试使用VBA自动化它的经验,最好的解决方案是不自动化Excel的悲伤,而是编写自己的迭代来解决目标问题。 例如
For j = 1 To 100
result = someCalculation
If result > minConstraint Then
result = j - 1
Exit For
Else
End If
Next j