覚え書きブログ

Pythonによる機械学習7(Q学習の応用)

前回実装した強化学習の代表的な手法であるQ学習を、各グループで設定したタスクに応用してみましょう。
タスクは、OpenAI gymから選んでください。
gym.openai.com

宿題

MountainCarタスクを参考に、各グループで選定した課題に、Q学習を適用してみましょう。各グループにて以下の内容を発表してください。
1) 選択したタスクの内容
2) 状態、行動および報酬の概要
3) Q学習を応用する上でのアルゴリズムおよび実装上の工夫
4) 実験設定と実験結果
5) まとめ(できた所、難しかった所など)

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

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

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

Q学習の実行

演習3

これまでに実装した、discretizeState、updateQおよびselectActionをメインから呼び出し、Q学習を完成させましょう。
Qテーブルを更新するのには時間がかかるので、以下のようにエピソードの反復回数を20001回に変更してください。

# 2) エピソード(試行)のループ
for episode in np.arange(20001):

以下のように、最初は谷底でうろうろしていた車が、徐々に左右に動けるようになり、最後にはスムーズに登れるようになっていくのを確認しましょう。

Training process of Mountain Car by Q-learning


また、割引報酬和の推移を確認するために、各エピソードの割引報酬和を記録しているagent.sumRewardsを、以下のようにプロットするメソッドplotSumRewardsを追加してください。
f:id:hirotaka_hachiya:20181201234016p:plain

エピソードの反復が進むにつれて、割引報酬和が上昇しているのがわかります。

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

宿題1

学習したQテーブルagent.Qを、pickleファイルに保存するagent.saveQ()と読み込むagent.loadQ()を追加しましょう。
pickleファイルの読み書きは、以下のようにdumpとloadを用います。

【書き込み】

import pickle

x = []
y = []
with open('example.pkl', 'wb') as fp:
	pickle.dump(x, fp)
	pickle.dump(y, fp)

【読み込み】

import pickle

with open('example.pkl', 'rb') as fp:
	x=pickle.load(fp)
	y=pickle.load(fp)

次に、メインにて、学習したQテーブルを保存するコードと、以下のように保存したQテーブルを読み込みMountainCarの動作をデモンストレーションするコードを作成しましょう。

Example of Mountain Car trained by Q learning


作成したスクリプトを、Moodleにて提出してください。

宿題2

学習したQテーブルの各状態における最大値np.max(agent.Q,axis=2)を、以下のようにヒートマップを用いて可視化するメソッドagent.showQ(self)を追加しましょう。
f:id:hirotaka_hachiya:20181202165418p:plain

可視化したQテーブルを観察し、どのようなQテーブルが学習されたのかについて考察してください。

ヒートマップの描画には、seabornのheatmapを用いましょう。以下は、seabornを用いてランダムに生成した数値のヒートマップを描画するスクリプトの例です。

	def showQ(self):
		import seaborn as sns

		x = np.random.rand(50,50)
		
		# ヒートマップの描画
		sns.heatmap(x)
	#------------------------------------

作成したスクリプト、考察および生成した画像を、Moodleにて提出してください。