Python(強化学習の試し07_迷路02_ランダムとか)

■迷路サンプルでの動作確認。
自動的に迷路が生成されるコードを持ってきたので、今回、検証に使う適当な迷路の形を決めて、ランダムなどの動作を確認、取得する情報を決めた。強化学習については次くらいから。

検証に使うサンプルは下のもの。
得点が得られる黄色マス(Point 10)を2つ配置している。左上のスタートから右下のゴールまで最短で21歩くらい。このサンプルに対して、ランダム、ランダム(右と下に重み)、道を記録(弱く作用、強く作用)の4つの方法で動きを見ていく。

また、動いた位置を記録して、最終的にどういう経路を通ったか分かるよう出力させる。下の右側のコンソール画面のとおり。


「ランダム」は、通ることができる位置(上、右、左、下)を取得し、その中からランダムで選択する。「ランダム(右と下に重み)」は、右、下の選択肢を2つずつにして、その中からランダムで選択する。例えば、4つのすべてにいける十字路の場合、通常は(上、右、左、下)の4つからランダムで選択となるが、重みを付けた場合、(上、右、右、左、下、下)からランダムで選択となり、右、下が選ばれる確率は上がる。

「記録」は、通った位置を記録し、ランダムで道を選択した後で、もし行先が既に通った道(記録されている位置)であった場合、再度選択しなおす。この場合、袋小路に入ったら詰んでしまうので、指定した回数だけ通った道が選択された場合、記録を一度クリアする。「弱く作用」ではその数を小さくし(3回)、「強く作用」では大きくしている(100回)。

それぞれで100回試した結果が下。

得点平均歩数平均(最大ー最小)歩数標準偏差
ランダム15.7941 (46ー3510) 720.51
ランダム(重み)8.6201 (26ー10480) 1054.50
記録(弱く)15.2243 (22ー1052)220.27
記録(強く)14.7151 (20ー590) 129.25

この結果は、まあまあイメージに合っている。
ランダムで道を選択する場合、一本道であっても行ったり来たりするため、歩数が無駄に増える。その点、右下に行くように重みづけたり、行った道に行きづらくすれば、そういった無駄が減る。歩数平均でランダムだけやや大きいのはそのせいと思う。また、上の図の中の左下の袋小路に入った場合、右下の重みづけでは逆に出づらくなる。その結果として最大の歩数が出ていそう。
得点はランダム(重み)だけ小さいけど、今回の迷路では右下にいけばそのままゴールになるので、初めの選択で右に行って0点で終わるケースが多いのではと思う。

次は強化学習を見ていく。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です