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

显示结果如图:

相关推荐
GIS数据转换器5 小时前
农村生活污水治理智慧管控平台
大数据·人工智能·分布式·数据分析·生活·智慧城市
常威正在打来福5 小时前
frontend-design 入门指南:OpenClaw / Claude Code / Codex 三平台安装教程
人工智能·ai·ai编程
MediaTea5 小时前
AI 术语通俗词典:Dropout 层
人工智能
问心无愧05135 小时前
ctf show web入门156
笔记
武子康5 小时前
调查研究-140 全球机器人产业深度调研报告【02篇】:全球机器人产业格局分析:五个阶段并存与商业化路径 2026
人工智能·ai·机器人·具身智能·智能化
木心术15 小时前
Windows系统下MySQL与AI工具集成方案:数据存储与调用实践
人工智能·windows·mysql
咸甜适中5 小时前
rust语言学习笔记Trait(八)Iterator(迭代器)
笔记·学习·rust
a752066285 小时前
OpenClaw企业微信渠道配置教程|API模式+长连接+全部授权
人工智能·机器人·企业微信·openclaw部署·小龙虾一键安装
AI语宙漫游指南6 小时前
AI Agent Skill 系统架构全解析:SKILL 规范与框架实现
人工智能·agent
一楼的猫6 小时前
从文本特征分析看网文平台AI检测:3个被忽视的指标
开发语言·人工智能·学习方法·ai编程·ai写作·ai自动写作