擬スペクトル法
擬スペクトル法は、状態を「ノードと呼ぶ特別な点での値」を通る1本の多項式で表し、運動方程式をノードでの等式に置き換えます。 このページでは、OpenGoddard が使う LGL(Legendre–Gauss–Lobatto)擬スペクトル法の手順を、小さな数値例とともに説明します。
- 時間を に写す。 どんな長さの区間も同じ形で扱えるようにする。
- ノードを置く。 区間の両端と、その間の特別な位置に点を置く。
- 状態を多項式で表す。 ノードでの値 を未知数とし、それらを通る多項式で状態を近似する。
- 微分を行列で計算する。 多項式の微分は、ノード値の線形結合で正確に計算できる。
- 運動方程式を等式制約にする。 各ノードで「多項式の傾き=運動方程式の右辺」を課す。
- 積分を和で計算する。 目的関数の積分を、ノード値の重み付き和で近似する。
- 非線形計画問題として解く。 すべてをノード値の式で書き、SLSQP で解く。
1. 時間の正規化
Section titled “1. 時間の正規化”ひとつの区間の時刻 を、正規化時間 に1次式で写します。
微分は と変換されます。 終了時刻 も最適化の変数にできるので、所要時間が未知の問題もこの形のまま扱えます。
2. LGL ノード
Section titled “2. LGL ノード”個の LGL ノード を、次のように置きます。
- 両端 、
- その間の 点: 次のルジャンドル多項式 の導関数 の根
たとえば なら、ノードは です。式は難しく見えますが、性質は単純で、 区間の両端に近いほど点が密になるように並びます。

なぜ等間隔ではいけないのか
Section titled “なぜ等間隔ではいけないのか”多くの点を通る高次多項式を等間隔の点で作ると、区間の端で大きく振動します(ルンゲ現象)。 点を増やすほど振動はむしろ大きくなり、近似として使えません。 端に点を集めた LGL ノードではこの振動が起きず、点を増やすと誤差が指数的に小さくなります。

3. 状態を多項式で表す
Section titled “3. 状態を多項式で表す”各ノードでの状態の値 を最適化の未知数とします。状態の時間変化は、これらの値を通る 次多項式で表します。
はラグランジュ基底多項式で、ノード では 1、他のノードでは 0 になる多項式です。 したがって、ノード での多項式の値はちょうど になります。制御も同じくノードでの値 を未知数にします。
4. 微分行列
Section titled “4. 微分行列”多項式の微分も多項式なので、ノード での傾きはノード値の線形結合で正確に表せます。
の行列 を微分行列といいます。 はノードの位置だけで決まるので、計算の最初に一度だけ作れば済みます。
小さな例:N = 3 の場合
Section titled “小さな例:N = 3 の場合”ノードは で、微分行列は
です。 のノード値 に掛けると
となり、導関数 の各ノードでの値 に一致します。2次式は3点の多項式で正確に表せるので、微分も正確です。

5. 運動方程式を等式制約にする
Section titled “5. 運動方程式を等式制約にする”運動方程式 を、各ノードで成り立つ等式に置き換えます。時間の正規化で出る係数 を含めて、
左辺は「多項式の傾き」、右辺は「運動方程式が要求する傾き」です。この差を欠損(defect)と呼び、すべて 0 になることを要求します。 状態が複数あれば、状態ごとに同じ式を並べます。

