强化学习:Gym的库的实践——小车上山(包含强化学习基础概念,环境配置国内镜像加速)——手把手教你入门强化学习(一)

本文涉及的产品
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
模型训练 PAI-DLC,100CU*H 3个月
交互式建模 PAI-DSW,每月250计算时 3个月
简介: 本文开启“手把手教你入门强化学习”专栏,介绍强化学习基础概念及实践。强化学习通过智能体与环境交互,学习最优策略以最大化累积奖励,适用于复杂动态决策问题。文章讲解智能体、环境等核心概念,并使用Gym库进行案例实操,如CartPole和MountainCar环境的代码实现。最后预告下期将深入马尔科夫决策过程(MDP)。适合初学者系统了解强化学习并动手实践。创作不易,欢迎关注、点赞与收藏!

前言

 本期笔者将开启新的专栏--手把手教你入门强化学习强化学习正在改变人类社会的方方面面,像基于强化学习的游戏AI,AlphaGo,以及最近大火的Deepseek的GRPO算法等等。所以笔者希望能带领大家走入强化学习的世界,同样笔者会尽量以通俗易懂的语言带领大家入门强化学习,当然,我的栏目还是喜欢以实践为主,本教程依旧是从入门到实践,先会简单介绍强化学习基础概念,然后会以Gym(强化学习环境库)进行一个案例的实操。

一、什么是强化学习

 在了解一个概念之前,我们必须先知道,它是什么,能帮我们解决什么问题以及它有什么优势。
 首先它的基本定义是,智能体通过与环境的交互来学习如何采取动作,以最大化长期累积的奖励。也就是说,强化学习希望智能体在一个环境中,随着“时间的流逝”​,不断地自我学习学习策略),并最终在这个环境中学到一套最为合理的行为策略(最大化奖励)。智能体可以是机器人或者Ai等等,环境是它所处的环境,可以是一局棋盘游戏,也可以是当前的路况等等。
 知道了什么是强化学习,紧接着,它能帮我们解决什么问题,按照定义的说法,它能帮我解决贯序决策问题(也就是需要连续进行决策的问题)。那走迷宫,从起点走到终点,找到一条最优路的问题,肯定是贯序决策问题啊,我直接用算法建图,用最短路算法不就可以解决了,为什么要用强化学习呢?是不是啊,但是如果这个迷宫很复杂呢,每一步有上百种选择,如果我们还用传统算法,会发现根本解决不了,这是个NP问题。这时候,通过一系列科学的方法,对这类普适性问题进行体系性的求解方式和方法的归纳就是强化学习需要解决的问题。
 最后我肯定想它有什么优势呢?
 1 无需环境先验知识:自适应的“试错学习”,如果是传统方法解决dp问题,我需要提前知道地图的布局,障碍物等等,而强化学习可以处理未知环境的问题,如机器人探索火星地形等等。
 2 处理高维或连续状态/动作空间:若迷宫每一步有上百种选择,传统算法(如动态规划)会因“维度灾难”无法计算,而深度强化学习(如DQN)可以使用神经网络逼近Q值函数,处理图像等高维输入。
 3 避免局部最优:传统最短路径算法找到的路径可能是“理论最短”,但若某些路径有潜在风险(如湿滑地面),但强化学习可以通过负奖励设计进行规避。
总结:如果是问题简单且静态,传统算法更高效;但如果是迷宫复杂、未知或动态变化的问题,强化学习能处理的更好。

二、基础概念

智能体和环境

 强化学习的基础概念我们通过这张图来研究。
 我们可以看到,整个系统分为智能体和环境两个部分。
 • 智能体(agent)是强化学习系统中的决策者和学习者,它可以做出决策和接受奖励信号。一个强化学习系统里可以有一个或多个智能体。我们并不需要对智能体本身进行建模,只需要了解它在不同环境下可以做出的动作,并接受奖励信号。
 • 环境(environment)是强化系统中除智能体以外的所有事物,它是智能体交互的对象。环境本身可以是确定性的,也可以是不确定性的。环境可能是已知的,也可能是未知的。我们可以对环境建模,也可以不对环境建模。

