在这里插入图片描述

强化学习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. 简单的交互流程

  1. 初始化: env = Environment(), agent = Agent()
  2. 训练循环 (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// 状态更新
  3. 测试: agent.test(env)// 评估训练好的智能体
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