黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

K臂老虎機問題Python代碼實現

系統 2757 0

參考周志華的《西瓜書》

?第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()    
              
            
          

具體結果如下:

K臂老虎機問題Python代碼實現_第1張圖片

然后我發現這一張圖片和書上比較接近,因此我選的這個圖片進行展示,書上選擇的圖片顯示效果很好,我個人覺得應該也是挑選過的。

其實在運行的過程中,會出現很多種情況,很多次都是前幾次,前?十幾次有可能平均收益突然增大到很大,但是最終都是趨于上述的結果,至于為什么不同的參數最終會趨于不同的結果,我個人人為 “僅探索”的形式為整體的期望,正常的形式(參數隨機給)應該會逐漸趨于某一個臂(最優臂)的期望,至于“僅利用”我有點不太明白。


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論