深度强化学习实战:基于Q-Learning的FrozenLake和Taxi游戏AI训练

深度强化学习实战:基于Q-Learning的FrozenLake和Taxi游戏AI训练

deep-rl-class This repo contains the Hugging Face Deep Reinforcement Learning Course. deep-rl-class 项目地址: https://gitcode.com/gh_mirrors/de/deep-rl-class

前言

本文将通过两个经典强化学习环境——FrozenLake(冰湖)和Taxi(出租车),手把手教你实现Q-Learning算法。我们将从零开始构建一个能够自主学习的AI智能体,最终让它在这两个环境中表现出色。

环境准备

虚拟显示设置

由于我们需要在Colab中渲染环境并录制视频,首先需要设置虚拟显示:

!sudo apt-get update
!sudo apt-get install -y python3-opengl
!apt install ffmpeg xvfb
!pip3 install pyvirtualdisplay

from pyvirtualdisplay import Display
virtual_display = Display(visible=0, size=(1400, 900))
virtual_display.start()

依赖安装

我们需要安装以下关键库:

  • gymnasium: 提供强化学习环境
  • numpy: 用于处理Q表
  • imageio: 用于生成回放视频
import numpy as np
import gymnasium as gym
import random
import imageio

FrozenLake环境解析

环境特性

FrozenLake是一个网格世界环境,具有以下特点:

  • 状态空间:离散的16个状态(4x4网格)
  • 动作空间:4个离散动作(上、下、左、右)
  • 奖励机制
    • 到达目标:+1
    • 掉入冰洞:0
    • 走在冰面:0

创建环境

我们使用4x4的非滑动版本(确定性环境):

env = gym.make("FrozenLake-v1", 
               map_name="4x4", 
               is_slippery=False, 
               render_mode="rgb_array")

Q-Learning算法实现

Q表初始化

Q表是一个二维数组,行代表状态,列代表动作:

state_space = env.observation_space.n
action_space = env.action_space.n
qtable = np.zeros((state_space, action_space))

超参数设置

total_episodes = 10000    # 训练总回合数
learning_rate = 0.8       # 学习率
max_steps = 99            # 每回合最大步数
gamma = 0.95              # 折扣因子

# 探索参数
epsilon = 1.0             # 初始探索率
max_epsilon = 1.0         # 最大探索率
min_epsilon = 0.01        # 最小探索率
decay_rate = 0.001        # 探索率衰减率

训练过程

rewards = []

for episode in range(total_episodes):
    state = env.reset()[0]
    step = 0
    done = False
    total_rewards = 0
    
    for step in range(max_steps):
        # ϵ-贪婪策略选择动作
        if random.uniform(0,1) > epsilon:
            action = np.argmax(qtable[state,:])
        else:
            action = env.action_space.sample()
        
        # 执行动作
        new_state, reward, done, truncated, info = env.step(action)
        
        # Q值更新
        qtable[state, action] = qtable[state, action] + learning_rate * (
            reward + gamma * np.max(qtable[new_state,:]) - qtable[state, action]
        )
        
        total_rewards += reward
        state = new_state
        
        if done:
            break
    
    # 探索率衰减
    epsilon = min_epsilon + (max_epsilon - min_epsilon)*np.exp(-decay_rate*episode)
    rewards.append(total_rewards)

算法解析

  1. ϵ-贪婪策略:平衡探索与利用

    • 以ϵ概率随机探索
    • 以1-ϵ概率利用当前最优策略
  2. Q值更新公式

    Q(s,a) ← Q(s,a) + α[r + γ max Q(s',a') - Q(s,a)]
    
    • α:学习率,控制更新幅度
    • γ:折扣因子,衡量未来奖励的重要性
  3. 探索率衰减:随着训练进行,逐渐减少探索,增加利用

模型评估与可视化

测试智能体

env = gym.make("FrozenLake-v1", 
               map_name="4x4", 
               is_slippery=False, 
               render_mode="rgb_array")

frames = []
total_rewards = 0
state = env.reset()[0]

for step in range(max_steps):
    action = np.argmax(qtable[state,:])
    new_state, reward, done, info = env.step(action)
    total_rewards += reward
    
    frames.append(env.render())
    state = new_state
    
    if done:
        break

print(f"Total rewards: {total_rewards}")

生成回放视频

imageio.mimsave("frozenlake.gif", frames, fps=10)

Taxi环境进阶

Taxi环境比FrozenLake更复杂:

  • 状态空间:500个离散状态
  • 动作空间:6个动作(上下左右、接送乘客)
  • 奖励机制
    • 成功送达:+20
    • 每步惩罚:-1
    • 非法操作:-10

训练技巧

  1. 调整超参数

    • 增加训练回合数(建议50000+)
    • 调整学习率和折扣因子
  2. 奖励塑形

    • 可以修改环境奖励函数加速学习
  3. 高级探索策略

    • 使用Boltzmann探索代替ϵ-贪婪

常见问题解决

  1. 收敛慢

    • 增加学习率
    • 调整探索率衰减速度
  2. 次优策略

    • 增加训练回合数
    • 检查Q值更新是否正确
  3. 视频生成失败

    • 确保虚拟显示设置正确
    • 检查render_mode是否为"rgb_array"

结语

通过本教程,你已经掌握了:

  1. Q-Learning算法的核心原理
  2. 在Gymnasium环境中实现强化学习智能体
  3. 超参数调优的基本方法
  4. 训练过程的可视化技巧