ここが直接法の核心です。微分方程式を数値積分するのではなく、「傾きが合っている」という代数方程式の集まりとして扱います。 最適化ソルバーは、目的関数を良くしながら、すべての欠損を 0 にするノード値を探します。
6. 積分を和で計算する
Section titled “6. 積分を和で計算する”目的関数の積分項は、ノードでの値の重み付き和(Gauss–Lobatto 求積)で計算します。
重み もノードの位置だけで決まります。この求積は 次以下の多項式に対して厳密です。 では で、これは高校数学でも出てくるシンプソンの公式そのものです。
7. 非線形計画問題として解く
Section titled “7. 非線形計画問題として解く”以上で、最適制御問題はすべてノード値の式になりました。未知数をまとめたベクトルを
とすると、解くべき問題は
という非線形計画問題(NLP)です。境界条件はノードの最初と最後の値 、 に直接課せます。 LGL ノードは区間の両端を含むので、これが自然に書けます。
規模の感覚をつかむため、例題07(状態3つ、制御1つ、ノード50個)を数えると、 未知数は 個、欠損の等式は 本です。この程度の規模なら、SciPy の SLSQP で数秒から数十秒で解けます。
OpenGoddard の利用者が書くのは、運動方程式 、境界条件 、経路制約 、目的関数 と だけです。 ノードの計算、微分行列と欠損の組み立て、求積、NLP の呼び出しはライブラリが行います。
区間に分ける
Section titled “区間に分ける”1本の多項式は滑らかな関数しか上手に表せません。推力が最大からゼロへ急に切り替わる、段分離で質量が跳ぶ、といった 不連続があると、その前後で多項式が振動します。
そこで、時間を複数の区間(phase)に分け、区間ごとに別々のノードと多項式を使います。区間の境目(ノット)では、 前の区間の最後のノードと次の区間の最初のノードについて接続条件を課します。
- 状態が連続する場合:(OpenGoddard が自動で課す)
- 段分離のように跳ぶ場合: のような条件を自分で書く

制御は区間の境目で不連続でも構いません。どこで区間を分けるか(ノットの時刻)も、最適化の変数にできます。
精度を確かめる
Section titled “精度を確かめる”ソルバーが「成功」を返しても、それは離散化した NLP の解が見つかったという意味です。元の最適制御問題の解として十分な精度があるかは、別に確かめます。 基本的な方法は、ノード数を増やして解が変わらないことを確認することです。

OpenGoddard には、ノード間での運動方程式の残差を見積もる estimate_error と、誤差の大きい区間を自動で細かくする
solve_adaptive もあります(問題の書き方)。
理論と数値解法
Section titled “理論と数値解法”- F. Fahroo and I. M. Ross, “Costate Estimation by a Legendre Pseudospectral Method”, J. Guidance, Control, and Dynamics, 24(2), 2001. doi:10.2514/2.4709
- I. M. Ross and F. Fahroo, “Pseudospectral Knotting Methods for Solving Nonsmooth Optimal Control Problems”, J. Guidance, Control, and Dynamics, 27(3), 2004. doi:10.2514/1.3426
- Q. Gong, F. Fahroo, and I. M. Ross, “Spectral Algorithm for Pseudospectral Methods in Optimal Control”, J. Guidance, Control, and Dynamics, 31(3), 2008. doi:10.2514/1.32908
- A. V. Rao et al., “Algorithm 902: GPOPS, A MATLAB Software for Solving Multiple-Phase Optimal Control Problems Using the Gauss Pseudospectral Method”, ACM Transactions on Mathematical Software, 37(2), Article 22, 2010. doi:10.1145/1731022.1731032
- J. T. Betts, Practical Methods for Optimal Control and Estimation Using Nonlinear Programming, 2nd ed., SIAM, 2010. 直接法全般の標準的な教科書。
打上げ機の軌道最適化
Section titled “打上げ機の軌道最適化”- I. Ross, C. D’Souza, F. Fahroo, and J. Ross, “A Fast Approach to Multi-Stage Launch Vehicle Trajectory Optimization”, AIAA Guidance, Navigation, and Control Conference and Exhibit, 2003. doi:10.2514/6.2003-5639
- J. R. Rea, “A Legendre Pseudospectral Method for Rapid Optimization of Launch Vehicle Trajectories”, Massachusetts Institute of Technology, 2001. MIT リポジトリ
日本語の文献
Section titled “日本語の文献”- 原田正範「ヤコビ擬スペクトル法による最適化手法の重み関数の高精度計算法」『日本機械学会論文集 C編』77(784), pp. 4458–4467, 2011. doi:10.1299/kikaic.77.4458
- 原田正範「ヤコビ擬スペクトル法を用いた最適制御問題の解法における双対変数の推定」『計測自動制御学会論文集』49(8), pp. 808–815, 2013. doi:10.9746/sicetr.49.808
- 原田正範「高次ガウス・ロバット則の重み関数を用いたヤコビ擬スペクトル法による軌道最適化」『日本機械学会論文集 C編』73(728), pp. 1075–1080, 2007. doi:10.1299/kikaic.73.1075
- 藤川貴弘・土屋武司・田口秀之「観測ロケットを利用した極超音速飛行試験: 2 軌道検討」『平成24年度宇宙輸送シンポジウム: 講演集録』2013. JAXA リポジトリ