b站——《【强化学习】一小时完全入门》学习笔记及代码(1-3 多臂老虎机)

问题陈述

我们有两个多臂老虎机(Multi-Armed Bandit),分别称为左边的老虎机右边的老虎机。每个老虎机的奖励服从不同的正态分布:

  • 左边的老虎机 :奖励服从均值为 500 ,标准差为 50 的正态分布,即 N(500,50)N(500,50)。

  • 右边的老虎机 :奖励服从均值为 550 ,标准差为 100 的正态分布,即 N(550,100)N(550,100)。

我们的目标是使用 ε-greedy 强化学习算法(ε=0.1,初始值为 998)来估计这两个老虎机的奖励期望值。具体来说,我们需要通过多次尝试(拉动手臂)来逐步更新对每个老虎机奖励的估计,最终找到两个老虎机的奖励期望值。

问题分解

  1. 目标

    • 使用 ε-greedy 算法估计两个老虎机的奖励期望值。

    • 通过多次尝试,逐步更新对每个老虎机奖励的估计。

  2. ε-greedy 算法

    • ε=0.1:表示有 10% 的概率进行随机探索(随机选择一个老虎机),90% 的概率进行利用(选择当前估计奖励最高的老虎机)。

    • 初始值=998:表示每个老虎机的初始奖励估计值为 998。

  3. 奖励分布

    • 左边的老虎机:N(500,50)N(500,50)

    • 右边的老虎机:N(550,100)N(550,100)

  4. 输出

    • 经过多次尝试后,输出两个老虎机的奖励期望值的估计结果

    • 通过运行代码,我们可以得到一个图表,显示两个老虎机奖励期望估计值随着时间的变化情况。随着拉动次数的增加,两个估计值应该逐渐接近它们各自的真实奖励期望值(500 和 550)。

python 复制代码
import numpy as np
import matplotlib.pyplot as plt

# 参数初始化
epsilon = 0.1  # ε-greedy算法中的ε
Q1 = 998  # 左边老虎机的奖励期望估计
Q2 = 998  # 右边老虎机的奖励期望估计
n1 = 0  # 左边老虎机的拉动次数
n2 = 0  # 右边老虎机的拉动次数
num_plays = 10000  # 总共拉动的次数

# 奖励的真实分布
mu1, sigma1 = 500, 50  # 左边老虎机的真实奖励分布(均值,标准差)
mu2, sigma2 = 550, 100  # 右边老虎机的真实奖励分布(均值,标准差)

# 用于存储结果
Q1_estimates = []
Q2_estimates = []

# ε-greedy策略的实验
for t in range(num_plays):
    # 根据ε-greedy策略选择一个老虎机
    if np.random.random() < epsilon:
        action = np.random.choice([1, 2])  # 随机选择左或右
    else:
        action = 1 if Q1 > Q2 else 2  # 选择当前估计奖励最大的老虎机
    
    if action == 1:
        reward = np.random.normal(mu1, sigma1)  # 从左边老虎机获得奖励
        n1 += 1
        Q1 += (reward - Q1) / n1  # 更新左边老虎机的奖励期望估计
        Q1_estimates.append(Q1)
    else:
        reward = np.random.normal(mu2, sigma2)  # 从右边老虎机获得奖励
        n2 += 1
        Q2 += (reward - Q2) / n2  # 更新右边老虎机的奖励期望估计
        Q2_estimates.append(Q2)

# 最终的奖励期望估计
print(f"最终左边老虎机的奖励期望估计: {Q1}")
print(f"最终右边老虎机的奖励期望估计: {Q2}")

# 绘图
plt.figure(figsize=(12, 6))

# 绘制左边老虎机奖励期望估计的变化
plt.plot(Q1_estimates, label="Left Slot Machine (Q1)", color="blue")

# 绘制右边老虎机奖励期望估计的变化
plt.plot(Q2_estimates, label="Right Slot Machine (Q2)", color="red")

# 绘制真实奖励期望值的参考线
plt.axhline(y=mu1, color="blue", linestyle="--", label="True Q1 (500)")
plt.axhline(y=mu2, color="red", linestyle="--", label="True Q2 (550)")

# 图表设置
plt.title("Reward Estimation in ε-greedy Slot Machine Experiment")
plt.xlabel("Number of Plays")
plt.ylabel("Estimated Reward")
plt.legend(loc="best")
plt.grid(True)

# 显示图表
plt.show()

显示结果如图:

相关推荐
2401_8976056515 分钟前
星动纪元ERA-42:端到端原生机器人大模型的里程碑式突破
前端·人工智能·机器人
金融OG24 分钟前
100.13 AI量化面试题:支持向量机(SVM)如何处理高维和复杂数据集?
人工智能·python·算法·机器学习·支持向量机·数学建模·金融
FF-Studio26 分钟前
读 DeepSeek-R1 论文笔记
论文阅读·人工智能·深度学习·机器学习·语言模型·自然语言处理·deepseek
羑悻的小杀马特38 分钟前
蓝耘智算平台硬核部署 DeepSeek, 解锁 AI 内在的无限潜能
人工智能·ai大模型·deepseek
illus10n_CHOU1 小时前
【项目总结】易到家家政服务平台 —— 派单调度(7)
java·spring boot·后端·学习·设计模式
AuGuSt_811 小时前
N-Beats:一种用于时间序列预测的纯前馈神经网络模型
人工智能·深度学习·神经网络
不能只会打代码1 小时前
Python人工智能技术全景:从基础框架到DeepSeek的突破性创新
开发语言·人工智能·python·deepseek
通义灵码1 小时前
通义灵码 2.0 全新升级,阿里云正式推出繁星计划
人工智能·阿里云·云计算
AI+程序员在路上1 小时前
DeepSeek本地部署_桌面版AnythingLLM本地知识库搭建
人工智能