智能体和环境的交互

 • 智能体观测环境,可以获得环境的观测(observation),记为O;
 • 智能体根据观测做出决策,决定要对环境施加的动作(action),记为A;
  • 环境受智能体动作的影响,改变自己的状态(state),记为S,并给出奖励(reward),记为R。
 智能体通过观察环境得到观测和收到环境给的奖励,再根据策略(强化学习需要学习的)给出相应的决策,采取下一步的动作,下一步的动作又会产生新的环境,新的环境又会产生新的观测和奖励。我们可以把这一过程一个序列来表示。
            Ot→Rt→At→Ot+1→Rt+1→At+1
image.png

三、Gym简单实践

Gym是OpenAI团队开发的一个主要针对强化学习实验的开源项目。Gym库内置上百种实验环境,包括以下几类:
算法环境:包括一些字符串处理等传统计算机算法的实验环境。
简单文本环境:包括几个用文本表示的简单游戏。
经典控制环境:包括一些简单几何体的运动,常用于经典强化学习算法的研究。
Atari游戏环境:包括数十个Atari 2600游戏,具有像素化的图形界面,希望玩家尽可能争夺高分。
二维方块(Box2D)环境:包括一些连续性控制的任务。
MuJoCo环境:利用收费的MuJoCo运动引擎进行连续性控制任务。
机械控制环境:关于机械臂的抓取和控制等。

安装及简单使用

1 由于是简单实践,我们进行最小安装,完整版安装后面实践我们再装。

conda create -n RL python=3.9 -y
conda activate RL
pip install gym -i https://pypi.tuna.tsinghua.edu.cn/simple

2 安装好后,我们简单进行几个命令进行使用。
 1)在python环境下,导入gym库

import gym

 2)查看Gym库里有哪些环境

env_list = envs.registry.keys()
env_ids = [item for item in env_list]
env_ids

1742090172685.jpg

 3)取出环境

env = gym.make('CartPole-v0')

 4)初始化环境对象env

env.reset()

image.png

ps:该调用返回的是智能体对于环境的初始观测
 5)我们先查看一下动作空间,再从动作空间中我们随机抽样一个动作

env.action_space
action = env.action_space.sample()

ps:这表明动作空间是取{0,1}的int型数值。
 5)将动作作为参数传给环境,表面智能体做出动作,环境需要改变状态。我们这里循环5次看一下状态变化。

for k in range(5):
    action = env.action_space.sample()
    state, reward, done, truncated, info = env.step(action)
    print('动作 = {0}: 当前状态 = {1}, 奖励 = {2}, 结束标志 = {3}, 日志信息 = {4}'.format(action, state, reward, done, info))

image.png

 5)如果需要渲染环境的话,我们需要在创建环境的时候指定。

env = gym.make("CartPole-v0", render_mode="human")

PS:1 不能直接调用env.render()函数,因为从 gym==0.21.0 开始,渲染模式必须在创建环境时通过 render_mode 参数指定。
   2 render_mode 有三个参数:
   human(在人类显示器或终端上渲染)
   rgb_array(返回像素图像的RGB阵列作为返回值)
   ansi(将文本作为返回值返回)
 5)简单示例
不过在这之前,由于我们之前是最小安装,在运行以下代码之前,我们需要安装一下gym[classic_control]

pip install gym[classic_control] -i https://pypi.tuna.tsinghua.edu.cn/simple
import gym

env = gym.make("CartPole-v0", render_mode="human")
observation, info = env.reset()

for _ in range(100):
    action = env.action_space.sample()
    observation, reward, terminated, truncated, info = env.step(action)

    if terminated or truncated:
        observation, info = env.reset()
env.close()

ps:由于笔者是远程服务器,没有如果是远程服务器的我们需要另辟蹊径,这里我就不尝试了,给大家一个思路。
使用 xvfb 创建虚拟显示

