せっかく理解するなら、日本語だけではなく、コードで理解したいので、書いた。
- 試しに、単純なε貪欲法で試してみる。
-
import mathimport randomimport numpy as np
def action(i):mean = [0, 0, 1, 1, 2]variance = [1, 2, 1, 3, 0.5]return normal(mean[i], variance[i])
def Epsilon_Greedy(epsilon):T = int(input())K = 5first = int(epsilon * T / K)best_score = - 10**10best_action = 10**10cumultive_score = 0for i in range(K):score = 0for j in range(first):score += action(i)cumultive_score += scoreif score >= best_score:best_score = scorebest_action = ifor i in range(T - first * K):cumultive_score += action(best_action)return (best_action,cumultive_score)Epsilon_Greedy(0.1)T = 10000bset_action = 4, cumultive_score = 18805.99011057487 - 実際にしたら、平均の最も良い行動は4(左から5番目の平均2の報酬のやつ)なので、正解である。
- ここで、
の値を0から0.99まで変えてみて、累積報酬の挙動を調べる。ただし、
で固定した。
-
from matplotlib import pyplot as plt
x = [0.01 * i for i in range(100)]y = [Epsilon_Greedy(0.01 * i)[1] for i in range(100) ]
plt.plot(x,y) -
すると、線形(に近い)グラフが出来る。これは、が大きいほど、平等に引いてる割合が大きいので、累積報酬の期待値は、全報酬の期待値×探索回数+最大報酬の期待値×搾取回数、であり、探索回数と搾取回数はεの一次式なので、全体もεの一次式となる。
- さらに、注目すべきは、
が大きいほど、分散が大きいように見える。これは、問題設定に強く依存するので、なんとも言えない。
バイバイ!