最適制御3

概要 前回はいわゆるフィードフォワードの最適制御について考えた。 すなわち、ある初期時刻$t_0$と初期状態$x(t_0)$が一つ与えられたときに、終端時刻$t_f$までに加える最適入力$u(t)$を求めようとした。 そして、最適な$u(t)$を求めるためには、オイラー・ラグランジュ方程式という微分方程式を解かなくてはならないことが示された。 このアプローチでは、初期状態$x(t_0)$が少しでも変化すると、オイラー・ラグランジュ方程式を新たに解き直す必要があり、とても時間が掛かる。 そこでここからは、フィードバックの最適制御について考える。 すなわち、任意の時刻$t$と状態$x(t)$が与えられたときに、終端時刻までに加える最適制御$u(x,t)$を求めたいのである。 問題 連続時間の非線形ダイナミクス $$\dot x = f(x,u,t)$$ にしたがうシステムに対して、状態フィードバック$u=u(x,t)$を設計することで、評価関数 $$J = \phi(x(t_f),t_f) + \int_{t}^{t_f}L(x(\tau),u(\tau),t)d\tau$$ を最小化したい。 ここで初期値$x,t$は任意であるとする。 必要条件 $J$を最小化する$u$が満たすべき方程式としてハミルトン・ヤコビ・ベルマン方程式 (HJB equation : Hamilton-Jacobi-Belman equation)が知られている。 これはハミルトニアン $$ H(x,\lambda,u,t):=L(x,u,t)+\lambda^t_f f(x,u,t) $$ 及び値関数 $$ J^o(x,t) = \min_u J $$ に対して $$ \frac{\partial J^o}{\partial t} + \min_u H\left(x,\frac{\partial J^o}{\partial x},u,t \right) = 0 $$ として記述される。 この偏微分方程式の境界条件は $$ J^o(x(t_f),t_f) = \phi(x(t_f),t_f) $$ である。 導出 値関数$J^o$は、「時刻$t$と、その時点で与えられたシステムの状態$x$に対して、その時刻以降$t_f$までに最適な入力を加えることにより最小化されたときのコスト」を表す。 ベルマンの最適性の原理により微小時刻$\Delta t$に対して $$ J^o(x(t),t) = \min_u\left\{ J^o(x(t+\Delta t), t+\Delta t) + \int_t^{t+\Delta t} L(x(\tau),u(\tau),\tau)d\tau \right\} $$ が成り立つ。 この式が意味するところは、「時刻$t$から$t_f$までに最適な入力を求める」のと、「時刻$t+\Delta t$から$t_f$までに最適な入力がすでに求まっているときに、時刻$t$から$t+\Delta t$までの最適な入力を求める」のは一緒、ということ。 $J^o(x(t+\Delta t),t+\Delta t)$をテーラー展開すると $$ J^o(x(t+\Delta t),t+\Delta t) = J^o(x(t),t) + \left\{ \frac{\partial J^o}{\partial x}f(x,u,t) + \frac{\partial J^o}{\partial t} \right\}\Delta t + O(\Delta t^2) $$ これを代入すると $$ J^o(x(t),t) = \min_u\left\{ J^o(x(t),t) + \left\{ \frac{\partial J^o}{\partial x}f(x,u,t) + \frac{\partial J^o}{\partial t} \right\}\Delta t + \int_t^{t+\Delta t} L(x(\tau),u(\tau),\tau)d\tau + O(\Delta t^2) \right\} $$ $J^o$及び$\frac{\partial J^o}{\partial t}$は$u$に陽に依存しないため、括り出して$\Delta t\rightarrow 0$とすると $$ \frac{\partial J^o}{\partial t} + \min_u\left\{ L(x,u,t) + \frac{\partial J^o}{\partial x}f(x,u,t) \right\} $$ が得られる。 残りはハミルトニアン及びラグランジュ乗数の定義を用いて終了。...

November 8, 2015

最適制御2

概要 今回からダイナミクスを持つシステムへの最適制御を考える。 考え方は前回の場合とそれほど変わらず、ダイナミクスを制約条件として考えると、必要条件として、二点の境界条件をもつ微分方程式が導出される。 今回はその導出と、問題を解くための数値計算法を紹介する。 教科書は引き続きE. Brysdn, Jr. Yu-Chi Ho, “Applied Optimal Control”, CRC Press, 1975を用いる。 離散時間システムの場合 問題 非線形の差分方程式で表されるつぎのシステムを考える。 $$ x(i+1) = f(x(i),u(i)), \quad x(0):\text{given}, \quad i = 0,\cdots,N-1. \tag{2.2.1} $$ ただし、$x(i)\in R^n$は状態ベクトル、$u(i)\in R^m$は入力ベクトルである。 以下の評価関数 $$J = \phi(x(N)) + \sum_{i=0}^{N-1}L(x(i),u(i))$$ を最小化する$u$を求めたい。 必要条件の導出 $(2.2.1)$は等式制約条件として捉えられる。 そのため、ラグランジュ乗数$\lambda(i)$を用いて $$\bar J := \phi(x(N)) + \sum_{i=0}^{N-1}\left[ L(x(i),u(i)) + \lambda^T(i+1){f(x(i),u(i)) - x(i+1)} \right] \tag{2.2.3}$$ を考える。 ハミルトニアン $$H^i := L(x(i),u(i)) + \lambda^T(i+1)f(x(i),u(i))$$ を定義すると、$(2.2.3)$は $$\bar J = \phi(x(N)) -\lambda^T(N)x(N) + \sum_{i=1}^{N-1}\left[ H^i - \lambda^T(i)x(i) \right] +H^0$$ と書き換えられる。...

November 6, 2015

kivyを用いたマルチプラットフォームアプリの開発環境を整える

kivyとは PythonのNUI(Natural User Interface)でのマルチタッチアプリケーション開発のためのオープンソースライブラリ。 一つのソースコードからAndroid、iOS、Linux、MacOSX、Windowsへと出力できるうえ、ライセンスフリーで使用できる。 今回はそんなkivyの本体と、OSX及びiOSへのパッケージング環境の導入に挑戦したが、情報が少なく結構苦労したので、メモしておく。 自分の環境 MacOSX 10.11 Yosemite Xcode 7.1 homebrew, pip導入済み kivyのインストール この辺を参考にしてインストールした。 まず、kivyの導入に必要なcythonとpygameをインストールする。 *11月3日23:25追記:下記のkivy-iosと最新のcythonの相性が悪いため、バージョン0.21をインストールする必要があることがわかった。 pip install cython==0.21 pip install pygame その後本体をインストールするのだが、最も好ましいと思われるpipを用いた方法はうまくいかず。 仕方ないので、brew caskを用いてインストール。 brew cask install kivy もしくはgitから直接 git clone http://github.com/kivy/kivy make でも良い。 上手くインストールされたか確かめるため、Hello Worldしてみよう。 適当なエディタでmain.pyを作成し import kivy kivy.require('1.8.0') ## replace with your current kivy version ! from kivy.app import App from kivy.uix.label import Label class MyApp(App): def build(self): return Label(text='Hello world') if __name__ == '__main__': MyApp()....

November 4, 2015

最適制御1

概要 非線形最適制御の勉強を始めた。 実は去年授業で単位は取得したのだけれど、ほとんど覚えていないも同然なので、はじめからやり直すことにする。 教科書はE. Brysdn, Jr. Yu-Chi Ho, “Applied Optimal Control”, CRC Press, 1975を用いた。 式番号は教科書に倣った。 今回はとりあえず、ダイナミクスなしの最適化問題について、ざっと復習する。 制約なし最小化問題 問題 決定変数$u=[u_1 \ \cdots \ u_m]^T\in R^m$を決めることで、評価関数 $$L(u):R^m\rightarrow R$$ を最小化したい。 必要条件 $L$が$C^2$級の関数であるとき、$u$が最小値であるのための必要条件は $$\frac{\partial L}{\partial u} = 0 \tag{1.1.3}$$ 及び $$\frac{\partial^2 L}{\partial u^2} \succeq 0$$ が成り立つことである。 $(1.1.3)$を満たす$u$を停留点という。 十分条件 $u$が局所最小であるための十分条件は$(1.1.3)$及び $$\frac{\partial^2 L}{\partial u^2} \succ 0$$ が成り立つことである。 数値計算法 勾配法 (gradient decent) 、ニュートン法 (newton method) を始め、様々な数値計算法が用いられる。 等式制約付き最小化問題 問題 決定変数$u\in R^m$を決めることで等式制約 $$ f(x,u)=0 \tag{1.2.2} $$ のもと、評価関数 $$L(x,u): R^n\times R^m\rightarrow R$$ を最小化したい。ここで$x=[x_1 \ \cdots \ x_n]^T\in R^n, \ f=[f_1 \ \cdots \ f_n]^T:R^n\times R^m\rightarrow R^n$とおいた。...

October 25, 2015

10月の雑記

自分には昔から何事においても、与えられた目標に対して最小限の努力でアプローチしようとする悪い癖がある。 この癖は多分、中高の陸上部時代に、きつい練習の中で少しずつ形成されはじめ、いつの間にか凝固してしまったものなんだと思う。 今まではそれでも誤魔化しながらなんとかやってきたのだけれど、今後大きなしっぺ返しを食らう予感もしていて、どうにか直したいと思っている。 そしてそのために「血反吐を吐くような努力をもってして、なお目標を達成できない」という経験は、失敗できる学生時代のうちに必要な経験だと感じていた(自分で書いていてマゾいと思う)。 けれども、そういう努力を要求される環境を積極的に自分で整えるほど、自分はマゾにはなれない。 そこで今回の海外生活に、そういう環境を期待していたのである。 さて、実際に飛び込んでみて、気づいたこと。 まず、これまでの自分の人生の側には、その都度適切な高さのハードルを置いてくれる先生のような役割の人がいて、その人たちのおかげで、今少し高いハードルを前にしても「これまでのように跳べば大丈夫」と思える自信がついてきている。 というのも、こっちに来てから毎日が、言語や文化の違いで戸惑うことばかりだけれど、それら一つ一つは今まで跳んできたハードルに比べれば、多分そんなに高くない。 悲観主義だと思っていた自分の性格が、経験のおかげで楽観主義に寄ってきていることに気づいた。 また、僕が海外生活に期待していたのは、今まで見たこともない巨大なハードルを次々に置かれるような過酷な環境だった。 けれども、現実は期待とは裏腹に、むしろそんなもの誰も置いてくれなかった。 インターンを始めた頃、簡単に感じられる課題と、何をしても褒めてくれる上司を前に、誇らしい気持ちになった。 けれどもすぐに、目標が誰かに与えられるだけの期間が終わり、自分で置いたハードルを自分で跳ぶことが要求されはじめていることに気づいた。 自分でハードルを置くというのは、自分が今できないことと向かい合うことと同義であり、実際やってみると結構きつい。 向かう方向や速度は正しいのか判断する、舵取りとしての技量も必要になり、そこに正解はない。 しかしやはり気持ちはポジティブだ。 きっとこの先、この舵取りとしての技量がもっと求められるようになってくるだろうし、そうなってほしいという期待がある。 まとめると、自分はこれまでまあまあ上手くやってきたし、これからもまだまだ未熟だという、ありきたりな結論に至る。 海外生活も残り5ヶ月。 学んで、考えて、身につけて帰ろう。

October 24, 2015