sudo apt-get install xvfb
xvfb-run -s "-screen 0 1024x768x24" python your_script.py

运行成功效果图
image.png

案例实现

 接下来会带领大家通过一个完整的例子来学习如何与Gym库中的环境交互。选用的例子是经典的控制任务:小车上山(MountainCar-v0)。
1 编写智能体代码,也就是小车代码,需要两个函数,一是决策,而是学习(训练的时候)

import gym
import numpy as np
class BaspokeAgent:
    def __init__(self, env):
        pass
    def decide(self, observation):#决策
        position, velocity = observation
        lb = np.minimum(-0.09 * (position + 0.25) ** 2 + 0.03, 0.3 * (position + 0.9) ** 4 - 0.008)
        up = -0.07 * (position + 0.38) ** 2 + 0.06
        if lb < velocity < up:
            action = 2
        else:
            action = 0
        return action # 返回动作
    def learn(self,*args): #学习
        pass

2 智能体和环境进行交互一回合,也即是小车移动,环境产生的变换,我们需要返回交互的奖励以及状态。

def play_montecarlo(env, agent, train=False):
    episode_reward = 0.0 # 记录回合总奖励
    observation, _ = env.reset() # 重置游戏环境
    while True:
        action = agent.decide(observation) # 小车根据环境产生动作
        next_observation, reward, done, _, _= env.step(action) # 环境返回奖励和状态
        episode_reward += reward #记录总奖励
        if train:# 如果训练,更新策略
            argent.learn(observation,action,reward,done)
        if done:#如果到底最终状态,终止
            break
        observation = next_observation#状态更新
    return episode_reward #返回回合总奖励

3 进行交互100次,看策略的平均回合奖励。

env = gym.make('MountainCar-v0')
agent = BaspokeAgent(env)
episode_rewards = [play_montecarlo(env, agent) for _ in range(100)]
print('平均回合奖励 = {}'.format(np.mean(episode_rewards)))

image.png


总结

 本教程笔者先从基础知识入手,带领大家了解强化学习的基础概念,再逐步讲解使用gym强化学习实践,这一时刻,相信大家已经对强化学习有了基本概念,下一小节我将带领大家走进强化学习的重要数学模型(MDP),也就是大家熟知的马尔科夫决策(Markov 决策)
 如果想要更深入强化学习的内容,关注我,下期更精彩,感兴趣的友友也可以关注我的csdn账号。
https://blog.csdn.net/qq_53769632?spm=1000.2115.3001.5343


