機械学習と深層学習 Python によるシミュレーション qlearning.py


機械学習と深層学習 Pythonによるシミュレーション の第2章のコード qlearning.pyについて、 わかりやすく書き換えてみました。

環境

  • Python 3.6.5 Anaconda

問題の設定

2.2.3 の迷路抜けの学習プログラムです。

書籍と同じように、 リスト(q_value)にQ値を格納します。 1階層目の値1(\(=2^0\))個、 2階層目の値2(\(=2^1\))個、 3階層目の値4(\(=2^2\))個、 4階層目の値8(\(=2^3\))個、 合計15個をひとつのリストで表します。

リストのインデックス配置
1階層目(初期状態) 0
2階層目 1 2
3階層目 3 4 5 6
4階層目 7 8 9 10 11 12 13 14

そして書籍では インデックス 14 がゴールとなっていました。 今回は GOAL_POSITION という定数にゴールのインデックスを格納します。 ゴールを変更して実験することも可能です。

コード

変数名や条件分岐の記述を少し変えて、理解しやすくしたつもりです。 階層構造などを柔軟に変えられるようにすることもできなくはないですが、コード量が膨れあがるのでやっていません。

THRESHOLD という定数を導入しており、 この閾値の回数だけ q_value が変化しなければ収束したものとして学習を終了し、 収束値に最初になったときのイテレーションインデックスを出力します。 ALPHA, GAMMA, EPSILON の値によって収束する回数が変化します。