Ubuntu22.04配置强化学习环境及运行相关Demo

embedded/2024/11/26 4:45:01/

什么是强化学习

强化学习(Reinforcement Learning,简称 RL)是机器学习中的一个重要分支,属于一种基于试错机制的学习方法。它通过让智能体(Agent)与环境(Environment)进行交互,并通过奖励惩罚的反馈机制,逐步学习到一个最优的决策策略(Policy),以达到预期的目标。强化学习广泛应用于机器人控制、游戏 AI、自动驾驶等领域。

强化学习的基本概念

在强化学习中,智能体的目标是通过和环境的不断交互,在每一个时刻做出一个动作(Action),以期最大化它在长期内获得的累计奖励(Cumulative Reward)。我们可以将强化学习问题形式化为一个马尔可夫决策过程(MDP, Markov Decision Process)。下面是强化学习的几个核心组成部分:

1. 状态(State, S)
  • 状态是智能体当前所处的情境或环境中的某种信息表示。比如在围棋中,状态可以表示当前的棋盘布局;在自动驾驶中,状态可以是传感器数据和周围环境的信息。

2. 动作(Action, A)
  • 动作是智能体在某一时刻可以做出的决策。不同的状态对应不同的可能动作。比如在机器人控制中,动作可以是向左转、向右转、加速或减速。

3. 奖励(Reward, R)
  • 奖励是环境对智能体某一动作的反馈信号。它是一个标量,用来衡量该动作的好坏。智能体的目标是通过行动来最大化累积的奖励。比如在游戏中,获胜可以得到正奖励,而失败则可能得到负奖励。

4. 策略(Policy, π)
  • 策略定义了智能体在每个状态下应该采取什么动作。策略可以是确定性的(即在每个状态下都有唯一的动作选择)或者是随机的(即每个状态下都有某个动作的概率分布)。策略是强化学习中智能体需要学习的核心内容。

5. 值函数(Value Function, V 或 Q)
  • 值函数是用来评估某个状态(或状态-动作对)的“好坏”的函数。它表示智能体从某个状态(或状态-动作对)开始,期望能够获得的累计奖励。

    • 状态值函数 V(s):从状态 s 开始,未来期望能获得的累积奖励。

    • 状态-动作值函数 Q(s, a):在状态 s 下采取动作 a 后,未来期望能获得的累积奖励。

强化学习的基本流程

  1. 智能体观察当前状态(State)

  2. 根据策略(Policy)选择一个动作(Action)

  3. 智能体执行这个动作,环境给出反馈,包括下一状态和奖励(Reward)

  4. 智能体根据奖励和下一状态更新策略,优化动作选择

  5. 重复上述过程,直到达到目标或回合结束

强化学习环境配置

安装ubuntu系统及ROS2

这里不在仔细说明;

设置显卡驱动

安装完ROS2后,找到附加驱动

注意:这里高显卡使用545,低显卡使用535,还有一种可能是其他。

安装虚拟环境Anaconda

下载

Download Anaconda Distribution | Anaconda

安装

 bash Anaconda3-2024.02-1-Linux-x86_64.sh

直按回车键,知道出现yes/no,然后选择yes

这里选择no,不需要配置环境。

在bashrc下添加环境变量

  source ~/anaconda3/bin/activate

打开终端,出现base说明安装成功

安装pytorch

 # 创建虚拟环境
 conda create -n ref python=3.8

 #安装PyTorch 1.13conda activate refconda install pytorch==1.13.1 torchvision==0.14.1 torchaudio==0.13.1 pytorch-cuda=11.7 -c pytorch -c nvidia#这里pytorch太慢的话,运行下面的conda install pytorch==1.13.1

安装IsaacGym

下载Isaacgym:Isaac Gym - Download Archive | NVIDIA Developer

 cd isaacgym/python/conda activate ref#安装pip install -e.

安装完之后,我们需要配置一个环境

 conda activate refcd $CONDA_PREFIXmkdir -p ./etc/conda/activate.dmkdir -p ./etc/conda/deactivate.dtouch ./etc/conda/activate.d/env_vars.shtouch ./etc/conda/deactivate.d/env_vars.sh

找到/home/XXX/anaconda3/envs/ref/etc/conda目录下有两个文件夹

进入activate.d,打开env_vars.sh文件添加下面内容

 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CONDA_PREFIX/lib

