news 2026/5/11 12:24:38

强化学习入门:从随机智能体到实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
强化学习入门:从随机智能体到实战

RL-Foundation-Learning


一句话说明白

通过gymnasium库搭建场景,然后智能体不断的选择,最后结束游戏


课前思考

你有没有想过,小孩子是怎么学会走路的?小狗又是怎么听懂“坐下”“握手”的?

答案:是靠一次次尝试,摔倒了知道疼(哎哟!),走稳了被夸奖(真棒!),慢慢就学会了。

猜猜看?AI也是这么学的!
这种“试错+反馈”的学习方式,就是我们要聊的——强化学习。Screenshot 2026-05-07 125110.png


开始讲课

今天学习的内容包括以下:

1.强化学习核心概念
2.gymnasium标准库的使用
3.随机智能体完整实现

1.强化学习核心基础概念

五元组(s,a,r,s',done)
s=当前状态【小人现在所在的位置】
a(action)=执行动作【下一步向任何方向移动的过程】
r(reward)=即时奖励【如果到达终点,积分+1;其余所有情况均为r=0】
s'(s_next)=下一状态【小人移动后的位置】
done = 回合结束【这一次游戏结束了】
核心基础术语

  • 状态空间:智能体所有可能处于的状态集合,FrozenLake中是4✖️4网格对应的16个离散状态【湖面上有多少个的小位置】
  • 动作空间:智能体所有可执行的动作集合,frozenLake中是上下左右4个离散动作【做出动作的所有选择数量】
  • 回合(episode):从环境重置(起点)到回合结束(掉进陷阱/到达终点)的完整游戏流程【一次开始到结束的过程】
  • 智能体(agent):执行动作、和环境交互的主体,你已经实现了最基础的随机智能体【执行动作的主体】
2.Gymnasium库核心API
函数作用
import gymnasium as gym导入gymnasium库,主要用于开发和比较强化学习算法,可以创造自定义环境——
make()用于创造自定义环境❌ 错误理解:“用于创造自定义环境”
✅ 正确:主要用于创建官方预设环境,自定义需通过desc参数实现
render_mode="human"开启可视化窗口-render_mode不是函数
它是gym.make()函数的一个参数,用于预先声明渲染行为。例如render_mode="human"表示开启可视化窗口,而render_mode=None则不渲染7。
reset()重置状态,s是初始状态,_是额外信息,注意:reset不是一个独立的函数,需要结合环境❌ 语法错误:写作reset()或认为是独立函数
✅ 正确:必须通过环境对象调用env.reset(),且新版返回两个值
while/forwhile常用于不确定循环次数;for用于已知循环次数
simple()随机采样❌ 拼写错误:写作simple()
✅ 正确:应为sample(),意为“采样”
truncation,infotruncation是终止(时间到或失败);info是额外信息概念混淆:将返回值简写为(s', r, done, info)
✅ 正确:done并非直接返回,需由done = terminated or truncated合成
close()关闭环境关闭环境,释放渲染资源。应在所有交互结束后调用,养成良好的工程习惯
随机智能体(Random Agent)完整工程实现(闭环落地)

智能体与环境交互的全流程逻辑
创造环境(搭建一个冰湖场景)——>开始游戏(回到初始位置)——>循环试探(不断的移动尝试去获得奖励)——>结束游戏
is_slippery=False:降低游戏难度,不会在冰面上出现选择左边却依然由于惯性的原因向前移动。
在做出行动之后,初始状态会调整为当前,s=s_next,同时移动过程中收集自身的状态

# 1. 导入库 import gymnasium as gym # 2. 创建环境:使用FrozenLake-v1,关闭滑动特性以简化理解,并开启可视化窗口 env = gym.make("FrozenLake-v1", is_slippery=False, render_mode="human") # 3. 初始化并重置环境 state, info = env.reset(seed=42) # 设置seed确保实验可复现 done = False # 初始化回合结束标志 # 4. 主循环:持续交互直到回合结束 while not done: # 随机选择一个动作(0:左, 1:下, 2:右, 3:上) action = env.action_space.sample() # 执行动作,获取环境反馈 next_state, reward, terminated, truncated, info = env.step(action) # 更新回合状态 state = next_state done = terminated or truncated # 综合判断回合是否结束 # 打印当前步信息,便于观察和调试 print(f"状态(s): {state:2d} | 动作(a): {action} | 奖励(r): {reward} | " f"下一状态(s'): {next_state:2d} | 结束(done): {done}") # 5. 资源释放 env.close()

课程总结:

学习这一节知识点,我们了解一个简单的智能体是如何行动的,包括它活动的概念描述,还有需要学习的代码与知识库,最后是实现的逻辑。这些都是核心基础。我们可以想象一下,但这个智能体能够识别陷阱,找出最优的选择时候。他可以胜任更多生活中的任务。甚至是我们的伙伴。


课后思考:

1.为什么要用离散表格做Q-table?
2.为什么FrozenLake不能用DQN直接上。

[1]


  1. 后续进阶方向建议:

    1. 实现Q-learning算法
      在当前随机智能体的基础上,引入Q-table存储状态-动作价值,通过贝尔曼方程迭代更新,让智能体从“无脑试探”进化为“有记忆、有策略”的学习型代理。
    2. 探索is_slippery=True的真实挑战
      恢复环境的动作不确定性,观察滑移概率对策略收敛的影响,深入理解探索(exploration)与利用(exploitation)的权衡。
    3. 对比DQN的适用场景
      思考为何在16×4的小规模离散空间中,Q-table是更优解;而DQN更适合处理高维连续状态(如图像输入),避免“杀鸡用牛刀”9。

    本节内容构成了强化学习从理论到实践的最小可行闭环,为你后续深入策略梯度、深度Q网络等高级主题奠定了坚实基础。↩︎

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/11 12:24:38

不只是拧螺丝:从硬件装配看F450无人机的系统设计与安全冗余

不只是拧螺丝:从硬件装配看F450无人机的系统设计与安全冗余 当你第一次拿到DJI-F450无人机的套件时,可能会被那一堆螺丝、电线和电路板搞得眼花缭乱。但请记住,这不仅仅是一堆零件的简单组合——每一个焊点、每一处减震设计、每一个电源监控模…

作者头像 李华
网站建设 2026/5/11 12:23:17

ESXi 8.0 和 vCenter 8.0 一定要版本匹配吗?看完就懂

在 VMware 虚拟化运维中,很多新手都会随意搭配 ESXi 主机和 vCenter 管理平台版本,经常出现添加主机失败、集群异常、功能用不了等问题。其实核心结论很明确:ESXi 8.0 和 vCenter 8.0 版本必须匹配,版本一旦不匹配,直接…

作者头像 李华
网站建设 2026/5/11 12:20:56

如何选择单北斗GNSS变形监测系统:2026年高评选产品推荐榜单

选择单北斗GNSS变形监测系统时,应关注产品的多方面性能,包括安装便捷性、数据采集精度和适应不同环境的能力。近期市场上多款高评价产品,如中海达MS100和华水科技HS-G7,均呈现出优异的实时监测效果,特别是在地质灾害监…

作者头像 李华
网站建设 2026/5/11 12:18:33

如何彻底卸载Windows Defender:2025完整移除工具使用指南

如何彻底卸载Windows Defender:2025完整移除工具使用指南 【免费下载链接】windows-defender-remover A tool which is uses to remove Windows Defender in Windows 8.x, Windows 10 (every version) and Windows 11. 项目地址: https://gitcode.com/gh_mirrors/…

作者头像 李华