MindSpore强化学习:使用PPO配合环境HalfCheetah-v2进行训练
本文分享自华为云社区《MindSpore强化学习:使用PPO配合环境HalfCheetah-v2进行训练》,作者: irrational。
半猎豹(Half Cheetah)是一个基于MuJoCo的强化学习环境,由P. Wawrzyński在“A Cat-Like Robot Real-Time Learning to Run”中提出。这个环境中的半猎豹是一个由9个链接和8个关节组成的2D机器人(包括两个爪子)。在这个环境中,目标是通过施加扭矩在关节上使猎豹尽可能快地向前(向右)奔跑,正向奖励基于前进的距离,而向后移动则会得到负向奖励。猎豹的躯干和头部是固定的,扭矩只能施加在前后大腿、小腿和脚上。
动作空间是一个Box(-1, 1, (6,), float32),其中每个动作代表链接之间的扭矩。观察空间包含猎豹不同身体部位的位置值和速度值,其中所有位置值在前,所有速度值在后。默认情况下,观察不包括猎豹质心x坐标,可以通过在构建时传递exclude_current_positions_from_observation=False来包括它。如果包括,观察空间将有18个维度,其中第一个维度代表猎豹质心的x坐标。
奖励分为两部分:向前奖励和控制成本。向前奖励是根据动作前后x坐标的变化计算的,控制成本是为了惩罚猎豹采取过大动作的成本。总奖励是向前奖励减去控制成本。
每个状态的开始是在状态(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,)上添加噪声以增加随机性。前8个值是位置值,最后9个值是速度值。位置值添加均匀噪声,而初始速度值(全为零)添加标准正态噪声。
当一个剧集的长度超过1000时,该剧集将被截断。
该环境的详细信息可以参考:https://www.gymlibrary.dev/environments/mujoco/half_cheetah/

