自動運転プログラムの改良

概要

このサンプルコードでは, ニューロ進化(Neuro Evolution)とQ学習で車が各コースを走れるようになる進化・学習をします.
そのままのコードだと, Q学習ではコースの一部を走れるようになるところまで進化します. また, ニューロ進化ではすべてのコースを走れるようになるところまで進化します. そのため, この課題でニューロ進化を用いる場合は, 単にコースを走り切るだけではなく, 障害物を避けたりするなどの走る+αの動作を車ができるようになることが期待されています.

drawing

目次


ダウンロード

Google Driveのリンクからダウンロードし, 適当なフォルダで展開してください. その後, Unity HubのOpenから展開した.projフォルダを開いてください.

Google DriveにはUnityのライブラリは上げていませんが, Unity Hubで開く際に自動的に生成されます.

macOS, Unity 2021.3.1f1以外で開く際には警告が出ますが, 警告に従ってバージョンの変更やパッケージのインストールなどをすれば以下の環境で動作することを確認しています.

動作確認

Unity Editor上での操作説明

Sceneの実行

ProjectタブのAssets > Scenesから選択したいシーンをダブルクリックして開きます.

unityinterface

画面上部の再生ボタンを押すと学習が始まります. 学習中にはGame画面に表示されるスライダでプログラムの実行速度を調整できます. コンピュータへの負荷を少なくしたい場合は, 描画をオフにすることもできます。

ソースコード

教科書(Mind Render AI Drill)の3, 4, 5章にサンプルコードが何をしているかがわかりやすく書いてあるので, 詳しくはそちらもご覧ください.

設定されているChallengeについて

この課題ではあらかじめChallengeが設定されています. もちろん必ずしもこのChallengeに沿って課題を進める必要はありませんが参考にしてみてください. シーンファイルは以下にあります. 各シーンを開き再生を押すとニューロ進化による学習が始まります.
/Assets/Scenes/NE_Challenge/Challenge*.unity

Challenge 1

コース上に数個の岩が設置されるのでその岩に当たらずにコースを一周できるように進化・学習させる(岩の位置は固定)

Challenge 2

Challenge1と同じくコース上に数個の岩が設置されるのでその岩に当たらずにコースを一周できるように進化・学習させる(岩の位置は固定ではなくランダム)

Challenge 3

坂の上から岩が転がり落ちてくるのでその岩に当たらずにコースを一周できるように進化・学習させる

Challenge 4

コース上に一定間隔で岩が置かれていて近づくと転がり落ちてくる. 岩の大きさや速度はランダム


Python連携について

Pythonを使うと, Numpyなどの数値計算モジュールやTensorflow, PyTorchなどの機械学習モジュールを用いることができます. 詳しくは教科書等を参考にしてください.

準備

必要なパッケージがダウンロードされていない場合はpipなどで適宜ダウンロードしてください.

$ pip install numpy $ pip install asyncio $ pip install asyncio-dgram $ pip install torch

使い方

  1. ターミナルで/env/src/PyNECommunicator.pyを実行している状態にします
$ python /env/src/PyNECommunicator.py
  1. /Asset/Scenes/PythonNE/下のシーンファイルをUnityから実行します

現在/env/src/PyNNBrain.pyNNBrain.csをPytorchに翻訳したものですが, Pythonで新しいニューラルネットワークの構造なども定義することができます.

SceneをPython対応させるには

通常のシーン(Challengeなど)をPythonに対応したシーンにするには以下の変更が必要です. 詳しくは既にPython対応しているシーンを参照して下さい.