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

显示结果如图:

相关推荐
梦想的初衷~7 小时前
AI-Agent融合的无人机农林生态遥感科研实践
人工智能·无人机·生态·遥感·高光谱
Maplesoft8 小时前
柔印行业如何通过数字化样机、虚拟调试提升企业盈利能力
人工智能·数学建模·系统仿真
一切皆是因缘际会8 小时前
同源世界物理系统
人工智能·ai·同源世界·同源系统
大模型真好玩8 小时前
DeepSeek Harness 进阶——认识DeepSeek Harness插件机制,并从0到1实现一个插件
人工智能·agent·deepseek
ar01238 小时前
AR眼镜设备管网巡检:从人工看管线走向AI空间智能巡检
人工智能·ar
ly_Enhs8 小时前
从无光照到 PBR:我的环境光照学习记录
学习·vulkan图形渲染c/c++
小李不想当小白8 小时前
USART串口数据包(STM32标准库学习笔记)
经验分享·笔记·stm32·单片机·嵌入式硬件·学习
howdoyoudo2026068 小时前
AI审计手记 #30:从“政府网站”到“商业平台”——腾讯云沙箱AI代理越界事件的审计分析
大数据·人工智能·安全·机器学习·语言模型·云计算·腾讯云
产品设计大观8 小时前
AI生成冷链仓储温控异常处置后台实战:从告警到质控复核的完整案例
人工智能
data analyse 4568 小时前
页面卸载时埋点上报总丢失?sendBeacon 上报与补偿方案
大数据·运维·服务器·前端·数据库·人工智能·数据分析