Optimizer

Model ElementOptimizerは、最適化に必要なすべての要素を含むオブジェクトです。

クラス名

Optimizer

属性の概要

名前 プロパティ コマンドで変更可能か 設計可能か
label Str ()    
objectives Double ()
method Str ()  
weights Double (1.0E-3)  
eqConstraints List ()
ineqConstraints List ()
maxit Int (50)  
accuracy Double (1.0e-3) ×  
dsa Str ()    
fdStep Double (1.0e-6)  
type Str ()  
end Double ()  
dtout Double ()  
simFunction Function ()  
plot Bool ()  

使用法

opt = Optimizer (objective=listOfResponses, optional_attributes)

属性

必須属性
objectives
最適化する応答変数のリスト。
応答は、前のセクションで説明したライブラリ応答クラスを使用して定義する必要があります。
objectivesは必須です。
オプション引数
label
最適化エンジンのラベル[文字列]。
labelは省略可能です。
デフォルト:"Optimzer"。
type
解析タイプ[文字列]。
以下のいずれかを選択します:"KINEMATICS"、"STATICS"、"QUASISTATICS"、"DYNAMICS"、"STATICS"。
typeは省略可能です。
デフォルト:"STATICS"。
end
シミュレーションの終了時刻[倍精度]。
endは省略可能です。
デフォルト:0.0。
dtout
出力間隔[倍精度]。
dtoutは省略可能です。
デフォルト: 0.01。
method
最適化方法[文字列]。
現時点では、"SLSQP"のみがサポートされます。その他の最適化手法は今後追加される予定です。
methodは省略可能です。
デフォルト:"SLSQP"。
weights
各応答変数の重みのリスト[倍精度]。
weightsは省略可能です。
デフォルト:応答変数ごとに1.0。
eqConstraints
等式制約を形成する応答変数名のリスト。これらの応答は、成功した最適化の最後に0に等しくなります。
eqConstraintsは省略可能です。
ineqConstraints
不等式制約を形成する応答変数名のリスト。これらの応答は、成功した最適化の最後に0より大きくなります。
ineqConstraintsは省略可能です。
simFunction
type+end+dtoutの代わりに最適化で使用可能なユーザー定義関数。
simFunctionは省略可能です。simFunctiontype+end+dtoutは相互排他的です。
maxit
反復計算の最大数[整数]
maxitは省略可能です。
デフォルト:50。
accuracy
最適化を終了するための精度[倍精度]。
accuracyは省略可能です。
デフォルト:1.0e-3。
dsa
DSAタイプ[文字列]。コメント1をご参照ください。
オプションは以下のとおりです:"ADJOINT"、"DIRECT"、"AUTO"、"NONE"、"FD"、"FD_Serial"。
dsaは省略可能です。
デフォルト:"AUTO"。
fdStepType
有限差分法のステップサイズを計算する方法を決定します。以下のいずれかにする必要があります:
  • UNIFORM
  • PROPORTIONAL
  • AUTO
  • AUTOUNIFORM
  • AUTOPROPORTIONAL
詳細については、コメント4をご参照ください。
[文字列]
fdStepTypeは省略可能です。
デフォルト:“AUTOACTUAL”。
fdStep
有限差分法を使用した感度計算に使用されるステップサイズ。dsa="FD"の場合にのみ適用されます。このプロパティは、fdStepTypeが“AUTO”、“AUTOACTUAL”、または“AUTORELATIVE”の場合は無視されます。詳細については、コメント4をご参照ください。
摂動の係数を指定すること(浮動小数点数の割り当て)も、直接ステップを定義すること(長さがDvの数と一致する番号のリストの割り当て)もできます。
[倍精度]
fdStepは省略可能です。
デフォルト:1.0e-3。
updatefdStep
有限差分法のステップサイズが更新されるまでの反復回数。指定した場合、最適化中にMotionSolveが何らかの方法(fdStepTypeで決定)でステップサイズを更新します。
plot
Trueに設定した場合、最適化中に応答変数値のプロットが生成されます。
[ブール]
plotは省略可能です。
デフォルト:True

例:

