跟着杰哥学强化学习:多臂老虎机问题

多臂老虎机问题

现在有3台外观一模一样的老虎机,每个老虎机的赔率是不同的,摇动一次需要1块钱,现在给你100块钱,如何获取最大的收益。
在这里插入图片描述
如果我们知道了每个老虎的赔率,那么只要选择收益最高的那个老虎机就可以了,但现在问题是并不知道每个老虎机的收益。为了简单,我们假设老虎机的收益服从正态分布
在这里插入图片描述
我们没有办法找到老虎机,但是可以用python来进行模拟。

import numpy as np


class Arm:
    cls_n = 0
    cls_g = 0
    cls_avg_r = 0
    cls_glist = []

    def __init__(self, u=0, s=1):
        self.u = u # 均值
        self.s = s # 方差
        self.g = 0 # 累积平均收益
        self.n = 0 # 被选中的次数
        self.avg_r = 0

    def __call__(self):
        r = np.random.normal(self.u, self.s) # 当次收益
        self.cls_n += 1 # 总共摇老虎机的次数
        self.n += 1 # 被选中,次数加一
        self.g += r # 当前老虎机累计收益
        self.cls_g += r # 所有老虎机的累计收益
        self.avg_r = self.g / self.n # 当前老虎机的累计平均收益
        self.cls_avg_r = self.cls_g / self.cls_n # 累计平均收益
        self.cls_glist.append(self.cls_avg_r)
        return r, self.avg_r # 返回当次收益与历史累计的平均收益

贪心策略

一个非常直接的想法就是,每个老虎机都去摇一摇,然后看看各个收益,之后选择收益最高的那个就可以了。例如每个老虎机都摇10次,计算出每个老虎机的收益率,剩下的70次都去摇收益最高的那个就可以了。
Arm1=[r11,r12,r13,r14,r15,r16,r17,r18,r19,r110]Arm2=[r21,r22,r23,r24,r25,r26,r27,r28,r29,r210]Arm3=[r31,r32,r33,r34,r35,r36,r37,r38,r39,r310] Arm1 = [r^1_1,r^2_1,r^3_1,r^4_1,r^5_1,r^6_1,r^7_1,r^8_1,r^9_1,r^{10}_1]\\ Arm2 = [r^1_2,r^2_2,r^3_2,r^4_2,r^5_2,r^6_2,r^7_2,r^8_2,r^9_2,r^{10}_2]\\ Arm3 = [r^1_3,r^2_3,r^3_3,r^4_3,r^5_3,r^6_3,r^7_3,r^8_3,r^9_3,r^{10}_3]\\ Arm1=[r11,r12,r13,r14,r15,r16,r17,r18,r19,r110]Arm2=[r21,r22,r23,r24,r25,r26,r27,r2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值