创作不易,求关注,点赞,收藏,谢谢~
相关实践学习
使用PAI-EAS一键部署ChatGLM及LangChain应用
本场景中主要介绍如何使用模型在线服务(PAI-EAS)部署ChatGLM的AI-Web应用以及启动WebUI进行模型推理,并通过LangChain集成自己的业务数据。
机器学习概览及常见算法
机器学习(Machine Learning, ML)是人工智能的核心,专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能,它是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。 本课程将带你入门机器学习,掌握机器学习的概念和常用的算法。
相关文章
|
机器学习/深度学习 人工智能 算法
深度强化学习中实验环境-开源平台框架汇总
深度强化学习中实验环境-开源平台框架汇总
437 0
|
5月前
|
机器学习/深度学习 数据采集 Python
从零到一:手把手教你完成机器学习项目,从数据预处理到模型部署全攻略
【10月更文挑战第25天】本文通过一个预测房价的案例,详细介绍了从数据预处理到模型部署的完整机器学习项目流程。涵盖数据清洗、特征选择与工程、模型训练与调优、以及使用Flask进行模型部署的步骤,帮助读者掌握机器学习的最佳实践。
493 1
|
8月前
|
机器学习/深度学习 人工智能 TensorFlow
神经网络不再是黑魔法!Python带你一步步拆解,让AI学习看得见
【8月更文挑战第3天】神经网络,曾被视为难以触及的黑魔法,现已在Python的助力下变得平易近人。以TensorFlow或PyTorch为“魔法杖”,仅需几行Python代码即可构建强大的AI模型。从零开始,我们将教导AI识别手写数字,利用经典的MNIST数据集。通过数据加载、预处理至模型训练与评估,每个步骤都如精心编排的舞蹈般清晰可见。随着训练深入,AI逐渐学会辨认每个数字,其学习过程直观展现。这不仅揭示了神经网络的奥秘,更证明了任何人都能借助Python创造AI奇迹,共同探索未来的无限可能。
86 2
|
7月前
|
人工智能 PyTorch 算法框架/工具
AI计算机视觉笔记十四:YOLOV5环境搭建及测试全过程
本文详细记录了在Windows 10环境下从零开始搭建yolov5环境并进行测试的全过程,涵盖环境配置、依赖安装及模型测试等关键步骤。文章首先介绍了所需环境(Python 3.8、yolov5-5.0),接着详细说明了如何使用Miniconda3创建与激活虚拟环境,并通过具体命令演示了如何下载安装yolov5及相关依赖库。最后,通过一系列命令展示了如何下载预训练模型并对示例图像进行目标检测,同时解决了一些常见错误。适合初学者跟随实践。如需转载,请注明原文出处。
|
8月前
|
机器学习/深度学习 人工智能 算法
深入探索TensorFlow在强化学习中的应用:从理论到实践构建智能游戏AI代理
【8月更文挑战第31天】强化学习作为人工智能的一个重要分支,通过智能体与环境的互动,在不断试错中学习达成目标。本文介绍如何利用TensorFlow构建高效的强化学习模型,并应用于游戏AI。智能体通过执行动作获得奖励或惩罚,旨在最大化长期累积奖励。TensorFlow提供的强大工具简化了复杂模型的搭建与训练,尤其适用于处理高维数据。通过示例代码展示如何创建并训练一个简单的CartPole游戏AI,证明了该方法的有效性。未来,这项技术有望拓展至更复杂的应用场景中。
93 0
|
8月前
|
机器学习/深度学习 自然语言处理 TensorFlow
迁移学习入门指南超棒!教你如何利用预训练模型加速 TensorFlow 项目开发,开启高效之旅!
【8月更文挑战第31天】在深度学习领域,迁移学习是种在资源有限的情况下快速开发高性能模型的技术。本指南介绍如何在TensorFlow中利用预训练模型实现迁移学习,包括选择、加载预训练模型、自定义顶层、冻结预训练层及训练模型等内容,以帮助提升模型性能和训练速度。
149 0
|
8月前
|
机器学习/深度学习 自然语言处理 TensorFlow
TensorFlow 入门超简单!从零开始构建你的第一个神经网络,开启机器学习精彩之旅!
【8月更文挑战第31天】本文介绍了流行开源机器学习框架 TensorFlow,涵盖其安装与首个神经网络构建步骤。TensorFlow 由 Google 开发,适用于计算机视觉及自然语言处理等领域。掌握它不仅提升就业机会,还加深对机器学习的理解。通过安装 Python 并使用 pip 命令安装 TensorFlow,即可按照示例构建、训练并评估简单的线性回归模型,快速开启机器学习之旅。
261 0
|
11月前
|
机器学习/深度学习 人工智能 自然语言处理
从零开始学习深度学习:入门指南与实践建议
本文将引导读者进入深度学习领域的大门,从基础概念到实际应用,为初学者提供全面的学习指南和实践建议。通过系统化的学习路径规划和案例实践,帮助读者快速掌握深度学习的核心知识和技能,迈出在人工智能领域的第一步。
556 10
|
11月前
|
机器学习/深度学习 算法 机器人
深度强化学习之gym扫地机器人环境的搭建(持续更新算法,附源码,python实现)
深度强化学习之gym扫地机器人环境的搭建(持续更新算法,附源码,python实现)
295 0
|
机器学习/深度学习 存储 Cloud Native
【推荐】最适合新手的5个深度学习实战项目
【推荐】最适合新手的5个深度学习实战项目

热门文章

最新文章