Python(強化学習の試し15_迷路09_迷路サンプル3の試し3)
■報酬を変えての試し。
現在は下の迷路サンプルを使っているけど、 0 がつくところを報酬1、2を報酬10、3を報酬20(ゴールとしてここに着いたら終了)としている。移動は上下左右を選択できるので、壁を選択することもできる(1の部分で行くことはできないが)。この場合、動かずにその場にとどまる形になる。

学習率を低くすると2の部分をきっかけに行ったり来たりを繰り返したけど、例えば0の通路部分の報酬も0として、行ったり来たりしても報酬が増えないようにしたらどうだろう?
通路部分の報酬を0として下の条件で試し。
学習率 α = 0.01
割引率 γ = 0.2
強化学習後の1000回目の結果が下。すべてが左下を通る形になっている。
1000 : [[1, 1], [2, 1], [3, 1], [4, 1], [5, 1], [6, 1], [7, 1], [7, 2], [7, 3], [7, 4], [7, 5], [7, 6], [7, 7]]
1000 : [[1, 1], [2, 1], [3, 1], [4, 1], [5, 1], [6, 1], [7, 1], [7, 2], [7, 3], [7, 4], [7, 5], [7, 6], [7, 7]]
1000 : [[1, 1], [2, 1], [3, 1], [4, 1], [5, 1], [6, 1], [7, 1], [7, 2], [7, 3], [7, 4], [7, 5], [7, 6], [7, 7]]
1000 : [[1, 1], [2, 1], [3, 1], [4, 1], [5, 1], [6, 1], [7, 1], [7, 2], [7, 3], [7, 4], [7, 5], [7, 6], [7, 7]]
1000 : [[1, 1], [2, 1], [3, 1], [4, 1], [5, 1], [6, 1], [7, 1], [7, 2], [7, 3], [7, 4], [7, 5], [7, 6], [7, 7]]
1000 : [[1, 1], [2, 1], [3, 1], [4, 1], [5, 1], [6, 1], [7, 1], [7, 2], [7, 3], [7, 4], [7, 5], [7, 6], [7, 7]]
1000 : [[1, 1], [2, 1], [3, 1], [4, 1], [5, 1], [6, 1], [7, 1], [7, 2], [7, 3], [7, 4], [7, 5], [7, 6], [7, 7]]
1000 : [[1, 1], [2, 1], [3, 1], [4, 1], [5, 1], [6, 1], [7, 1], [7, 2], [7, 3], [7, 4], [7, 5], [7, 6], [7, 7]]
1000 : [[1, 1], [2, 1], [3, 1], [4, 1], [5, 1], [6, 1], [7, 1], [7, 2], [7, 3], [7, 4], [7, 5], [7, 6], [7, 7]]
1000 : [[1, 1], [2, 1], [3, 1], [4, 1], [5, 1], [6, 1], [7, 1], [7, 2], [7, 3], [7, 4], [7, 5], [7, 6], [7, 7]]
学習率を0.001に変えてみる。通路部分の報酬を1としたときは、(おそらく)行ったり来たりが終わらずプログラム自体ずっと終わらなかったけど、今回は12000~14000歩くらいで終了した。その中の1つの歩数を図にすると下になった。変わらず(1,4), (1,5) を行ったり来たりしている。
[1, 6, 3, 6002, 6004, 8, 7]
[0, 0, 4, 0, 4, 0, 0]
[0, 0, 0, 0, 1, 1, 1]
[0, 0, 0, 0, 0, 0, 1]
[0, 0, 0, 0, 0, 0, 1]
[0, 0, 0, 0, 0, 0, 1]
[0, 0, 0, 0, 0, 0, 1]
報酬は増えないはずなのになんでこんな動きになるのかなー。
得点やゴールを10→10000、20→20000にしても同じような傾向。
動いたときや壁を選択したときの報酬を0→-1にすると、学習率0.001でも数十~数百という結果になった。これは無駄な動きが報酬を下げる結果になるから?逆に、報酬0の場合は行ったり来たりしても報酬に影響がないので、抑制に向かわないとか。
移動が報酬にマイナスになるような設定が必要みたい。
下の図で赤丸のところまでたどりつくのは直感的にイメージできる。現在の報酬設定では、赤丸部分からより近いゴール部分へ行ってしまい、対角の得点を取るのはできないのかな。

得点50(下のルートのような)になる報酬設定についてChatGPTに尋ねてみた。最後に、こういったルートが強化学習から導けるか試したい。

Chat GPTの回答が下。もう少しやり取りは必要そう。
・2のマスに到達、+10点、得点マスを踏むことを促進するため
・ゴール(3)に到達、+50点、最後にゴールすることを強く促すため
・壁(1)にぶつかる、-10点(または動けない)、無駄なアクションを避けるため
・1歩動くたび、-1点(または-0.1点)、無駄な動きを防ぎ、効率化させるため
・ゴールせず終了、-100点、クリアできなかった場合は大きなペナルティ