われがわログ

最適化アルゴリズムとかプログラミングについて書きたい

最適制御問題の求解アルゴリズムの実装を公開しました

以下のページで、最適制御問題の数値解法の一つであるSCGRA (Sequential Conjugate Gradient-Restoration Algorithm)のMATLAB実装を公開しました。

github.com

最適制御問題の数値解法には非線形計画法に帰着させる直接法と、変分法に基づく間接法があり、これは後者に該当します。 さらに詳しく言えば、1次の勾配法です。

このプログラムは私が学生の頃に書いたものであり、もうメンテはしていませんが、もしかしたら需要があるかもと思って公開しました。 アルゴリズムの詳細は以下のPDFにまとめてあります。

scgra/doc.pdf at master · estshorter/scgra · GitHub

以下のスクリプトがExampleです。

scgra/RunCar.m at master · estshorter/scgra · GitHub

このスクリプトでは、以下の状態方程式および拘束条件に従う車の最短時間制御問題を解いています。 途中まではアクセル全開で、その後は急ブレーキをかけて減速する解(bang-bang解)が得られるはずです。


\begin{aligned}
\ddot{x} = u \\
|u| \leq u_{\max}
\end{aligned}

補遺

変分法を基礎としている以上仕方ないのですが、関数を変分した時の値をプログラムに入力せねばならず、正直手間です。。 直接法だとそれをしなくてよいので楽ですね。