强化学习python零基础实战1——随机智能体(Random Agent)
摘要:本文介绍了一个使用Python和gym库实现随机动作策略的强化学习程序。该程序在CartPole-v1环境中运行10个episode,每个episode随机选择左右推动小车的动作,并记录杆子保持平衡的步数。关键步骤包括:导入gym和numpy库、创建不渲染的环境对象、执行随机动作策略、统计每个episode的步数并计算平均值。文中还解释了gym.make()函数、环境渲染模式选择(None/
旨在通过编写程序来学习强化学习的基本语句
题目:
编写一个 Python 程序,使用 gym 中的 CartPole-v1 环境,让智能体在每一步随机选择一个动作(左右推小车),并统计一次 episode 中坚持的步数。
要求:
1、运行 10 个 episode。
2、记录每个 episode 的总步数,并输出平均步数。
📝 题目思路
1、导入环境
使用 gym.make("CartPole-v1") 创建环境。
import gymnasium as gym
import numpy as np
(1) gym = 强化学习环境平台
当前用的 gym 已经 不再维护,并且和最新的 NumPy(2.0+)可能不兼容。
官方推荐换成 Gymnasium(几乎完全兼容 gym,接口稍微不同)
(2)numpy = 强大的数组 + 快速的数学运算工具 np = numpy,只是一个简写
env = gym.make("CartPole-v1",render_mode='None')
(3) gym.make() 是 创建环境的函数
gym 里有很多内置环境,比如:
"CartPole-v1" → 推小车
"MountainCar-v0" → 小车爬山
"FrozenLake-v1" → 冰湖迷宫
"Pong-v0" → Atari 乒乓
(4) render_mode=None这是环境的 渲染模式(可视化方式)
None:不显示画面(最快,常用于训练)。
"human":实时显示窗口,能看到小车和杆子的动画。
"rgb_array":返回一帧图像(用于视频保存)。
"ansi":返回文本(主要是棋盘类环境)。
在训练时一般 None,在测试/展示时用 "human"。
(5) env = ...
env 是你创建的 环境对象,里面包含了游戏规则。
env.reset() → 开始新的一局
env.step(action) → 执行动作
env.close() → 关闭环境
num_episodes = 10
steps_per_epoch = []
(6)episode 就是一局游戏/一次完整的实验过程。是当前循环索引,从 0 开始。
(7)steps_per_episode = [] 这是一个 空列表,用来存储每一局的步数
for episode in range(num_episodes):
(8)range(num_episodes) 生成整数序列 0,1,...,num_episodes-1
for episode in range(num_episodes): 重复进行 num_episodes 次完整的交互(每次一局)。
2、初始化 episode
obs,_ = env.reset()
(9)obs, _ = env.reset() # 重置环境,开始新一局
含义:调用环境的 reset(),把环境恢复到初始状态,开始一局新的 episode。
obs(observation):对于 CartPole-v1,obs 是一个长度为 4 的 numpy 数组(ndarray),含义依次通常是:[cart_position, cart_velocity, pole_angle, pole_angular_velocity](四个浮点数)。
_:Python 习惯写法,表示“我拿到但不使用的值”。
done = False
steps = 0
while not done:
action = env.action_space.sample()
obs, reward, done, truncated, info = env.step(action)
(10) steps = 0 # 当前局步数计数,含义:本局(episode)内的步数计数器,初始为 0。
(11) done = False
含义:初始化 done 标志为 False。
在循环开始前先设为 False,进入 while not done: 循环。只要 done 为 False 就继续执行循环体。done 变为 True 时(环境报告终止),跳出循环,本局结束。
3、随机选择动作
(12)action = env.action_space.sample()
从环境的动作空间里随机采样一个动作(随机策略)
4、执行动作
(13)obs, reward, done, truncated, info = env.step(action)
含义:将动作发送到环境,环境推进一步,返回五个值。
truncated:布尔值,表示是否因为截断条件而终止(例如达到最大步数限制)。这是新版 Gym 把“达到时间限制”与“真实环境结束”区分开来的字段。
5、统计步数,每次步数 +1,直到 done=True。循环多次 episode,重复 10 次,最后输出每次的步数和平均步数。
steps += 1
steps_per_epoch.append(steps)
print(f"Episode {episode + 1}: lasted {steps} steps")
(14)steps_per_episode.append(steps) # 保存这一局的步数
含义:将本局的步数(整数)加入到列表 steps_per_episode 中,便于后续统计(比如计算平均步数、绘图等)。
运行结果:
Episode 1: lasted 32 steps
Episode 2: lasted 49 steps
Episode 3: lasted 13 steps
Episode 4: lasted 13 steps
Episode 5: lasted 16 steps
Episode 6: lasted 14 steps
Episode 7: lasted 16 steps
Episode 8: lasted 16 steps
Episode 9: lasted 20 steps
Episode 10: lasted 25 steps
将None改为human时,出现可视化视频

更多推荐


所有评论(0)