什么是强化学习
强化学习(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 后,未来期望能获得的累积奖励。
-
强化学习的基本流程
-
智能体观察当前状态(State)。
-
根据策略(Policy)选择一个动作(Action)。
-
智能体执行这个动作,环境给出反馈,包括下一状态和奖励(Reward)。
-
智能体根据奖励和下一状态更新策略,优化动作选择。
-
重复上述过程,直到达到目标或回合结束。
强化学习环境配置
安装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.13
conda activate ref
conda 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 ref
cd $CONDA_PREFIX
mkdir -p ./etc/conda/activate.d
mkdir -p ./etc/conda/deactivate.d
touch ./etc/conda/activate.d/env_vars.sh
touch ./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_PATH
ORIGINAL_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_PATH
export 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