覚え書きブログ

Pythonによる機械学習7(Q学習 1/3)

Pythonによる機械学習7(Q学習 1/3)】

Q学習

前回求めた漸化式表現を利用して、価値関数を更新する代表的な方法であるQ学習法を実装します。
f:id:hirotaka_hachiya:20181129173413p:plain

以下は、最も単純な強化学習のタスクである2状態マルコフチェーンに、Q学習を適用した例です。
f:id:hirotaka_hachiya:20181129175906p:plain
f:id:hirotaka_hachiya:20181129180051p:plain
f:id:hirotaka_hachiya:20181129180211p:plain

報酬がQテーブルを伝搬していき、報酬が獲得できる行動の価値が高くなっていくことが分かるかと思います。
このようにして、学習したQテーブルを用いることにより、各状態にて、将来より高い報酬和が得られる行動を選択することが出来ます。
f:id:hirotaka_hachiya:20181129180817p:plain

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):

作成したスクリプトおよび出力したグラフ画像を、Moodleにて提出してください。

Pythonによる機械学習7(Q学習 2/3)>>