行動は東西南北の4種類です。外側と塗られているマスには壁があり、その方向には進めません。0.8の確率で選んだ方向に進むことができ、0.1の確率で選んだ方向に対して90度左のマス、0.1の確率でその反対側のマスに進みます。数値が書かれているマスに到達するとその数値が報酬として得られます。強化学習アルゴリズムはQ学習、行動選択は[math]\epsilon[/math]-グリーディーです。次の環境で確認しました。†NumPyを使いますので、インストールします。pip3をインストールし、最新版にします。pip次に、pip3でNumPyをインストールします。クラスには、Q学習のアルゴリズムだけを実装します。Q学習のアルゴリズムは、次のようなものです。s'[/math]これを、Pythonで実装すると、次のようになります。"""Q学習エージェント。"""Q学習を用いて学習する。verbose_level)ステップ数を数えたり、学習した方策を評価する部分がありますので、アルゴリズムよりは長くなっていますが、基本的にはQ学習のままです。EV3でも動くように作ってあるので、少し大げさなプログラムになっています。クラスには、どの強化学習アルゴリムにも共通する行動選択と評価を実装します。"""強化学習エージェント。"""強化学習を用いて学習する。"""学習した行動価値が最も高い行動を選択したときの平均ステップ数を返す。"""一様ランダムに行動を選択して返す。"""グリーディーに行動を選択して返す。"""ε-グリーディー選択を用いて行動を選択して返す。†まず初めに、環境を表すクラスがどのような変数とメソッドを持っているかを決めておきます。変数としては、次のものを持つことにします。actionsメソッドしては、次のものを持つことにします。以外の実際の実装は、子クラスで行います。"""強化学習の環境。"""初期状態を返す。"""終端状態ならTrue、そうでないならFalseを返す。"""行動を実行して状態を更新し、報酬と次の状態を返す。"""状態を表す文字列を返す。"""行動を表す文字列を返す。"""ログを出力する。