時間最適制御例 GEKKO

WBOY
WBOY転載
2024-02-10 20:54:031190ブラウズ

时间最优控制示例 GEKKO

#質問内容

gekko で時間最適制御問題を実装しようとしています。特に、この短いコード スニペットをコピーしました。 実用性についてはここでも報告されています:

リーリー

このままでは問題なく動作しますが、速度の最終値の制約を解除したい場合に使用します。

m.fix_final(velocity, 0) 行をコメントアウトしても、結果は変わりません。いずれにせよ、最終速度はゼロであるべきだと想定しているようです。また、最終速度を 0 から他の数値に変更すると、gekko からエラーが発生します: 例外: @エラー: ソリューションが見つかりません

解決策は簡単に見つかるはずです。特に最終速度に制約が課されていない場合、最適な制御は、その間ずっと Accelerated() を続けることです。

ご協力いただければ幸いです。 :)


正解


最終制約を

m.fix_final(velocity, 0)m.fix_final(position) から変更します。 、300) に変更されました。 リーリー

これは、

position>=300 となるように最後のノードに不等式制約を適用しますが、これは等価制約である可能性もあります。また、実行不可能な解法によりソルバーが最終条件を達成できない場合には、m.minimize(last*(position-300)**2) などのソフト制約を使用することもあります。代わりに、最終制約に可能な限り近い解を取得しようとします。 m.fix_final() を使用して最終値が固定されると、その変数は評価されなくなるため、導関数もゼロに固定されます。 こちらで説明されているように、これはgekkoの既知の制限です。

以上が時間最適制御例 GEKKOの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。