下一步可以尝试:

  • 实现更复杂的DQN算法
  • 在Atari游戏等更复杂环境中应用
  • 研究多智能体强化学习

deep-rl-class This repo contains the Hugging Face Deep Reinforcement Learning Course. deep-rl-class 项目地址: https://gitcode.com/gh_mirrors/de/deep-rl-class

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

6/2025 MP4 出版 |视频: h264, 1280x720 |音频:AAC,44.1 KHz,2 Ch 语言:英语 |持续时间:12h 3m |大小: 4.5 GB 通过实际 NLP 项目学习文本预处理、矢量化、神经网络、CNN、RNN 深度学习 学习内容 学习核心 NLP 任务,如词汇切分、词干提取、词形还原、POS 标记实体识别,以实现有效的文本预处理。 使用 One-Hot、TF-IDF、BOW、N-grams Word2Vec 将文本转换为向量,用于 ML DL 模型。 了解并实施神经网络,包括感知器、ANN 数学反向传播。 掌握深度学习概念,如激活函数、损失函数优化技术,如 SGD Adam 使用 CNN RNN 构建 NLP 计算机视觉模型,以及真实数据集端到端工作流程 岗位要求 基本的 Python 编程知识——包括变量、函数循环,以及 NLP DL 实现 熟悉高中数学——尤其是线性代数、概率函数,用于理解神经网络反向传播。 对 AI、ML 或数据科学感兴趣 – 不需要 NLP 或深度学习方面的经验;概念是从头开始教授的 描述 本课程专为渴望深入了解自然语言处理 (NLP) 深度学习的激动人心的世界的人而设计,这是人工智能行业中增长最快需求最旺盛的两个领域。无论您是学生、希望提升技能的在职专业人士,还是有抱负的数据科学家,本课程都能为您提供必要的工具知识,以了解机器如何阅读、解释学习人类语言。我们从 NLP 的基础开始,从头开始使用文本预处理技术,例如分词化、词干提取、词形还原、停用词删除、POS 标记命名实体识别。这些技术对于准备非结构化文本数据至关重要,并用于聊天机器人、翻译器推荐引擎等实际 AI 应用程序。接下来,您将学习如何使用 Bag of Words、TF-IDF、One-Hot E
内容概要:本文全面介绍了虚幻引擎4(UE4)的功能、应用场景、学习准备、基础操作、蓝图系统、材质与纹理、灯光与渲染等方面的内容。UE4是一款由Epic Games开发的强大游戏引擎,支持跨平台开发,广泛应用于游戏、虚拟现实、增强现实、建筑设计等领域。文章详细阐述了学习UE4前的硬件软件准备,包括最低推荐配置,以及Epic Games账户创建、启动器安装等步骤。接着介绍了UE4的界面组成基本操作,如视口、内容浏览器、细节面板等。蓝图系统作为UE4的可视化脚本工具,极大降低了编程门槛,通过实例演练展示了蓝图的应用。材质与纹理部分讲解了材质编辑器的使用纹理导入设置,灯光与渲染部分介绍了不同类型的灯光及其应用,以及后期处理高质量图片渲染的方法。最后推荐了一些学习资源,包括官方文档、教程网站、论坛社区书籍。 适合人群:对游戏开发感兴趣、希望学习UE4的初学者有一定编程基础的研发人员。 使用场景及目标:①掌握UE4的基本操作界面认知,为后续深入学习打下基础;②通过蓝图系统快速创建游戏逻辑,降低编程门槛;③学会材质与纹理的创建设置,提升游戏画面的真实感;④掌握灯光与渲染技术,营造逼真的游戏氛围;⑤利用推荐的学习资源,加速UE4的学习进程。 阅读建议:本文内容详尽,涵盖了UE4的各个方面,建议读者按照章节顺序逐步学习,先从基础操作入手,再深入到蓝图、材质、灯光等高级功能。在学习过程中,结合实际项目进行练习,遇到问题时参考官方文档或社区论坛,不断积累经验技能。
USB HUB 2.0 TUSB2077A方案 (原理图.PCB.SolidWorks 3D外壳图 ) 基于TUSB2077A 的1转7 USB HUB解决方案 XP WIN7 WIN10 都很方便 画好图 .. 打样... 买元件...焊接...调试...来来回回不间断10来天 终于成功能用。。。。 我使用的是MICRO USB 连接的板子 就是安卓手机数据线 通用性好 没画外接电源 直接USB供电 (实际使用传输速率不快,不知道有没有关系) 电路的所有保护器件都在 没有精简 带所有状态指示灯 一共7路输出 每路都是独立工作 可同时工作 就算其中一路短路 (马上会保护 自己短路试过)其它路也能正常工作........... 插J-LINK  USB转232 U盘 等等 都能同时正常工作............................ 原理图 看自己情况 有好多都可以省掉节约成本 可外加电源供电 .....................本人后来闲的JB蛋疼 又用SolidWorks 画了个有机玻璃的外壳 哈哈一边学一边画 只能说这软件初学者很容易啊 这个软件画图 电脑要求4G内存至少...2G 估计蛋疼 朋友4G就老提示内存不足 还不错 只要PCB的3D封装尺寸画的正确 感觉画这图都不需要卡尺量实际板子 然后去加工了3套(TB上云卓一共24块钱)实惠的不敢相信啊 ............回来装好 感觉瞬间高大上有木有 有木有 这个SolidWorks的零件图 装配图 都在附件里面 有需要的可以自己改改. 也可以直接加工(加工需要保存成CAD的格式 我的压缩包里面就是)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宣苓滢Rosa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值