这个比很多环境都要复杂。
不过没关系,我们有ppo算法,这个算法可以跑强化学习,甚至大语言模型。
PPO(Proximal Policy Optimization)算法是一种用于强化学习的策略优化方法,它旨在解决传统策略梯度方法(如TRPO,Trust Region Policy Optimization)中的信任区域问题
PPO算法通过引入clipping技巧和重要性采样技巧来减少计算梯度时的方差,从而提高算法的收敛速度和稳定性。
在PPO算法中,有两个关键概念:
- 策略(Policy):策略是一个函数,它定义了在给定状态s时采取动作a的概率分布。
- 价值函数(Value Function):价值函数估计了在给定策略下,从状态s出发,到达某个特定状态或终端时所能获得的期望回报。
PPO算法的主要步骤包括:
- 采样(Sampling):从当前策略中采样数据,包括状态、动作、奖励和下一个状态。
- 计算目标(Calculating Targets):使用目标策略计算目标价值函数,并计算目标策略的KL散度。
- 更新策略(Updating Policy):使用重要性采样技巧和clipping技巧更新策略。
- 更新价值函数(Updating Value Function):使用策略梯度方法更新价值函数。
PPO算法的核心思想是交替更新策略和价值函数,以实现策略和价值的共同优化。这种方法可以有效减少计算梯度时的方差,提高算法的收敛速度和稳定性。
以下是PPO算法的一个简化的Markdown公式:
# Proximal Policy Optimization (PPO) Algorithm
## 1. Sampling
采样当前策略的数据,包括状态 $ s $、动作 $ a $、奖励 $ r $ 和下一个状态 $ s' $。
## 2. Calculating Targets
使用目标策略计算目标价值函数,并计算目标策略的KL散度。
## 3. Updating Policy
使用重要性采样技巧和clipping技巧更新策略。
## 4. Updating Value Function
使用策略梯度方法更新价值函数。
## 重复步骤1-4,实现策略和价值的共同优化。
这个公式是一个简化的版本,实际上PPO算法还包括了许多其他细节和技巧,如经验回放、动态调整学习率等。
import argparse
import os from mindspore import context
from mindspore import dtype as mstype
from mindspore.communication import get_rank, init import mindspore_rl.distribution.distribution_policies as DP
from mindspore_rl.algorithm.ppo import config
from mindspore_rl.algorithm.ppo.ppo_session import PPOSession
from mindspore_rl.algorithm.ppo.ppo_trainer import PPOTrainer parser = argparse.ArgumentParser(description="MindSpore Reinforcement PPO")
parser.add_argument("--episode", type=int, default=650, help="total episode numbers.")
parser.add_argument(
"--device_target",
type=str,
default="Auto",
choices=["Ascend", "CPU", "GPU", "Auto"],
help="Choose a device to run the ppo example(Default: Auto).",
)
parser.add_argument(
"--precision_mode",
type=str,
default="fp32",
choices=["fp32", "fp16"],
help="Precision mode",
)
parser.add_argument(
"--env_yaml",
type=str,
default="../env_yaml/HalfCheetah-v2.yaml",
help="Choose an environment yaml to update the ppo example(Default: HalfCheetah-v2.yaml).",
)
parser.add_argument(
"--algo_yaml",
type=str,
default=None,
help="Choose an algo yaml to update the ppo example(Default: None).",
)
parser.add_argument(
"--enable_distribute",
type=bool,
default=False,
help="Train in distribute mode (Default: False).",
)
parser.add_argument(
"--worker_num", type=int, default=2, help="Worker num (Default: 2)."
)
parser.add_argument(
"--graph_op_run", type=int, default=1, help="Run kernel by kernel (Default: 1)."
)
options, _ = parser.parse_known_args()`
wget https://www.roboti.us/download/mujoco200_linux.zip
mv mujoco200_linux ~/.mujoco/mujoco200
wget https://www.roboti.us/file/mjkey.txt
cp mjkey.txt /home/kewei/.mujoco/mjkey.txt
wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/p/patchelf-0.12-1.el7.x86_64.rpm
yum localinstall patchelf-0.12-1.el7.x86_64.rpm
pip install 'mujoco_py==2.0.2.13'
第一次编译mujoco会有一点久

在bashrc加入如下内容:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/.mujoco/mujoco200/bin
export MUJOCO_KEY_PATH=~/.mujoco${MUJOCO_KEY_PATH}
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/kewei/.mujoco/mujoco210/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/nvidia
然后就可以开启训练了。使用上一节的with保留输入。
# dqn_session.run(class_type=DQNTrainer, episode=episode)
with RealTimeCaptureAndDisplayOutput() as captured_new:
ppo_session.run(class_type=PPOTrainer, episode=episode, duration=duration)
MindSpore强化学习:使用PPO配合环境HalfCheetah-v2进行训练的更多相关文章
- 强化学习实战 | 自定义Gym环境之井字棋
在文章 强化学习实战 | 自定义Gym环境 中 ,我们了解了一个简单的环境应该如何定义,并使用 print 简单地呈现了环境.在本文中,我们将学习自定义一个稍微复杂一点的环境--井字棋.回想一下井字棋 ...
- 强化学习实战 | 自定义Gym环境之扫雷
开始之前 先考虑几个问题: Q1:如何展开无雷区? Q2:如何计算格子的提示数? Q3:如何表示扫雷游戏的状态? A1:可以使用递归函数,或是堆栈. A2:一般的做法是,需要打开某格子时,再去统计周围 ...
- 强化学习实战 | 自定义gym环境之显示字符串
如果想用强化学习去实现扫雷.2048这种带有数字提示信息的游戏,自然是希望自定义 gym 环境时能把字符显示出来.上网查了很久,没有找到gym自带的图形工具Viewer可以显示字符串的信息,反而是通过 ...
- 强化学习实战 | 自定义Gym环境
新手的第一个强化学习示例一般都从Open Gym开始.在这些示例中,我们不断地向环境施加动作,并得到观测和奖励,这也是Gym Env的基本用法: state, reward, done, info = ...
- Ubuntu下常用强化学习实验环境搭建(MuJoCo, OpenAI Gym, rllab, DeepMind Lab, TORCS, PySC2)
http://lib.csdn.net/article/aimachinelearning/68113 原文地址:http://blog.csdn.net/jinzhuojun/article/det ...
- DRL强化学习:
IT博客网 热点推荐 推荐博客 编程语言 数据库 前端 IT博客网 > 域名隐私保护 免费 DRL前沿之:Hierarchical Deep Reinforcement Learning 来源: ...
- 强化学习调参技巧二:DDPG、TD3、SAC算法为例:
1.训练环境如何正确编写 强化学习里的 env.reset() env.step() 就是训练环境.其编写流程如下: 1.1 初始阶段: 先写一个简化版的训练环境.把任务难度降到最低,确保一定能正常训 ...
- 【整理】强化学习与MDP
[入门,来自wiki] 强化学习是机器学习中的一个领域,强调如何基于环境而行动,以取得最大化的预期利益.其灵感来源于心理学中的行为主义理论,即有机体如何在环境给予的奖励或惩罚的刺激下,逐步形成对刺激的 ...
- 强化学习(十七) 基于模型的强化学习与Dyna算法框架
在前面我们讨论了基于价值的强化学习(Value Based RL)和基于策略的强化学习模型(Policy Based RL),本篇我们讨论最后一种强化学习流派,基于模型的强化学习(Model Base ...
- 强化学习(二)马尔科夫决策过程(MDP)
在强化学习(一)模型基础中,我们讲到了强化学习模型的8个基本要素.但是仅凭这些要素还是无法使用强化学习来帮助我们解决问题的, 在讲到模型训练前,模型的简化也很重要,这一篇主要就是讲如何利用马尔科夫决策 ...
随机推荐
- 工作中常用且容易遗忘的 CSS 样式清单
注:本文转载自公众号 Vue中文社区的一篇文章 1.文字超出部分显示省略号 单行文本的溢出显示省略号(一定要有宽度) p{ width:200rpx; overflow: hidden; ...
- 怎样更直观的查看KingbaseES数据库日志
数据库日志相关参数:默认设置 log_destination = 'stderr' # Valid values are combinations of # stderr, csvlog, syslo ...
- MySQL联结
创建联结 mysql> SELECT vend_name,prod_name,prod_price FROM vendors,products WHERE vendors.vend_id=pro ...
- 运维排查 | Systemd 之服务停止后状态为 failed
哈喽大家好,我是咸鱼. 我们知道 CentOS 7 之后,Systemd 代替了原来的 SystemV 来管理服务,相比 SystemV ,Systemd 能够很好地解决各个服务间的依赖关系,还能让所 ...
- #排列组合#美团2018年CodeM大赛-决赛 A-Exam
题目 分析 因为第一名所在的学校一定会发喜报, 所以只有一个学校发喜报说明其它学校都没有发喜报 钦定第一名所在的学校为1,总方案要乘\(n\),那么两个1之间不可能出现两个相同的学校的学生 那么可以分 ...
- #树状数组,并查集#CF920F SUM and REPLACE
题目 分析 由于\(a_i=1或2\)时\(d(a_i)=a_i\),且其余情况修改后答案只会越来越小, 考虑用树状数组维护区间和,用并查集跳过\(a_i=1或2\)的情况 代码 #include & ...
- 【直播回顾】OpenHarmony知识赋能第五期第二课——如何成为社区贡献达人
4月28日晚上19点,知识赋能第五期第二节课<如何成为OpenHarmony社区贡献达人?>,在OpenHarmony开发者成长计划社群内成功举行. 本期课程,由华为社区运营专家祝尚元主讲 ...
- OpenHarmony社区运营报告(2022年11月)
本月快讯 • 11月24日,第二十届中日韩三国IT局长OSS会议暨东北亚开源软件推进论坛以在线形式成功召开.经审核评选认定,OpenAtom OpenHarmony(以下简称"OpenHar ...
- Python 学习路线:介绍、基础语法、数据结构、算法、高级主题、框架及异步编程详解
Python 介绍 Python 是一种 高级 的.解释型 的.通用 的编程语言.其设计哲学强调代码的可读性,使用显著的缩进.Python 是 动态类型 和 垃圾收集 的. 基本语法 设置 Pytho ...
- 阿里开源的32B大模型到底强在哪里?
阿里巴巴最近开源了一个320亿参数的大语言模型Qwen1.5-32B,网上都说很强很强,那么它到底强在哪里呢? 更高的性价比 Qwen1.5-32B中的B是billion的意思,也就是10亿,32B就 ...