# Create an optimization object and start an optimization
def optimizationJob (self):
    obj = [self.a2x, self.a2y, self.a2psi] # Define the 3 objectives
    wt = [1, 1, 1] # Define the weights
    opt = Optimizer ( # Define the optimizer
            label = "Optimize RMS2", # Label
            objective = obj, # Objectives
            weights = wt, # Weights
            type = "KINEMATICS", # Simulation Type
            end = 2, # End Time
            dtout = 0.01, # No. of steps
            plot = True, # Display plots
            dsa = "AUTO", # DSA type)
            accuracy=1e-3
    )
# Run an optimization
x = self.opt.optimize()
return x

コメント:

  1. プロパティの概要、使用理由、および拡張方法については、プロパティをご参照ください。
  2. DSAのタイプ
    dsa = "AUTO"という設定を使用すると、問題に基づいて最善の手法が選択されます。
    • 設計変数の数が応答の数より多い場合は、随伴手法が使用されます。
    • 設計変数の数が応答の数より少ない場合は、直接手法が使用されます。
    • 解析のタイプが“動的”である場合は、必ずFD手法が使用されます。

      dsa = "DIRECT"という設定を使用すると、設計感度マトリクスを計算するために直接微分法が選択されます。

      dsa = "ADJOINT"という設定を使用すると、設計感度マトリクスを計算するために随伴手法が選択されます。

      dsa = "FD"という設定を使用すると、設計感度マトリクスを計算するために有限差分法が選択されます。有限差分は並列で実行されます。

  3. 最適化の実行が完了したら、最適化エンジンが以下の値を返します:
    status
    最適化エンジンの終了モード(下記参照)。
    success
    最適化エンジンが正常に収束したかどうかを示すフラグ(True/False)。
    njev
    反復計算の総数。
    nfev
    関数評価の数。
    fun
    関数の最終コスト。
    x
    最適化された設計変数値のリスト(配列)。
    message
    終了コードメッセージ(下記参照)。
    jac
    各応答に対して最適化された設計変数のヤコビアン(配列)。
    nit
    勾配評価の数。
    終了モードは次のように定義されます:
    -1
    勾配評価が必要(g & a)。
    0
    最適化が正常に終了。
    1
    関数評価が必要(f & c)。
    2
    独立変数より多くの等式制約。
    3
    LSQ部分問題内の3*nを超える反復計算。
    4
    不等式制約に適合性がない。
    5
    LSQ部分問題内の非正則マトリクスE。
    6
    LSQ部分問題内の非正則マトリクスC。
    7
    階数不足の等式制約部分問題HFTI。
    8
    直線探索用の正方向導関数。
    9
    反復計算の制限を超えている。
    10
    目的関数値の取得中にエラーが発生した。
    11
    目的関数の勾配値を取得中にエラーが発生した。
    12
    現在の境界での局所収束に十分近づいている。

    使用法については、MotionSolveユーザーズガイドのMultibody Optimization User's Guideをご参照ください。

  4. 有限差分法のステップサイズを計算するために使用可能なアプローチが5つあります:
    UNIFORM
    すべてのDvに均一なステップサイズが使用されます。各Dvでの摂動は、Δ= fdStepとなります。
    PROPORTIONAL
    各Dvのステップサイズはその大きさに比例します。Dviでの摂動は、Δ= fdStep * max (1.0, Dvi|)|となります。
    AUTO
    各Dvに最適なステップサイズを使用します。MotionSolveは、局所誤差と2次導関数の概算に基づいて各Dvに最適なステップサイズを計算するための内部ルーチンを備えています。このアプローチによって計算される感度は、最も正確ですが、計算コストが高くなります。追加のコストが受け入れられない場合は、“AUTOACTUAL”または“AUTORELATIVE”を検討してください。
    AUTOUNIFORM
    MotionSolveが最初のDvで最適なステップサイズを計算します。他のDvでも同じステップサイズが使用されます。
    AUTOPROPORTIONAL
    MotionSolveが最初のDvで最適なステップサイズを計算します。他のDvのステップサイズは、それらの大きさに比例します。