ではこのQ学習を使って走行ルートを決めてみましょう。 そのためにまず環境、エージェント、状況、行動、報酬を明確にしておく必要があります。
まず環境とエージェントに関しては簡単で
環境 = マップ (ルート選択画面)
エージェント = 車 (緑の四角)
となります。
次に状況に関しては前ページの例では分岐点としましたが、今回はもう少しプログラミングらしく
状況 = マップの座標
とします。座標は車がマップのどの位置に示すかを表す数値の組で、横方向の位置を"X座標"、縦方向の位置を"Y座標"といいます。マップの一番左の列のX座標は1で右に行くにつれて数字が増えます。またマップの一番下の行のY座標は1で上に行くに連れて数字が増えます。
次に行動に関しては前ページの例と同様に
行動 = 方向を選んで移動する
となります。なおプログラミングの都合から移動方向には次の数値を割り当てることにします。
移動する方向 | 数値 |
---|---|
上 | 1 |
左 | 2 |
下 | 3 |
右 | 4 |
また、移動した際にもらえる報酬のルールは次の様にします。
ルール1: 道から外れたら -100 点
ルール2: ゴールにたどり着いたら +100 点
ルール3: 一度通った場所に戻ったら -100 点
ルール4: 道の上なら -1 点
さてルール1〜3については納得できると思いますがルール4の意味が分からないかもしれませんね。それでは逆に移動後に道の上なら +1 点としたらどうなるか考えてみましょう。もしそうすると「一度通った道はその先に行き止まりがあっても必ず選択する」ことになってしまうので都合が悪くなります。よって報酬を -1 とし、一度探索した道は次回以降はなるべく選択しないようにするためペナルティを与えています。
それでは実際にシミュレータを動かして座標と報酬を確認してみましょう。まず自動運転車と書いてあるメニューの中にある
ブロックを順に押してルート選択画面を開いて下さい。次に
のように、やはりシミュレータ用ブロックの中にある変数「X座標」「Y座標」「報酬」にチェックを入れてそれらの数値を表示して下さい。あとは
ブロックを適当に押して、車(緑の四角)が動くと「X座標」「Y座標」「報酬」の数値がどう変化するのか確認して下さい。 確認が終わったら変数「X座標」「Y座標」「報酬」のチェックを外して非表示に戻してください。