进入deactivate.d,打开env_vars.sh文件添加下面内容

 # 保存原始的 LD_LIBRARY_PATHORIGINAL_LD_LIBRARY_PATH=$LD_LIBRARY_PATH​# 要删除的目录DIRECTORY_TO_REMOVE="$CONDA_PREFIX/lib"​# 使用 grep 过滤掉要删除的目录项NEW_LD_LIBRARY_PATH=$(echo $LD_LIBRARY_PATH | tr ':' '\n' | grep -v "$DIRECTORY>​# 设置新的 LD_LIBRARY_PATHexport LD_LIBRARY_PATH=$NEW_LD_LIBRARY_PATH​#echo "Original LD_LIBRARY_PATH: $ORIGINAL_LD_LIBRARY_PATH"#echo "New LD_LIBRARY_PATH:      $LD_LIBRARY_PATH"

保存,重新进入虚拟环境

测试

 cd isaacgym/python/examples/python joint_monkey.py 

安装强化学习

下载:GitHub - roboterax/humanoid-gym: Humanoid-Gym: Reinforcement Learning for Humanoid Robot with Zero-Shot Sim2Real Transfer https://arxiv.org/abs/2404.05695

 cd humanoid-gym/pip install -e.

基于PPO算法的训练

 #运行cd humanoid#启动基于PPO算法的训练,任务为humanoid任务,注意这里根据自己的显卡选择训练数量python scripts/train.py --task=humanoid_ppo --run_name v1 --headless --num_envs 4096

评估训练好的PPO策略 v1

此命令加载 'v1' 策略以在其环境中进行性能评估。除此之外,它还会自动导出一个JIT模型,适合用于部署。

 python scripts/play.py --task=humanoid_ppo --run_name v1

执行模拟到模拟的模型转换

使用导出的 'v1' 策略来进行模拟到模拟的转换。

 python scripts/sim2sim.py --load_model /home/baining/humanoid-gym/logs/XBot_ppo/exported/policies/policy_1.pt

运行训练好的策略

 python scripts/sim2sim.py --load_model /home/baining/humanoid-gym/logs/XBot_ppo/exported/policies/policy_example.pt


http://www.ppmy.cn/embedded/140539.html

相关文章

【jvm】为什么java是半编译半解释型语言

目录 1. 编译过程2. 解释过程3. 即时编译(JIT)过程4. 半编译半解释型语言的特点 1. 编译过程 1.Java源代码首先会被编译成字节码(Bytecode),这是一种与具体平台无关的中间代码。2.这一编译过程由Java编译器&#xff0…

RUST学习教程-安装教程

文章目录 参考文档安装教程更新卸载 参考文档 https://course.rs/first-try/installation.html 安装教程 Linux或者mac安装教程 curl --proto https --tlsv1.2 https://sh.rustup.rs -sSf | sh安装完成,当出现command not found的时候,需要source一下…

网络安全 - DOS

1.1.1 摘要 最近网络安全成了一个焦点,除了国内明文密码的安全事件,还有一件事是影响比较大的——Hash Collision DoS(通过Hash碰撞进行的拒绝式服务攻击),有恶意的人会通过这个安全漏洞让你的服务器运行巨慢无比&…

深入理解下oracle 11g block组成

深层次说,oracle数据库的最少组成单位应该是块,一般默认情况下,oracle数据库的块大小是8kb,其中存储着我们平常所需的数据。我们在使用过程中,难免会疑问道:“oracle数据块中到底是怎样组成的,平…

Dubbo Golang快速开发Rpc服务

开发 RPC Server & RPC Client 基于 Dubbo 定义的 Triple 协议,你可以轻松编写浏览器、gRPC 兼容的 RPC 服务,并让这些服务同时运行在 HTTP/1 和 HTTP/2 上。Dubbo Go SDK 支持使用 IDL 或编程语言特有的方式定义服务,并提供一套轻量的 …

java: spire.pdf.free 9.12.3 create pdf

可以用windows 系统中文字体,也可以从文件夹的字体文件 /*** encoding: utf-8* 版权所有 2024 ©涂聚文有限公司* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:* # Author : geovindu,Geovin Du 涂…

数据结构哈希表-(开放地址法+二次探测法解决哈希冲突)(创建+删除+插入)+(C语言代码)

#include<stdio.h> #include<stdlib.h> #include<stdbool.h> #define M 20 #define NULLDEL -1 #define DELDEY -2typedef struct {int key;int count; }HashTable;//创建和插入 void Insert(HashTable ha[], int m, int p, int key) {int i, HO, HI;HO key…

微服务系列概览

分布式和微服务的区别是什么&#xff1f; 分布式是把一个集中式系统拆分成多个系统&#xff0c;每一个系统单独对外提供部分功能&#xff0c;整个分布式系统整体对外提供一整套服务。对于访问分布式系统的用户来说&#xff0c;感知上就像访问一台计算机一样。 而分布式架构的…