【发布时间】:2015-09-28 18:05:35
【问题描述】:
我正在尝试优化 Excel 中的三个参数,以尽量减少实验值和理论值之间的误差。我在 for 循环中对每个参数使用 Solver,一次一个。但是,我想迭代这个求解器for循环(循环内循环),直到实验值和理论值的误差小于某个目标值。
我的实验值为$K25.
我的理论值(根据我的模型方程计算)是$J$25。
我需要优化的参数是$C$4,$C$5,$C$6
当我运行以下 VBA 代码时,$C$4、$C$5、$C$6 中的参数不会从它们的初始值改变。但是,宏编译得很好,没有错误。有谁能帮帮我吗?
代码如下:
Sub Macro3()
Application.ScreenUpdating = False
SolverReset
Dim j As Integer
For j = 1 To 100 Step 1
If "$J$25" > "$K$25" Then
Dim i As Integer, s As String
For i = 4 To 6 Step 1
s = Format(i, "0")
SolverOk SetCell:="$J$25", MaxMinVal:=2, ValueOf:=0, ByChange:="$C$" & s, Engine:= _
1, EngineDesc:="GRG Nonlinear"
SolverOptions MaxTime:=0, Iterations:=1000000, Precision:=0.000001, Convergence _
:=0.00001, StepThru:=False, Scaling:=True, AssumeNonNeg:=True, Derivatives:=1
SolverOptions PopulationSize:=100, RandomSeed:=0, MutationRate:=0.075, Multistart _
:=False, RequireBounds:=True, MaxSubproblems:=0, MaxIntegerSols:=0, _
IntTolerance:=1, SolveWithout:=False, MaxTimeNoImp:=30
SolverOk SetCell:="$J$25", MaxMinVal:=2, ValueOf:=0, ByChange:="$C$" & s, Engine:= _
1, EngineDesc:="GRG Nonlinear"
SolverSolve (True)
SolverReset
Next i
End If
Next j
Application.ScreenUpdating = True
End Sub
【问题讨论】: