モードドライバの比較
ただいまpythonやMatlabのコードをいろいろ整理しています。仮定として、モード走行のアクセルパターンを走行パターン通りにオープンループで操作したものを初期値としてニューラルネットワーク、サポートベクタマシン、速度フィードバックの時系列学習(?)の方法で比較してみました。
結論としてはNN、SVMは少ない回数の学習でスペックを満足するドライバができた。またその結果をオープンループで反映、つまり違う走行パターンでもそこそこつかえるのではないか?ということです。一方単純な速度フィードバックの場合は一度そのパターンで走行し、次の走行は前のアクセルパターンをベースにし速度フィードバックをかけるというアイデアです。その場合は回数が多くなるがスペックを満足するドライバができた。ただし学習を重ねるにつれアクセルパターンが振動的になるのと、時系列アクセルデータをベースにしているためパターンが違えば最初からやり直しです。
ではシミュレーション結果を見てみます。
これはNN、SVM、単純速度フィードバックそれぞれの初期値となるアクセルパターンと車両の応答です。左上がアクセルパターンで左中の赤色が車速です。それ以外は意味がないのであまり気にしないでください。

ここからはニューラルネットワークの結果です。3回学習したらスペックを満足(±2km/h)できました。初期値(上述のオープンループ)をもとにした学習(アクセルマップ)はほぼフラットな平面です。80秒付近がだいぶ偏差ありますね。


これが2回目です。アクセルマップが変形しました。また30秒付近の巡行はスペック満足し、やはり80秒付近は大きく外れますが偏差がかなり小さくなりました。


さらに3回目です。アクセルマップはより大きく変化し3回目で±2km/hの範囲内に収まりました。巡行時に着目すると20km/hのところではいったんアクセルを緩めてから、ある一定量に踏み込んでいます。目標車速と目標加速度のが決まればアクセル開度は唯一の値をしめしますが、学習結果がずれてるので車速フィードバックによりこのような動作になっています。


ではつづいてSVMでの学習結果です。これもわりとシンプルな面を描いていますね。


で2回目の結果です。NNと同じくアクセルマップが変形しました。やはり80秒付近がだいぶずれていますね。


3回目です。アクセルマップがさらに変化しているのがわかります。80秒付近だけが合うペックアウトしてます。


4回目の学習です。ここでスペックを満たしました。


で単純に車速FBだけでやってみました。

epoc=1
これが4回目ですがNN、SVMではすでに満足いく学習ができてますが車速FBの場合はFBゲインのみに依存するんで4回では満足いく結果となりません。

しかし6回目でようやく満足いく結果が得られました。しかしアクセルの波形を見ると結構振動的で急峻な感じがするのがわかります。

で試しに10回ほど繰り返してみました、車速パターンをトレースするのはできてるんですがその代わりにアクセル操作が振動的になってるのがわかります。これはNNやSVMでは見られない傾向です。なぜならば車速FBした前の回のアクセルパターンをそのまま今回のシミュレーションに使い、それでも偏差が大きいところはFBによりアクセルを踏んだり放したりするのでしかたありません。

まとめ
・NNやSVMは車速FB型よりも学習回数が少なく良い結果が得られる。
・車速FBでも繰り返し時系列アクセルパターンを学習することによりスペックを満足できる。
・車速FBは繰り返すほどどんどん波形が振動的になる。
ということです。あとやれることとすれば”学習に使うアクセルパターンをもっとたくさん用意する。”とか”パラメータ(車両、制御、学習)変える。”くらいかなと思います。結論から言えば変わるのですが評価するまでもないのでここで一旦終了です。
ちょっとずつディープラーニング勉強します。
おまけ
最後にやった単純な速度FBだけの結果を用いてSVMで学習しOLシミュレーションするとどうなるか気になったので試した。
気になった理由はアクセル操作が振動的になる。→おなじ目標でもアクセルマップが平均的な値をとるのでは?
というアイデアで試したところ、なんとなくそれっぽい結果となった。SVM+フィードバックの繰り返しよりもうまくいき、めでたしめでたし。

