参考書
本ブログの内容の詳細は、「機械学習スタートアップシリーズ ゼロからつくるPython機械学習プログラミング入門」に掲載されています。
機械学習に必要な数学の復習から、機械学習のアルゴリズムの導出およびPythonの基本ライブラリのみを用いた実装方法まで学びたい方は、本書籍をご活用ください。
bookclub.kodansha.co.jp
Q学習
前回求めた漸化式表現を利用して、価値関数を更新する代表的な方法であるQ学習法を実装します。
以下は、最も単純な強化学習のタスクである2状態マルコフチェーンに、Q学習を適用した例です。
報酬がQテーブルを伝搬していき、報酬が獲得できる行動の価値が高くなっていくことが分かるかと思います。
このようにして、学習したQテーブルを用いることにより、各状態にて、将来より高い報酬和が得られる行動を選択することが出来ます。
Q学習の実装
RLクラスにQ学習を実装していきましょう。まず、RLクラスのコンストラクタ__initに、Qテーブルの初期化のコードを追加します。
def __init__(self, env, gamma = 0.99, nSplit=50, isVisualize=False): ''' 省略 ''' # 状態の分割数 self.nSplit = nSplit # Qテーブルの初期化 self.Q = np.zeros((self.nSplit, self.nSplit, self.nAction))
演習1
Q学習の更新式を用いて、Qテーブルself.Qを更新するメソッドupdateQをRLクラスに追加しましょう。
以下のように、updateQの引数は、状態state、行動action、次の状態next_state、報酬reward、および学習率alpha=0.2にしてください。def updateQ(self, state, action, next_state, reward, alpha=0.2):