K-摇臂赌博机 第2关:ϵ -贪心

第2关:ϵ -贪心

import numpy as np

# 定义k-摇臂赌博机类
class Bandit:
    def __init__(self, k):
        self.k = k
        self.q_star = np.random.normal(0, 1, k)  # 真实回报分布

    # 选择拉杆并获得奖励
    def pull(self, action):
        reward = np.random.normal(self.q_star[action], 1)
        return reward

# 请在下面的 Begin-End 之间按照注释中给出的提示编写正确的代码
########## Begin ##########

# 贪心算法
def greedy(bandit, epsilon, num_steps):

    # 第一步:初始化回报估计值
    q_estimates = np.zeros(bandit.k)


    # 第二步:初始化拉杆选择次数
    action_counts = np.zeros(bandit.k)


    # 第三步:初始化累积奖励
    rewards = np.zeros(num_steps)


    for step in range(num_steps):
        # 如果随机数小于 epsilon
        if np.random.random() < epsilon:

            # 第四步:随机选择一个摇臂进行探索
            action = np.random.randint(0, bandit.k)


        else:

            # 第五步:选择具有最高回报估计值的摇臂进行利用
            action = np.argmax(q_estimates)


        # 选择摇臂并获得奖励
        reward = bandit.pull(action)

        # 第六步:更新摇臂选择次数
        action_counts[action] += 1


        # 第七步:更新回报估计值
        q_estimates[action] += (reward - q_estimates[action]) / action_counts[action]


        # 第八步:更新累积奖励
        rewards[step] = reward


    return rewards

########## End ##########

# 创建一个k-摇臂赌博机实例
bandit = Bandit(k=10)

# 使用贪心算法进行探索与利用
epsilon = 0.1
num_steps = 10
rewards_greedy = greedy(bandit, epsilon, num_steps)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值