■ はじめに

前回、ロジックエージェントの実装が終わり、今回からようやく学習に入ります。

今回の課題をそのまま強化学習でやると、学習すればするほど、乱暴者になり道に跳び出したり、信号無視したりするのでボツにしました。

ですので、先ずはエージェントの動きを真似する模倣学習をする事にします。

実は模倣学習については、「そう言う物がある」程度の知識を本で読んだ程度なので、ChatGPTさんだけが頼りです。


■ 「学習沼」をガサる

今までの経験上、このまま突っ込んだら沼一直線なのは、目に見えているので、先ずはこのコードで出てきたバグをまとめます。

①学習するほど乱暴になるエージェント

AI「宅配なんて速くてナンボでしよう」

反省「時間経過の罰を入れたので、早いほど良いと考えたか…」

②受でずっとルートの探索をしている

AI「配送?そんないつやるかも書かれてないこと、知らんよ」

反省「ルート検索は、エピソードのはじめだけと言っておくの忘れた」

③北に動いて道にぶつかって止まる

AI「取り敢えず上に動いておけば、大体正解。道は進入不可だから止まって正解」

反省「配達順番で変わるけど…」

④信号マークに引っかかって止まる

AI「なんか知らんものがあるから止まっとけ」

反省「それ、信号なんですけど…」

なんか、まとめ直すとこれは駄目かな。という気になってきます。

気を取り直して、仕様でバグがでない様にします。

流石に、これまで何回も触っているのでエラーは無い…が仕様から作ったコードにマップが無い。

不審に思ってChatGPTさんに理由を聞いてみると…

>「マップを入れて学習すると、例えばAに行く学習が『北に上がるのがだいたい良いはず』とエージェントに変なクセがつくんよ。マップは切離して学習するのかオススメ」

確かに似たことになった経験はあるね。

ここいらでマップなし教師データにトライしてみますか!

■教師データとは、

教師データと難しげな呼び方をしていますが、その「正体」は、

教師データの1サンプル = {
  obs : 観測ベクトル
  action : ロジックが選んだ行動
}
これを 大量に集めて教師データとします。

ここで、obs 側は、

・自己位置(row, col)
・向き
・A* 次方向
・信号色
・人配置(5×5)
・配送フェーズ
・is_delivering

これらは、delivery_logic.pyに入ってます。

action 側(教師)は、ロジックの最終出力なので、この課題ではコチラです。

action ∈ {
  0: 前進
  1: 左回転
  2: 右回転
  3: 停止
}

このエージェントの動きと適正な確率をChatGPTさんに出してもらって、そこに向けてコードを調整します。

       目 標   調 整
FORWARD        55〜60%   56.8%
TURN_LEFT        8〜12%   12.4%
TURN_RIGHT      8〜12%   11.8%
STOP                  15〜20%     19.0%

調整はこうしました。

①人出現率を下げる
 Forward が増える。
 TURN_LEFT,TURN_RIGHTが減る。

②赤信号を少し減らす
 STOP が落ちる。

③ A* Forward を増やす
 Forward が増える。

今の設計は、こうなります。

ハイブリッド型(現実ロボ型)
・A*は意思決定
 A*は静的障害物のみ
 回避後に再A*

・NNは反射神経
 NNがローカル回避

 この動きはロジックエージェントと同じになります。

■結果:

学習を含めた仕様書へのリンク
github.com/logicmaker256-prog/Imitation_Learning-/blob/main/new_doc_2.txt

学習のコードへのリンク【CNN5×5バージョン】
・学習データの収集
github.com/logicmaker256-prog/Imitation_Learning-/blob/main/Gather_training_data.py

・学習本体
github.com/logicmaker256-prog/Imitation_Learning-/blob/main/Learn_from_training_data.py

・動作チェックコード
github.com/logicmaker256-prog/Imitation_Learning-/blob/main/Imitation_learning_verification.py

学習データの収集と学習本体では、鋭く学習の精度が立ち上がるところが見られます。

チェックコードでは、人を回避して無事にゴールする所が見られます。

■ 今回の学び:

今回の学びは、

「マップ込みの学習では、マップ依存の学習になってしまう」

ですね。

自分もはじめマップありでやっていたのですが、沼の気配がビンビンしたので、マップなしでやってみました。

今のところ、上手くいっているみたいなのでこれで進みます。

■まとめ

何となく、「模倣学習」とか言っていたのですが、やって見ると想像していたのとは大分違ったようで、やり方から勉強し直しですな。

設計要件は僕が決めてますけど、ChatGPTさんありきでないと、進めない領域に入ったようです。

やっぱり、AI活用は大事ですよね。

今回、なんとか教師データを作ることに成功したので、次回はこれの活用ですかね。