メインコンテンツへスキップ

非線形モデル予測制御とPANOC

·1729 文字·4 分
目次

はじめに
#

非線形システムを対象としたモデル予測制御の最適化問題を解くPANOCというアルゴリスムについてまとめた。 PANOCはProximal Averaged Newton-type method for Optimal Controlの略である。

非線形システムのモデル予測制御 (NMPC, Nonlinear Model Prodictive Control) は非線形計画問題 (NLP, Nonlinear Programming) となる。このような最適化問題は、システムの非線形性により解きづらい (ill-condition) 。また、予測ホライゾンが長いと変数の数も増えてしまう。

PANOCは近接勾配法 (Proximal Gradient Method) と準ニュートン法を組み合わせたアルゴリズムである。 解の初期値から最適解の近傍までは、近接勾配法によって大域的な収束性を保証する。そして、最適解に近づくと、準ニュートン法により高速に収束させる。

PANOCはOpEnというRust製ライブラリに実装されている。インストール方法は以下の記事を参照。

Rust製最適化ライブラリOpEnのインストール – Helve Tech Blog

他手法との比較
#

非線形計画問題を解く手法として、SQP(逐次二次計画法)、近接勾配法 , 準ニュートン法などがある。 SPQは、非線形最適化問題のKKT (Karush-Kuhn-Tucker) 条件を求めるものである。解候補の更新ごとに二次計画問題を解いて探索方向を決定している。 近接勾配法は微分不可能な点を含む凸関数最適化を解く手法である。詳細は以下の記事を参照。

近接勾配法(Proximal Gradient Method) - Qiita

準ニュートン法は、ニュートン法におけるヘッセ行列を近似して解を更新する手法である。

PANOCと比較した各手法の長所・短所は以下の通り。

SQP
#

  • 長所:主双対内点法と並んで、非線形最適化問題に対する主要な解法である。
  • 短所:解の更新 (ouetr loop) ごとに二次計画問題 (inner loop) を解く必要があり、計算負荷が高い。

近接勾配法
#

  • 長所:アルゴリズムが単純。
  • 短所:1次微分の情報しか用いないため、収束が遅い(1次収束)。

準ニュートン法
#

  • 長所:最適解近傍では収束が速い(超1次収束ないし2次収束)。
  • 短所:初期点が最適解から離れている場合、収束しづらい(大域的収束性が悪い)。

これらの手法と比較して、PANOCは以下の長所を持つ。

  • アルゴリズムが単純
  • 解の近傍では収束が早い(超1次収束)
  • メモリ消費が少ない
  • inner loopやヘッセ行列の計算が不要

PANOCの概要
#

PANOCのアルゴリズムの概要を示す。 まず、解くべきモデル予測制御問題は以下の通り。

$$ \min \ \Sigma_{n=0}^{N-1} l_n(x_n, u_n) + l_N (x_N) \\\ \mathrm{s.t.} \ x_0 = \bar{x}, u_n \in U_n, x_{n+1} = f_n (x_n, u_n) \ (n=0, ..., N-1) $$

ここで、\(f_n\)はシステムのダイナミクス、\(x_n\)はシステムの状態、\(u_n\)はシステムへの入力である。また、\(U_n\)は入力制約、\(l_n\)は最適制御のコスト関数、\(N\)は制御ホライゾンである。

式変形は省くが、最適化問題を以下の通り単純に表記する。

$$ \min_{u \in U} \ l(u) $$

なお、\(u\)に対する\(l(u)\)の勾配\(\nabla l(u)\)は自動微分により計算される。

PANOCのおおまかなアルゴリズムは以下の通り。

  1. \(k=0\), 解の初期値\(u^0\)を準備
  2. 勾配\(\nabla l(u^k)\)を計算
  3. \(\bar{u}^k = \mathrm{prox}_{\gamma g} (u^k - \gamma \nabla l (u^k))\), \(r^k = (u^k - \bar{u}^k)/\gamma\)を計算
  4. 準ニュートン法による解の更新方向\(d^k = -H_k r^k\)を計算
  5. \(u^{k+1} = u^{k} - (1-\tau_k)\gamma r^k +\tau_k d^k\)で解を更新(\(\tau_k\)は直線探索で求める)
  6. 終了条件を満たせば終了。満たさない場合は7.に進む
  7. \(k \leftarrow k + 1\)と更新して2.に戻る

上記の3.では近接勾配法による解の候補\(\bar{u}^k\)を求めている。 また、4.の\(H_k\)はヘッセ行列の逆行列に相当し、記憶制限BFGS法などでその近似行列を求める。

5.では近接勾配法の解候補と準ニュートン法の解候補の重みづけ平均を求めている。理想的には、解候補が最適解から遠いとき前者の解候補を重視し(\(\tau = 0\)), 最適解に近づくと後者の解候補を重視する(\(\tau = 1\))。 また、直線探索ではforward-backward envelope (FBE) という緩和関数を用いる。FBEは微分不可能な関数を微分可能に緩和する特性がある。

参考
#

Helve
著者
Helve
関西在住、電機メーカ勤務のエンジニア。X(旧Twitter)で新着記事を配信中です

関連記事

準ニュートン法による最適化とPythonによる実装
·2104 文字·5 分
準ニュートン法による最適化アルゴリズムへの理解を深めるため、Pythonで実装した。
最適制御向け最適化ライブラリOpEnに入門する
··1759 文字·4 分
Rust製の最適制御向け最適化ライブラリOpEnに入門するためチュートリアルの非線形計画問題を解いたので、備忘録を兼ねてまとめた。
Rust製最適化ライブラリOpEnのインストール
··868 文字·2 分
Rust製の最適化ライブラリOpEnをWindows 10にインストールし、Pythonから使えるようにする。
滑らかではない凸最適化とForward-backward envelope
·1486 文字·3 分
Forward-backward envelope (FBE) に関する論文を読んだので、備忘録として残す。
非線形最適化ソルバIPOPTのアウトプットの読み方
·2049 文字·5 分
主双対内点法を用いた非線形最適化ソルバIPOPTのアウトプットの読み方を解説する。
IPOPTのprint levelによる出力の詳細度合い
·2694 文字·6 分
非線形最適化ソルバIPOPTのprint levelオプションによる、最適化計算の出力の詳細度合いについてまとめた。