カスタマイズした最適化アルゴリズム
現在のMotionSolveでは、SciPyでSLSQP最適化エンジンのみをサポートしています。ただし、単純な問題であることから簡潔で高速なアルゴリズムで十分である場合や、SLSQPよりもニーズに適したアルゴリズムがある場合は、独自のアルゴリズムを使用することも検討に値します。
MotionSolveは、勾配ベースのアルゴリズムまたは勾配を使用しないアルゴリズムを容易に使用できるように設計されています。次の例は、SciPyで‘L-BFGS-B’を使用した最適化を、わずか3つのステップで実現する方法を示しています。
手順1:モデルを作成して最適化エンジンを追加する
>>> # Create model
>>> m = Model('test_L_BFGS_B')`
...
>>> # Add response
>>> resp1 = RMS2(...)
>>> resp2 = RMS2(...)
>>> # Define the optimizer
>>> opt = Optimizer(
objective = [resp1, resp2],
weight = [1.0, 1.0],
type = 'STATIC',
dsa = 'AUTO',
accuracy = 1e-5
)
手順2:最適化エンジンからコストおよび感度の手法を取得する
>>> cost = opt.cost
>>> sens = opt.sensitivity
手順3:scipy.minimizeで‘L-BFGS-B’メソッドをコールする
>>> result = scipy.minimize(
method = 'L-BFGS-B',
fun = cost,
x0 = x0
)
適切な方法で十分にモデルを拘束していれば、最適値を得ることができます。独自のアルゴリズムを使用すると中間結果が出力ファイルに保存されないので、デバッグプロセスが困難になります。独自のアルゴリズムに切り替える前に、SLSQPで何度か反復計算を実行してモデルの動作を確認しておくことをお勧めします。