强化学习Gym库的常用API
例如,在Atari游戏中,状态是所有游戏内存变量的值。: 这是智能体的**“大脑”**之一。,包含一些用于调试的额外信息(如概率、状态原始数据等),通常不用于学习算法。它可能是状态的一部分(部分可观),也可能是状态的某种变换(如像素画面)。这些函数由环境类(如Gym库中的环境)提供,定义了智能体如何与环境互动。,表示是否达到终止状态(例如,游戏结束、任务成功或失败)。这些函数是智能体类的一部分,定
强化学习Gym库的常用API
类别 | 函数/概念 | 主要作用 | 常用所在对象 |
---|---|---|---|
环境接口 | reset() | 初始化或重置环境,回到初始状态,并返回初始观测。 | Environment |
step(action) | 核心交互函数。接收智能体的动作,执行一步,返回下一观测、奖励、是否结束等信息。 | Environment | |
render() | 可视化环境当前状态,用于调试和直观显示。 | Environment | |
close() | 关闭环境,释放资源。 | Environment | |
智能体核心 | choose_action(state) | 根据当前状态(或观测)选择要执行的动作。 | Agent |
learn(experience) | 根据交互经验(如状态、动作、奖励序列)更新智能体的策略或价值估计。 | Agent | |
store(experience) | 存储交互经验,用于后续学习(如在经验回放缓冲区中)。 | Agent | |
状态与观测 | state | 环境的真实、完整状态(通常对智能体部分可见或完全不可见)。 | Environment |
observation | 智能体实际接收到的对环境的部分或全部信息的表征。 | Agent | |
策略与价值 | policy | 智能体的决策策略,定义了在给定状态下选择每个动作的概率(随机策略)或直接输出动作(确定性策略)。 | Agent |
value_function | 评估状态或状态-动作对的好坏,用于指导策略更新。 | Agent | |
训练流程 | train() | 组织训练循环,协调智能体与环境的交互和学习过程。 | 主程序/Algorithm |
test() | 评估训练好的策略性能,通常不涉及探索(如ε-greedy中的探索)和参数更新。 | 主程序/Algorithm |
1. 环境接口函数
这些函数由环境类(如Gym库中的环境)提供,定义了智能体如何与环境互动。
-
reset()
: 这是每一轮训练(或每一局游戏)开始前必须调用的函数。它的作用是将环境重置到初始状态,并返回智能体对环境的初始观测(observation)。这确保了每轮训练都在同一起点开始。 -
step(action)
: 这是强化学习中最核心的函数。智能体通过choose_action
选出一个动作后,调用env.step(action)
来执行该动作。-
输入: 一个代表动作的变量(通常是整数或数组)。
-
返回: 通常是一个包含4个或更多信息的元组(tuple):
-
next_state
/observation
: 下一个状态的观测值。 -
reward
: 执行动作后获得的即时奖励(一个标量值)。 -
done
: 一个布尔值,表示是否达到终止状态(例如,游戏结束、任务成功或失败)。 -
info
: 一个字典,包含一些用于调试的额外信息(如概率、状态原始数据等),通常不用于学习算法。
-
-
-
render()
: 其作用是将环境的当前状态可视化地呈现出来,比如在屏幕上绘制出游戏画面或机器人姿态。这在调试代码和直观展示学习效果时非常有用,但在大规模训练时通常会关闭以提高效率。 -
close()
: 用于清理和释放环境占用的资源(如图形界面窗口、内存等)。
2. 智能体核心函数
这些函数是智能体类的一部分,定义了智能体如何做决策和学习。
-
choose_action(state)
: 这是智能体的**“大脑”**之一。它接收当前的环境状态(或观测)作为输入,根据当前的策略(policy)输出一个要执行的动作。决策时可能会包含探索(exploration)行为,例如ε-greedy策略。 -
learn(experience)
: 这是智能体更新其内部模型(如Q表、神经网络权重)的核心方法。它利用从与环境交互中获得的经验(通常是一批(state, action, reward, next_state, done)
元组)来计算梯度或更新值,从而改进策略。 -
store(experience)
: 对于许多现代强化学习算法(如DQN),将经验存储到一个叫“经验回放缓冲区(Replay Buffer)” 的数据结构中至关重要。这个函数负责完成存储工作,使得智能体可以从过去的多条经验中随机抽样进行学习,打破数据间的相关性,提高样本效率。
3. 关键概念辨析
-
状态(State) vs. 观测(Observation):
-
状态 (
state
): 指的是环境的真实、完整的内部描述。在理想情况下,知道状态就应该能确定环境未来的所有演变。例如,在Atari游戏中,状态是所有游戏内存变量的值。 -
观测 (
observation
): 指的是智能体从环境中实际看到或感知到的信息。它可能是状态的一部分(部分可观),也可能是状态的某种变换(如像素画面)。智能体通常只能基于观测来做决策。在
reset()
和step()
函数返回的通常是观测。 -
简单理解:状态是环境的“上帝视角”,观测是智能体的“第一人称视角”。
-
4. 策略与价值函数
- 策略 (
policy
): 定义了智能体的行为方式,是从状态到动作的映射。可以是确定性的(如直接输出最佳动作),也可以是随机性的(如输出每个动作的概率)。智能体的终极目标就是学习到一个最优策略。 - 价值函数 (
value_function
): 用于评估状态或状态-动作对的好坏,代表了从该状态(或执行该动作后)出发,能获得的预期累积奖励。价值函数通常被用来指导策略的改进,例如在Q-learning中,选择使得Q值最大的动作。
5. 训练与测试函数
train()
: 通常是一个高级函数,用于组织整个训练循环(循环调用reset
,step
,choose_action
,learn
等)。它会运行多个回合(episodes),并记录训练过程中的指标(如总奖励)。test()
: 用于评估已训练策略的性能。在此模式下,智能体通常只 exploitation(利用)而不 exploration(探索)(例如,设置ε=0),并且不会调用learn
函数更新参数,只是纯粹地运行策略并计算累积奖励。
6. 简单的交互流程
- 初始化:
env = Environment()
,agent = Agent()
- 训练循环 (for many episodes):
state = env.reset()
// 环境重置,获取初始观测done = False
- while not
done
:action = agent.choose_action(state)
// 智能体根据状态选择动作next_state, reward, done, info = env.step(action)
// 环境执行动作,返回结果agent.store(state, action, reward, next_state, done)
// 智能体存储经验agent.learn()
// 智能体(可能定期)从经验中学习state = next_state
// 状态更新
- 测试:
agent.test(env)
// 评估训练好的智能体
更多推荐
所有评论(0)