參考周志華的《西瓜書》
?第16章強化學習
16.2 K-搖臂賭博機
其實這個問題的目的就是為了能夠獲得更大的利潤,但是具體怎樣去獲得更大的利潤,用到了兩種算法,一種是epsilon-貪心算法,另一種是Softmax算法,當然還有其他方法,具體可以參考http://incompleteideas.net/book/the-book-2nd.html,我在網上也找到了一位博主的博客,好像是翻譯這本書的,寫得挺好的,具體網址如下:https://blog.csdn.net/LagrangeSK
epsilon-貪心算法具體是選擇一個平衡點,下次的行為可以隨機選取,也可以選擇當前收益最大化的行為,并實時更新動作的收益。而Softmax算法選擇下一次行為是按照概率來選擇,若一個動作的收益較大,則下次選擇該動作的概率也大,并實時更新概率。具體代碼如下:
# -*- coding: utf-8 -*-
#K臂老虎機問題
import numpy as np
import random
import matplotlib.pyplot as plt
#K=[1,2,3,4,5]
def init():
tau=0.1
epsilon=0.01
T=3000
reword=[1,1]
probability=[0.4,0.2]
#arm=dict(list(zip(reword,Probability)))
count=dict.fromkeys(["1",'2'],0)
Q=dict.fromkeys(["1",'2'],0)
sum_p=sum([np.exp(i/tau) for i in Q.values()])
P=[np.exp(i/tau)/sum_p for i in Q.values()]
return tau,epsilon,T,reword,probability,count,Q,P
#epsilon-貪心算法
tau,epsilon,T,reword,probability,count,Q,P =init()
r=0
r_all=list()
#Q={"1":0.4,'2':0.2}
for i in range(T):
if random.uniform(0,1)
random.uniform(0,1) else 0
# print(v)
r=(r*(i)+v)/(i+1)
r_all.append(r)
count[str(k)] +=1
Q[str(k)]=Q[str(k)]+(v-Q[str(k)])/count[str(k)]
# print("平均獎賞為:",r)
plt.plot(list(range(T)),r_all,color='r')
#Softmax算法
r=0
r_all=list()
tau,epsilon,T,reword,probability,count,Q,P =init()
for i in range(T):
sum_p=sum([np.exp(i/tau) for i in Q.values()])
P=[np.exp(i/tau)/sum_p for i in Q.values()]
k=int(np.random.choice(list(Q.keys()),p=P))
v=reword[k-1] if probability[k-1]>random.uniform(0,1) else 0
r=(r*(i)+v)/(i+1)
r_all.append(r)
count[str(k)] +=1
Q[str(k)]=Q[str(k)]+(v-Q[str(k)])/count[str(k)]
# print("平均獎賞為:",r)
plt.plot(list(range(T)),r_all,color='b')
plt.show()
具體結果如下:
然后我發現這一張圖片和書上比較接近,因此我選的這個圖片進行展示,書上選擇的圖片顯示效果很好,我個人覺得應該也是挑選過的。
其實在運行的過程中,會出現很多種情況,很多次都是前幾次,前?十幾次有可能平均收益突然增大到很大,但是最終都是趨于上述的結果,至于為什么不同的參數最終會趨于不同的結果,我個人人為 “僅探索”的形式為整體的期望,正常的形式(參數隨機給)應該會逐漸趨于某一個臂(最優臂)的期望,至于“僅利用”我有點不太明白。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
