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
- 最適化する応答変数のリスト。
- label
- 最適化エンジンのラベル[文字列]。
- type
- 解析タイプ[文字列]。
- end
- シミュレーションの終了時刻[倍精度]。
- dtout
- 出力間隔[倍精度]。
- method
- 最適化方法[文字列]。
- weights
- 各応答変数の重みのリスト[倍精度]。
- eqConstraints
- 等式制約を形成する応答変数名のリスト。これらの応答は、成功した最適化の最後に0に等しくなります。
- ineqConstraints
- 不等式制約を形成する応答変数名のリスト。これらの応答は、成功した最適化の最後に0より大きくなります。
- simFunction
- type+end+dtoutの代わりに最適化で使用可能なユーザー定義関数。
- maxit
- 反復計算の最大数[整数]
- accuracy
- 最適化を終了するための精度[倍精度]。
- dsa
- DSAタイプ[文字列]。コメント1をご参照ください。
- fdStepType
- 有限差分法のステップサイズを計算する方法を決定します。以下のいずれかにする必要があります:
- “UNIFORM”
- “PROPORTIONAL”
- “AUTO”
- “AUTOUNIFORM”
- “AUTOPROPORTIONAL”
- fdStep
- 有限差分法を使用した感度計算に使用されるステップサイズ。dsa="FD"の場合にのみ適用されます。このプロパティは、fdStepTypeが“AUTO”、“AUTOACTUAL”、または“AUTORELATIVE”の場合は無視されます。詳細については、コメント4をご参照ください。
- updatefdStep
- 有限差分法のステップサイズが更新されるまでの反復回数。指定した場合、最適化中にMotionSolveが何らかの方法(fdStepTypeで決定)でステップサイズを更新します。
- 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
コメント:
- プロパティの概要、使用理由、および拡張方法については、プロパティをご参照ください。
- DSAのタイプdsa = "AUTO"という設定を使用すると、問題に基づいて最善の手法が選択されます。
- 設計変数の数が応答の数より多い場合は、随伴手法が使用されます。
- 設計変数の数が応答の数より少ない場合は、直接手法が使用されます。
- 解析のタイプが“動的”である場合は、必ずFD手法が使用されます。
dsa = "DIRECT"という設定を使用すると、設計感度マトリクスを計算するために直接微分法が選択されます。
dsa = "ADJOINT"という設定を使用すると、設計感度マトリクスを計算するために随伴手法が選択されます。
dsa = "FD"という設定を使用すると、設計感度マトリクスを計算するために有限差分法が選択されます。有限差分は並列で実行されます。
- 最適化の実行が完了したら、最適化エンジンが以下の値を返します:
- 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をご参照ください。
- 有限差分法のステップサイズを計算するために使用可能なアプローチが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のステップサイズは、それらの大きさに比例します。