实现sutton强化学习引论中的k摇臂赌博机问题

from numpy import random
import matplotlib.pyplot as plt
K = [1,2,3,4,5] # 总共的摇臂数有5个
R = {1:2,2:3,3:5,4:1,5:9}  # 各个摇臂对应的奖赏
prob = {1:0.6,2:0.5,3:0.2,4:0.7,5:0.05}  #各个摇臂对应的概率吐币的概率
T = 2000

count = dict(zip(list(range(1,6)),[0]*5))  # 计算每个摇臂的摇到的次数
avg = [random.normal(0,1) for i in K] # avg为遵循正态分布的每个摇臂获得奖励的均值

eplison = 0
r = 0
count_plot1 = [0]
for i in range(T):
    
    Q = dict(zip(list(range(1,6)),[0]*5))
    
    if random.random() < eplison:
        k = random.choice(K)
    else:
        k = max(Q,key=Q.get)
    
    #v = random.choice([R[k],0],p=[prob[k],1-prob[k]])
    v = random.normal(avg[k-1],1)
    r += v
    count_plot1.append(r/(i+1))
    Q[k] = (Q[k]*count[k]+v)/(count[k]+1)
    
    count[k] = count[k] + 1
print("end the reword is {}".format(r))
Q.clear()
count.clear()
count = dict(zip(list(range(1,6)),[0]*5))  # 计算每个摇臂的摇到的次数


eplison = 0.01
r = 0
count_plot2 = [0]
for i in range(T):
    
    Q = dict(zip(list(range(1,6)),[0]*5))
    
    if random.random() < eplison:
        k = random.choice(K)
    else:
        k = max(Q,key=Q.get)
    
    #v = random.choice([R[k],0],p=[prob[k],1-prob[k]])
    v = random.normal(avg[k-1],1)
    r += v
    count_plot2.append(r/(i+1))
    Q[k] = (Q[k]*count[k]+v)/(count[k]+1)
    
    count[k] = count[k] + 1
print("end the reword is {}".format(r))
Q.clear()
count.clear()
count = dict(zip(list(range(1,6)),[0]*5))  # 计算每个摇臂的摇到的次数


eplison = 0.1
r = 0
count_plot3 = [0]
for i in range(T):
    
    Q = dict(zip(list(range(1,6)),[0]*5))
    
    if random.random() < eplison:
        k = random.choice(K)
    else:
        k = max(Q,key=Q.get)
    
    #v = random.choice([R[k],0],p=[prob[k],1-prob[k]])
    v = random.normal(avg[k-1],1)
    r += v
    count_plot3.append(r/(i+1))
    Q[k] = (Q[k]*count[k]+v)/(count[k]+1)
    
    count[k] = count[k] + 1
print("end the reword is {}".format(r))



X = range(len(count_plot1))
plt.plot(X[1:], count_plot1[1:])
plt.plot(X[1:], count_plot2[1:])
plt.plot(X[1:], count_plot3[1:])
plt.show

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值