2015-10-21 7 views
-1

Я хотел бы знать, как я могу получить код для выполнения операции решателя на разных строках (300 строк). Существует одна целевая переменная, несколько ограничений и две переменные, которые необходимо оптимизировать. Используя приведенную ниже команду, я получаю сообщение об ошибке, что проблема слишком велика для Solver, что может быть ошибкой только в синтаксисе. Это мой синтаксис:Применение решения к различным строкам

Dim i As Long 
For i = 7 To 310 

SolverOk SetCell:="$AA$" & i, MaxMinVal:=2, ValueOf:=0, ByChange:="$AE$:$AF$" & i, _ 
    Engine:=1, EngineDesc:="GRG Nonlinear" 
SolverAdd CellRef:="$AA$" & i, Relation:=1, FormulaText:="-0.000001" 
SolverOk SetCell:="$AA$" & i, MaxMinVal:=2, ValueOf:=0, ByChange:="$AE$:$AF$" & i, _ 
    Engine:=1, EngineDesc:="GRG Nonlinear" 
SolverAdd CellRef:="$AB$" & i, Relation:=3, FormulaText:="0.000001" 
SolverOk SetCell:="$AA$" & i, MaxMinVal:=2, ValueOf:=0, ByChange:="$AE$:$AF$" & i, _ 
    Engine:=1, EngineDesc:="GRG Nonlinear" 
SolverAdd CellRef:="$AC$" & i, Relation:=1, FormulaText:="-0.000001" 
SolverOk SetCell:="$AA$" & i, MaxMinVal:=2, ValueOf:=0, ByChange:="$AE$:$AF$" & i, _ 
    Engine:=1, EngineDesc:="GRG Nonlinear" 
SolverAdd CellRef:="$AD$" & i, Relation:=3, FormulaText:="0.000001" 
SolverOk SetCell:="$AA$" & i, MaxMinVal:=2, ValueOf:=0, ByChange:="$AE$:$AF$" & i, _ 
    Engine:=1, EngineDesc:="GRG Nonlinear" 
SolverAdd CellRef:="$AE$" & i, Relation:=3, FormulaText:="0" 
SolverOk SetCell:="$AA$" & i, MaxMinVal:=2, ValueOf:=0, ByChange:="$AE$:$AF$" & i, _ 
    Engine:=1, EngineDesc:="GRG Nonlinear" 
SolverAdd CellRef:="$AF$" & i, Relation:=3, FormulaText:="0" 
SolverOk SetCell:="$AA$" & i, MaxMinVal:=2, ValueOf:=0, ByChange:="$AE$:$AF$" & i, _ 
    Engine:=1, EngineDesc:="GRG Nonlinear" 
SolverAdd CellRef:="$AE$" & i, Relation:=1, FormulaText:="1" 
SolverOk SetCell:="$AA$" & i, MaxMinVal:=2, ValueOf:=0, ByChange:="$AE$:$AF$" & i, _ 
    Engine:=1, EngineDesc:="GRG Nonlinear" 
SolverAdd CellRef:="$AF$" & i, Relation:=1, FormulaText:="1.5" 
SolverOk SetCell:="$AA$" & i, MaxMinVal:=2, ValueOf:=0, ByChange:="$AE$:$AF$" & i, _ 
    Engine:=1, EngineDesc:="GRG Nonlinear" 
SolverOptions MaxTime:=0, Iterations:=1000000, Precision:=0.000001, Convergence _ 
    :=0.0001, StepThru:=True, Scaling:=True, AssumeNonNeg:=True, Derivatives:=1 
SolverOptions PopulationSize:=100, RandomSeed:=0, MutationRate:=0.075, Multistart _ 
    :=False, RequireBounds:=False, MaxSubproblems:=0, MaxIntegerSols:=0, _ 
    IntTolerance:=1, SolveWithout:=False, MaxTimeNoImp:=30 
    SolverSolve 
Next i 

End Sub 
+0

что значение 'i', когда он терпит неудачу? – SeanC

+1

'ByChange: =" $ AE $: $ AF $ "& i' - вы уверены, что это правильно? Может быть, это должно быть 'ByChange: =" $ AE $ "& i &": $ AF $ "& i' Также я думаю, что вам нужно Reset solver после каждой итерации. –

ответ

0

Может быть, это все, что вам нужно, Hanna:

Sub hanna() 
    Dim i As Long 

    For i = 7 To 310 
    SolverReset 

    With Rows(i) 
     SolverOk SetCell:=.Range("AA1").Address, _ 
       MaxMinVal:=2, _ 
       ByChange:=.Range("AE1:AF1").Address, _ 
       Engine:=1 
     SolverAdd CellRef:=.Range("AA1").Address, Relation:=1, FormulaText:="-0.000001" 
     SolverAdd CellRef:=.Range("AB1").Address, Relation:=3, FormulaText:="0.000001" 
     SolverAdd CellRef:=.Range("AC1").Address, Relation:=1, FormulaText:="-0.000001" 
     SolverAdd CellRef:=.Range("AD1").Address, Relation:=3, FormulaText:="0.000001" 
     SolverAdd CellRef:=.Range("AE1").Address, Relation:=1, FormulaText:="1" 
     SolverAdd CellRef:=.Range("AF1").Address, Relation:=1, FormulaText:="1.5" 
     SolverSolve UserFinish:=True 
    End With 
    Next i 
End Sub 
+0

У меня возникает соблазн уменьшить этот ответ ... как это помогает OP, когда у них явно есть несколько разных аргументов для 'Relation' и' FormulaText'? –

+0

Приношу свои извинения Ханне. Я, хотя она применяла различные ограничения для одной и той же ячейки. Отредактировано выше. – shg

+0

Если вы измените все ссылки на строку '1' на' i', я думаю, что это было бы прекрасно (квалифицируя это утверждение тем, что я едва кодировал функцию решателя). –

Смежные вопросы