当前位置: 首页 > news >正文

【学习笔记】Gymnasium入门(一)

强化学习(Reinforcement Learning, RL)是一种机器学习方法,通过与环境的交互来学习如何采取行动,以最大化累积奖励。强化学习在机器人控制、游戏 AI、自动驾驶等领域有广泛应用。

1. 强化学习的基本概念

  1. Agent(智能体):在环境中执行动作并学习如何最大化累积奖励的实体。
  2. Environment(环境):智能体与之交互的外部系统,定义了状态空间、动作空间和奖励机制。
  3. Observation(观察):智能体从环境中获取的当前状态信息。
  4. Action(动作):智能体在某个状态下可以执行的操作,影响环境的状态。
  5. Reward(奖励):智能体执行某个动作后环境反馈的即时信号,用于指导智能体的学习。
    在这里插入图片描述

2. 使用 Gym 进行强化学习:LunarLander 环境示例

参考: https://gymnasium.farama.org/index.html
在这篇博客中,我们将介绍如何使用 Gym 库进行强化学习,并以 LunarLander 环境为例进行演示。Gym 是一个用于开发和比较强化学习算法的工具包,它提供了许多标准化的测试环境。

2.1 安装 Gym 和依赖项

首先,我们需要安装 Gym 库及其依赖项。你可以使用以下命令通过 pip 安装:

pip install gymnasium
pip install swig
pip install "gymnasium[box2d]"

这些命令将安装 Gym 库、SWIG 以及 Box2D 依赖项。

2.2 初始化环境

接下来,我们将初始化 LunarLander 环境。LunarLander 是一个经典的控制任务,目标是控制一个着陆器在月球表面安全着陆。

import gymnasium as gym

# 初始化环境
env = gym.make("LunarLander-v3", render_mode="human")
  • gym.make("LunarLander-v3", render_mode="human"):创建并返回一个指定环境的实例。在这里,我们选择了 “LunarLander-v3” 环境,并设置 render_mode 为 “human” 以便在运行时显示图形界面。

2.3 重置环境

在开始训练之前,我们需要重置环境以生成初始观察值。

# 重置环境以生成初始观察值
observation, info = env.reset(seed=42)
  • env.reset(seed=42):重置环境到初始状态,并返回初始观察值和额外信息。seed=42 用于设置随机数种子,以确保结果的可重复性。

2.4 运行环境

我们将运行环境 1000 步,并在每一步中采取随机动作。你可以在这里插入你的策略来替换随机动作。

for _ in range(1000):
    # 这里可以插入你的策略
    action = env.action_space.sample()

    # 使用动作在环境中进行一步
    observation, reward, terminated, truncated, info = env.step(action)

    # 如果回合结束,则重置环境
    if terminated or truncated:
        observation, info = env.reset()
  • env.action_space.sample():从动作空间中随机采样一个动作。在实际应用中,你可以用你的策略来替换这个随机动作。
  • env.step(action):使用指定的动作在环境中执行一步。返回值包括:
    • observation:执行动作后环境的下一个状态。
    • reward:执行动作后获得的奖励。
    • terminated:布尔值,表示当前回合是否结束。
    • truncated:布尔值,表示当前回合是否被截断。
    • info:额外的诊断信息。
  • if terminated or truncated::检查当前回合是否结束或被截断。如果是,则重置环境。

2.5 关闭环境

最后,别忘了关闭环境以释放资源。

env.close()
  • env.close():关闭环境并释放资源。

2.6 完整代码

以下是完整的代码示例:

import gymnasium as gym

# 初始化环境
env = gym.make("LunarLander-v3", render_mode="human")

# 重置环境以生成初始观察值
observation, info = env.reset(seed=42)
for _ in range(1000):
    # 这里可以插入你的策略
    action = env.action_space.sample()

    # 使用动作在环境中进行一步
    observation, reward, terminated, truncated, info = env.step(action)

    # 如果回合结束,则重置环境
    if terminated or truncated:
        observation, info = env.reset()

env.close()

以下是对代码中涉及的函数及其参数的详细说明:

  • gym.make()

    • 参数:
      • id (str): 环境的名称或ID,例如 "LunarLander-v3"
      • render_mode (str, optional): 渲染模式,例如 "human" 表示以人类可读的方式渲染环境。
  • env.reset()

    • 参数:
      • seed (int, optional): 随机数生成器的种子,用于确保结果的可重复性。
      • options (dict, optional): 其他选项,具体取决于环境。
    • 返回值:
      • observation (ObsType): 环境的初始观察值。
      • info (dict): 包含辅助诊断信息。
  • env.step()

    • 参数:
      • action (ActType): 代理提供的用于更新环境状态的操作。
    • 返回值:
      • observation (ObsType): 环境观察空间的一个元素,作为代理动作的下一个观察结果。
      • reward (SupportsFloat): 采取行动的结果的奖励。
      • terminated (bool): 代理是否达到最终状态,可以是正数或负数。
      • truncated (bool): 是否满足MDP范围外的截断条件。通常,这是一个时间限制,但也可用于指示代理实际越界。可用于在达到最终状态之前提前结束情节。
      • info (dict): 包含辅助诊断信息(有助于调试、学习和记录)。
  • env.close()

    • 作用: 关闭环境,释放资源。

2.7 保存视频

import gymnasium as gym
from gymnasium.wrappers import RecordVideo

# 初始化环境并包装以记录视频
env = gym.make("LunarLander-v3", render_mode="rgb_array")
env = RecordVideo(env, video_folder="videos", episode_trigger=lambda x: True)

# 重置环境以生成初始观察值
observation, info = env.reset(seed=42)
for _ in range(1000):
    # 这里可以插入你的策略
    action = env.action_space.sample()

    # 使用动作在环境中进行一步
    observation, reward, terminated, truncated, info = env.step(action)

    # 如果回合结束,则重置环境
    if terminated or truncated:
        observation, info = env.reset()

env.close()

LunarLander

相关文章:

  • 大模型:大模型部署Ollama和Dify
  • Python+AI提示词用贝叶斯样条回归拟合BSF方法分析樱花花期数据模型构建迹图、森林图可视化
  • 学透Spring Boot — 016. 魔术师 - Spring MVC Conversion Service 类型转换
  • SSL证书颁发机构有哪些呢
  • Mysql——DbUtils的使用
  • 二叉树——队列bfs专题
  • Docker容器中的ubuntu apt update报错 解决办法
  • 【58】编程技巧:单片机编程命名规范
  • Oracle数据库数据编程SQL<4.3 事务的补充内容(了解)>
  • 十、C++速通秘籍—多进程
  • 牛客春招刷题训练营 算法 Java 3月27日 杨辉三角的变形 计算日期到天数转换 而后单调
  • 详细介绍一下Vue3的实现原理?
  • Codecademy—— 交互式编程学习的乐园
  • leetcode215.数组中的第k个最大元素
  • intel-xpu-backend-for-triton绕过pytorch直接调用Unified-Runtime
  • 小程序31-wxml语法-setData() 修改数据
  • RTC实时时钟M41T11M6F国产替代FRTC4111S
  • vue3如何批量设置每个vue页面的defineOptions的name
  • Web Workers 技术解析与应用
  • # 基于 OpenCV 的人脸识别实战:从基础到进阶
  • 将网站建设列入政府考核内容/群推广
  • 做网站前台和后台是什么/京东关键词优化技巧
  • 专业营销型网站建设/加快百度收录的方法
  • 北京网站制作设计推广公司/最近一个月的热点事件
  • 网站建设 pdf/手机怎么自己制作网页
  • 怎样在工商网站做遗失/百度官网认证免费