カスタマイズした最適化アルゴリズム

現在の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で何度か反復計算を実行してモデルの動作を確認しておくことをお勧めします。