微分動的計画法 (DDP)(びぶんどうてきけいかくほう、英: Differential Dynamic Programming)は軌道最適化のために用いられる最適制御アルゴリズムの一つである。 本アルゴリズムは1966年に Mayne[1] によって紹介され、 その後JacobsonとMayneによるその名の由来となった著作の中で分析された。[2] このアルゴリズムはシステムのダイナミクスとコスト関数を局所的な二次形式によってモデル化し、2次収束を示す。 また、Pantojaのstep-wise Newton法とも密接に関連している。[3] [4]
有限horizon離散時間問題
次式のダイナミクスを考える。
![{\displaystyle \mathbf {x} _{i+1}=\mathbf {f} (\mathbf {x} _{i},\mathbf {u} _{i})}](https://wikimedia.org/api/rest_v1/media/math/render/svg/72555f434018fe87ec7ef4c07ec8d109ee5d45d7)
(1)
これは制御入力
のもとでの状態
の時刻
から
までの時間発展を表している。 総コスト
は、ランニングコスト
と最終コスト
の和として与えられ、状態
と終端時刻までに適用する制御系列
によって定まる:
![{\displaystyle J_{0}(\mathbf {x} ,\mathbf {U} )=\sum _{i=0}^{N-1}\ell (\mathbf {x} _{i},\mathbf {u} _{i})+\ell _{f}(\mathbf {x} _{N}),}](https://wikimedia.org/api/rest_v1/media/math/render/svg/f6cd2e1a1d72ba0326b538c4999a1bee7fb6e6ea)
ここで
であり、時刻
における状態
は式(1)によって与えられる。この最適制御問題の解は、上式を最小化する制御系列
である。 これに対し、ありえる初期状態すべてを考えるのではなく、特定の初期状態
に対して最適な入力系列
を求めるのが 軌道最適化である。
動的計画法
今、
を制御入力の部分系列
とし、 残余コスト(cost-to-go)
を
から
までの部分和として定義する:
![{\displaystyle J_{i}(\mathbf {x} ,\mathbf {U} _{i})=\sum _{j=i}^{N-1}\ell (\mathbf {x} _{j},\mathbf {u} _{j})+\ell _{f}(\mathbf {x} _{N}).}](https://wikimedia.org/api/rest_v1/media/math/render/svg/5661492cef1798913bbfa8e9858008dd71c1f6e9)
最適な残余コスト、または時刻
での価値関数 は、以下のような制御系列による最小化で与えられる :
![{\displaystyle V(\mathbf {x} ,i)\equiv \min _{\mathbf {U} _{i}}J_{i}(\mathbf {x} ,\mathbf {U} _{i}).}](https://wikimedia.org/api/rest_v1/media/math/render/svg/5fda5ec3e9969a8c490074a0007c361a99d8f086)
を出発点として、 時間を遡る方向に制御入力を一ステップ毎に最小化することにより、動的計画法の原理は全体の最小化に必要な計算量を削減する。
![{\displaystyle V(\mathbf {x} ,i)=\min _{\mathbf {u} }[\ell (\mathbf {x} ,\mathbf {u} )+V(\mathbf {f} (\mathbf {x} ,\mathbf {u} ),i+1)].}](https://wikimedia.org/api/rest_v1/media/math/render/svg/9642ecadd356a325a4e9b7698901d917aa72490a)
(2)
これがベルマン方程式である。
微分動的計画法 (DDP)
微分動的計画法 (DDP) では、新しい制御系列を計算するために、ノミナルな軌道に沿って逆方向パスの計算を行い、次に(得られた制御系列のもとでの)新しい軌道とその評価値を得るために順方向パスの計算を行うことを繰り返す。逆方向パスの計算から始めよう。
式(2)の
演算子の引数
![{\displaystyle \ell (\mathbf {x} ,\mathbf {u} )+V(\mathbf {f} (\mathbf {x} ,\mathbf {u} ),i+1)}](https://wikimedia.org/api/rest_v1/media/math/render/svg/3fbe3a5b5213bd9c88b2342cbc04d1088f4a1dc8)
に関して、その値の変分を時刻
の状態-入力ペア
周辺でとったものを
としよう:
![{\displaystyle {\begin{aligned}Q(\delta \mathbf {x} ,\delta \mathbf {u} )\equiv &\ell (\mathbf {x} +\delta \mathbf {x} ,\mathbf {u} +\delta \mathbf {u} )&&{}+V(\mathbf {f} (\mathbf {x} +\delta \mathbf {x} ,\mathbf {u} +\delta \mathbf {u} ),i+1)\\-&\ell (\mathbf {x} ,\mathbf {u} )&&{}-V(\mathbf {f} (\mathbf {x} ,\mathbf {u} ),i+1)\end{aligned}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/30a5ca8d44def366176de29ca7bac9f19e7775c0)
これを、二次形式に展開する。
![{\displaystyle Q(\delta \mathbf {x} ,\delta \mathbf {u} )\approx {\frac {1}{2}}{\begin{bmatrix}1\\\delta \mathbf {x} \\\delta \mathbf {u} \end{bmatrix}}^{\mathsf {T}}{\begin{bmatrix}0&Q_{\mathbf {x} }^{\mathsf {T}}&Q_{\mathbf {u} }^{\mathsf {T}}\\Q_{\mathbf {x} }&Q_{\mathbf {x} \mathbf {x} }&Q_{\mathbf {x} \mathbf {u} }\\Q_{\mathbf {u} }&Q_{\mathbf {u} \mathbf {x} }&Q_{\mathbf {u} \mathbf {u} }\end{bmatrix}}{\begin{bmatrix}1\\\delta \mathbf {x} \\\delta \mathbf {u} \end{bmatrix}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/a3fa3fa1f9775c0831042c2c80419469696eb24a)
(3)
ここで用いる
の表記は、森本淳 (ATR脳情報研究所) の記法の変形版であり、添え字は偏微分の分母を示している。 [5] 見やすくするため、添え字の
を省略し、次の時間ステップの変数は
のようにプライムをつけて示そう。テイラー展開により係数は以下となる。
![{\displaystyle {\begin{alignedat}{2}Q_{\mathbf {x} }&=\ell _{\mathbf {x} }+\mathbf {f} _{\mathbf {x} }^{\mathsf {T}}V'_{\mathbf {x} }\\Q_{\mathbf {u} }&=\ell _{\mathbf {u} }+\mathbf {f} _{\mathbf {u} }^{\mathsf {T}}V'_{\mathbf {x} }\\Q_{\mathbf {x} \mathbf {x} }&=\ell _{\mathbf {x} \mathbf {x} }+\mathbf {f} _{\mathbf {x} }^{\mathsf {T}}V'_{\mathbf {x} \mathbf {x} }\mathbf {f} _{\mathbf {x} }+V_{\mathbf {x} }'\cdot \mathbf {f} _{\mathbf {x} \mathbf {x} }\\Q_{\mathbf {u} \mathbf {u} }&=\ell _{\mathbf {u} \mathbf {u} }+\mathbf {f} _{\mathbf {u} }^{\mathsf {T}}V'_{\mathbf {x} \mathbf {x} }\mathbf {f} _{\mathbf {u} }+{V'_{\mathbf {x} }}\cdot \mathbf {f} _{\mathbf {u} \mathbf {u} }\\Q_{\mathbf {u} \mathbf {x} }&=\ell _{\mathbf {u} \mathbf {x} }+\mathbf {f} _{\mathbf {u} }^{\mathsf {T}}V'_{\mathbf {x} \mathbf {x} }\mathbf {f} _{\mathbf {x} }+{V'_{\mathbf {x} }}\cdot \mathbf {f} _{\mathbf {u} \mathbf {x} }.\end{alignedat}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/c63a4a00992d824f146fd7fdc473ae99dc9e8022)
最後の三つの方程式に現れる最終項はベクトルとテンソルの縮約(contraction)を表す。 二次形式で近似された式(3) を入力
に関して最小化することで次式を得る。
![{\displaystyle {\delta \mathbf {u} }^{*}=\operatorname {argmin} \limits _{\delta \mathbf {u} }Q(\delta \mathbf {x} ,\delta \mathbf {u} )=-Q_{\mathbf {u} \mathbf {u} }^{-1}(Q_{\mathbf {u} }+Q_{\mathbf {u} \mathbf {x} }\delta \mathbf {x} ),}](https://wikimedia.org/api/rest_v1/media/math/render/svg/23191416dc415b35e02be4f820e8db3fb998d3ac)
(4)
これにより、オープンループ項
とフィードバック項
が与えられる。この結果を式(3) に代入することにより 時間
における価値関数が得られる。
![{\displaystyle {\begin{alignedat}{2}\Delta V(i)&=&{}-{\tfrac {1}{2}}Q_{\mathbf {u} }Q_{\mathbf {u} \mathbf {u} }^{-1}Q_{\mathbf {u} }\\V_{\mathbf {x} }(i)&=Q_{\mathbf {x} }&{}-Q_{\mathbf {u} }Q_{\mathbf {u} \mathbf {u} }^{-1}Q_{\mathbf {u} \mathbf {x} }\\V_{\mathbf {x} \mathbf {x} }(i)&=Q_{\mathbf {x} \mathbf {x} }&{}-Q_{\mathbf {x} \mathbf {u} }Q_{\mathbf {u} \mathbf {u} }^{-1}Q_{\mathbf {u} \mathbf {x} }.\end{alignedat}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/65b81687b0dfa4cb0c142ee0a557e0e7b57350b9)
から
に向かって、再帰的に価値関数
の局所的な二次形式のモデルと、制御の修正量
を求めるのが逆方向パスの計算である。 先に述べたように、価値関数の初期値は
である。逆方向パスの完了後、新しい軌道にそって順方向パスの計算を行う。
![{\displaystyle {\begin{aligned}{\hat {\mathbf {x} }}(1)&=\mathbf {x} (1)\\{\hat {\mathbf {u} }}(i)&=\mathbf {u} (i)+\mathbf {k} (i)+\mathbf {K} (i)({\hat {\mathbf {x} }}(i)-\mathbf {x} (i))\\{\hat {\mathbf {x} }}(i+1)&=\mathbf {f} ({\hat {\mathbf {x} }}(i),{\hat {\mathbf {u} }}(i))\end{aligned}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/b020cb18a594408561fd3c038ed588053b38a04e)
以上の逆方向パスと順方向パスの計算を収束するまで繰り返す。
正則化と直線探索
微分動的計画法は、ニュートン法と同様に、二次収束を示すアルゴリズムである。 そのため、最小値に向けて大きな修正ステップが発生するため、収束を保証するために、正則化 および/または直線探索が必要となる。 [6] [7] DDPの文脈における正則化とは、式(4)の行列
の正定性を保証することである。 DDPにおける直線検索は、オープンループ制御修正量
をスカラー
でスケーリングすることに対応する。
参照
参考文献
- ^ Mayne, D. Q. (1966). “A second-order gradient method of optimizing non-linear discrete time systems”. Int J Control 3: 85–95. doi:10.1080/00207176608921369.
- ^ Mayne, David H. and Jacobson, David Q. (1970). Differential dynamic programming. New York: American Elsevier Pub. Co.. ISBN 0-444-00070-4. https://books.google.com/books?id=tA-oAAAAIAAJ
- ^ de O. Pantoja, J. F. A. (1988). “Differential dynamic programming and Newton's method”. International Journal of Control 47 (5): 1539–1553. doi:10.1080/00207178808906114. ISSN 0020-7179.
- ^ Liao, L. Z.; C. A Shoemaker (1992). Advantages of differential dynamic programming over Newton's method for discrete-time optimal control problems. Cornell University, Ithaca, NY. https://hdl.handle.net/1813/5474.
- ^ Morimoto, J.; G. Zeglin; C.G. Atkeson (2003). "Minimax differential dynamic programming: Application to a biped walking robot". Intelligent Robots and Systems, 2003.(IROS 2003). Proceedings. 2003 IEEE/RSJ International Conference on. Vol. 2. pp. 1927–1932.
- ^ Liao, L. Z; C. A Shoemaker (1991). “Convergence in unconstrained discrete-time differential dynamic programming”. IEEE Transactions on Automatic Control 36 (6): 692. doi:10.1109/9.86943.
- ^ Tassa, Y. (2011). Theory and implementation of bio-mimetic motor controllers (PDF) (Thesis). Hebrew University.
外部リンク
- PythonによるDDPの実装例
- MATLABによるDDPの実装例