Я пытаюсь оптимизировать три параметра в Excel, чтобы минимизировать ошибку между экспериментальным значением и теоретическим значением. Я использую 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