読書環境
- Kindle(白黒)
- iPad Pro 10.5 + Kindle(カラー)
- 紙
開発環境
- macOS Mojave - Apple (OS)
- Emacs (Text Editor)
- Windows 10 Pro (OS)
- Visual Studio Code (Text Editor)
- Python 3.7 (プログラミング言語)
機械学習と深層学習 ―C言語によるシミュレーション― (小高知宏(著)、オーム社)の第2章(機械学習の基礎)、2.2(強化学習)をC言語ではなくPythonによるシミュレーションのためのプログラムのコードを書いてみる。
コード
Python 3
#!/usr/bin/env python3 import random import matplotlib.pyplot as plt gen_max = 1000 node = 15 alpha = 0.1 gamma = 0.9 epsilon = 0.3 qvalue = [random.randrange(101) for _ in range(node)] qvalues = [[] for _ in range(node - 1)] for i in range(gen_max): s = 0 for _ in range(3): if random.random() < epsilon: if random.randrange(2) == 0: s = 2 * s + 1 else: s = 2 * s + 2 else: if qvalue[2 * s + 1] > qvalue[2 * s + 2]: s = 2 * s + 1 else: s = 2 * s + 2 if s == 14: qvalue[s] = qvalue[s] + alpha * (1000 - qvalue[s]) elif s == 11: qvalue[s] = qvalue[s] + alpha * (500 - qvalue[s]) elif s < 7: if qvalue[2 * s + 1] > qvalue[2 * s + 2]: qmax = qvalue[2 * s + 1] else: qmax = qvalue[2 * s + 2] qvalue[s] = qvalue[s] + alpha * (gamma * qmax - qvalue[s]) if i % 100 == 0: for n in qvalue[1:]: print(int(n), end=' ') print() for j, q in enumerate(qvalue[1:]): qvalues[j].append(q) xys = [] for qs in qvalues: xys.extend([range(1, gen_max + 1), qs]) plt.plot(*xys) plt.legend([f'Q{i}' for i in range(1, gen_max + 1)]) # plt.show() plt.savefig('sample2.png')
入出力結果(Bash、cmd.exe(コマンドプロンプト)、Terminal、Jupyter(IPython))
C:\Users\...>py qlearning.py 46 41 41 47 96 35 30 7 93 74 6 39 27 100 75 149 31 83 242 73 30 7 93 74 386 39 27 343 75 458 31 83 448 638 30 7 93 74 499 39 27 901 75 807 30 83 449 898 30 7 93 74 499 39 27 999 75 809 29 83 449 899 30 7 93 74 499 39 27 999 75 809 29 83 449 899 30 7 93 74 499 39 27 999 75 809 29 83 449 899 30 7 93 74 499 39 27 999 75 809 29 83 449 899 30 7 93 74 499 39 27 999 75 809 28 83 449 899 30 7 93 74 499 39 27 999 75 809 28 83 449 899 30 7 93 74 499 39 27 999 C:\Users\...>
0 コメント:
コメントを投稿