モードドライバ(NN VS SVM)
モードドライバをNN(ニューラルネットワーク)とSVM(サポートベクタマシン)で比較してみた。
結論としては両方とも所望の結果が得られた。ただし、
・マップ形状が大きく異なる
・両方ともオープンループで学習後、FBで評価する必要ある
・NNの方が計算に時間がかかる
というものでした。順番に説明します。
まず図の真ん中のアクセルパターン(上は加速度、下は車速)で学習します。
その結果SVMで得られたマップがこんな感じでなめらかできれいな局面です。
そして学習結果を反映してOLシミュレーションするとギリギリですが±2km/hのスペックを満たしています。
この結果を反映してマップ作ったらより局面が大きな形状となりました。
この結果を反映してOLシミュレーションはあまりうまくいかなかったのでFBシミュレーションしたところ偏差少なくより追従性の良い結果が得られました。
ちなみにこの結果を反映して学習、マップ作ったところより局面が強調されたマップとなりました。多少の変化ならわかりますが、ちょっと極端な気もしますがこれがSVMで得られた結果です。
つづいて、一番最初のアクセルパターンでNNによる学習した結果です。SVMよりも性能悪そうですがそこそこ満足できる結果です。
その時のアクセルマップですが、SVMと全く違う形状ですね。それでもそこそこスペック満足しているのは面白いところです。
で、1回目のNN OLシミュレーションで作ったマップ使って再びOLとFBシミュレーションしてみました。OLの場合はかなりスペックアウトしているのでFBで試したところ元のアクセル量がうまく合ってなかったためFBしてもかなりスペックアウトしています。
そこでNNでFBの結果を反映してマップ作りました。最初の局面がさらに強調されています。形は違いますがSVMと同じ傾向ですね。
このマップを用いてOLシミュレーションしたところスペック満たすような結果が得られました。加速度だけ注目すればSVMよりも良い結果になっています。
ついでに同じマップでFBシミュレーションしてみました。より偏差が小さくなっています。
先ほどのFBシミュレーションの結果を用いてマップ作り直したところ形状が少し緩やかになりました。
で、OLシミュレーションしたところスペックを満足しかつパルス状の大きな加速度も発生せずにきれいな波形をしています。
この後も試したところでPCがブルースクリーンエラーでデータが消えてしまいましたので結果を掲載できませんンがさほど性能は向上しませんでした。
まとめ
結果を以下4点にまとめます。
・SVM NNともに学習するたびにマップ形状が変化
・SVM NNでともにFBシミュレーションすることで所望の結果が得られた
・NNの方がSVMよりも2倍以上学習に時間がかかった
・OL⇒学習⇒FB⇒学習⇒OLと繰り返すとより良い結果が得られた
・目標車速、加速度からアクセル量をもとめるというアイデアは概ね妥当
追伸
アクセルパターンに対する車両の加速性能はOLシミュレーションなので簡単だったが、車速追従(モード)シミュレーションはドライバモデルの設計が難しかった。しかし本手法使えば簡単なコードでモード走行時も簡単に表現できるので燃料や電力消費マップを組み合わせれば燃費シミュレーションも簡単。と思いながらも世の中にはこうしたモデルたくさんあると思いますが・・・
また15年以上前に目標車速と加速度に基づいたFFマップをFBシミュレーションと何らかの学習を使って作成するという仮説の1例を解くことができたのは良かったが、まだもやっとする。
今後について
もともと車速追従と同時に人間の学習(習熟)過程に興味があったが、車速追従は簡単にできた。しかし、学習過程というのはそうしたデータも手元にないこともあるので調べること難しいが機会があったらやってみたい。あとはディープラーニングの世界?あと今回使ったNNのコードどっかで紹介します。ちなみにsklearnを使用しました。