强化学习: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+LLaMA Factory微调Qwen2-VL模型,搭建文旅领域知识问答机器人
使用PAI和LLaMA Factory框架,基于全参方法微调 Qwen2-VL模型,使其能够进行文旅领域知识问答,同时通过人工测试验证了微调的效果。
机器学习概览及常见算法
机器学习(Machine Learning, ML)是人工智能的核心,专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能,它是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。 本课程将带你入门机器学习,掌握机器学习的概念和常用的算法。
相关文章
|
8月前
|
机器学习/深度学习 开发框架 .NET
强化学习:Markov决策过程(MDP)——手把手教你入门强化学习(二)
本文是“手把手教你入门强化学习”系列的第二篇,重点讲解了强化学习的核心数学模型——Markov决策过程(MDP)。文章从马尔可夫性质出发,逐步引入马尔可夫过程、马尔可夫奖励过程,最终深入到马尔可夫决策过程,详细解析了状态转移、奖励机制、价值函数及贝尔曼方程等关键概念。同时,文中还介绍了策略函数、最优价值函数等内容,并指出求解强化学习问题的关键在于寻找最优策略。通过理论推导与实践结合的方式,帮助读者更好地理解强化学习基础原理。
305 4
|
8月前
|
机器学习/深度学习 算法 关系型数据库
强化学习:动态规划求解最优状态价值函数——手把手教你入门强化学习(四)
本文介绍了基于模型的强化学习算法,重点讲解动态规划(DP)。动态规划通过分解问题为子问题求解状态价值函数,利用贝尔曼期望方程迭代更新。其核心性质包括最优子结构和重叠子问题,适用于已知转移概率和奖励的MDP场景。文章回顾了前期强化学习基础,并展望了后续内容如蒙特卡罗法。适合初学者系统了解强化学习算法原理与应用。
275 7
|
8月前
|
机器学习/深度学习 存储 算法
强化学习:蒙特卡罗求解最优状态价值函数——手把手教你入门强化学习(五)
本文介绍了强化学习中的蒙特卡罗算法,包括其基本概念、两种估值方法(首次访问蒙特卡罗与每次访问蒙特卡罗)及增量平均优化方式。蒙特卡罗法是一种基于完整回合采样的无模型学习方法,通过统计经验回报的平均值估计状态或动作价值函数。文章详细讲解了算法流程,并指出其初期方差较大、估值不稳定等缺点。最后对比动态规划,说明了蒙特卡罗法在强化学习中的应用价值。适合初学者理解蒙特卡罗算法的核心思想与实现步骤。
414 4
|
8月前
|
机器学习/深度学习 物联网 PyTorch
小白避坑指南:国内用Colossal-AI微调DeepSeek 1.5B的完整踩坑记录(附镜像加速方案)
本文详细记录了使用Colossal-Ai对DeepSeek-Qwen模型进行微调的过程,包括模型下载、环境部署、数据集处理及代码实现等环节。重点介绍了LoRA低秩适配方法和Colossal-Ai分布式训练框架的使用技巧,解决了模型封装后函数调用冲突、梯度检查点配置等问题。通过命令行参数灵活调整训练配置,最终在两块A100 GPU上完成训练,单卡显存占用约11GB,利用率达85%。文章总结了常见问题及解决方法,为后续研究提供参考。
697 15
小白避坑指南:国内用Colossal-AI微调DeepSeek 1.5B的完整踩坑记录(附镜像加速方案)
|
8月前
|
机器学习/深度学习 C++
强化学习:实践理解Markov决策过程(MDP)(干中学系列)——手把手教你入门强化学习(三)
本博客以实践为主,带领读者巩固上期关于“Markov决策过程”的核心概念。通过构建学生马尔可夫奖励模型、计算收获值与状态价值,进一步验证贝尔曼方程。详细介绍了转移概率、奖励值及策略概率的设置,并实现了均匀随机策略下的状态价值计算与最优策略的价值评估。结合代码实例,帮助读者深入理解强化学习理论。适合初学者实践与进阶学习。
286 63
|
7月前
|
机器学习/深度学习 存储 算法
18个常用的强化学习算法整理:从基础方法到高级模型的理论技术与代码实现
本文系统讲解从基本强化学习方法到高级技术(如PPO、A3C、PlaNet等)的实现原理与编码过程,旨在通过理论结合代码的方式,构建对强化学习算法的全面理解。
1724 10
18个常用的强化学习算法整理:从基础方法到高级模型的理论技术与代码实现
|
8月前
|
机器学习/深度学习 算法 机器人
强化学习:时间差分(TD)(SARSA算法和Q-Learning算法)(看不懂算我输专栏)——手把手教你入门强化学习(六)
本文介绍了时间差分法(TD)中的两种经典算法:SARSA和Q-Learning。二者均为无模型强化学习方法,通过与环境交互估算动作价值函数。SARSA是On-Policy算法,采用ε-greedy策略进行动作选择和评估;而Q-Learning为Off-Policy算法,评估时选取下一状态中估值最大的动作。相比动态规划和蒙特卡洛方法,TD算法结合了自举更新与样本更新的优势,实现边行动边学习。文章通过生动的例子解释了两者的差异,并提供了伪代码帮助理解。
581 2
|
机器学习/深度学习 算法 决策智能
北大领衔,多智能体强化学习研究登上Nature子刊
北京大学研究团队近日在《Nature》子刊上发布了一篇关于多智能体强化学习(MARL)的论文,提出了一种高效且可扩展的MARL框架,旨在解决大规模网络控制系统中的决策问题。该框架实现了智能体间的局部通信,减少了通信成本与计算复杂度,并在交通、电力及疫情防控等多个真实场景实验中,显著提升了决策性能。论文链接:https://www.nature.com/articles/s42256-024-00879-7。尽管该研究仍存局限,但为MARL的应用提供了新思路。
377 2
|
机器学习/深度学习 人工智能 自然语言处理
【强化学习】强化学习的概述及应用,附带代码示例
强化学习(Reinforcement Learning, RL)是机器学习中的一种重要范式,它通过让智能体(agent)在环境中采取行动并根据所获得的奖励(reward)来学习最优的策略(policy)。简而言之,强化学习的目标是让智能体学会在特定环境下做出决策,以最大化累积奖励。这种学习方式模拟了生物体如何在环境给予的正反馈(奖励)和负反馈(惩罚)中学习行为的过程。
3243 4
|
机器学习/深度学习 存储 算法
强化学习实战:基于 PyTorch 的环境搭建与算法实现
【8月更文第29天】强化学习是机器学习的一个重要分支,它让智能体通过与环境交互来学习策略,以最大化长期奖励。本文将介绍如何使用PyTorch实现两种经典的强化学习算法——Deep Q-Network (DQN) 和 Actor-Critic Algorithm with Asynchronous Advantage (A3C)。我们将从环境搭建开始,逐步实现算法的核心部分,并给出完整的代码示例。
1474 1

热门文章

最新文章