使用强化学习智能体训练Biped机器人行走

  • 两足机器人模型
  • 创建环境接口
  • 选择和创建训练智能体
    • DDPG Agent
    • TD3 Agent
  • 指定训练选项和训练智能体
  • 仿真训练过的智能体
  • 比较智能体性能
  • References

这个例子展示了如何使用深度确定性策略梯度(DDPG) agent和双延迟深度确定性策略梯度(TD3) agent训练双足机器人行走,并比较了这些训练过的agent的性能。本例中的机器人采用Simscape多体建模。

有关这些智能体的更多信息,请参见深度确定性策略梯度智能体和双延迟深度确定性策略梯度智能体。

为了在本例中进行比较,两种agent都在具有相同模型参数的两足机器人环境中进行训练。智能体也被配置为具有以下共同设置。

  1. 两足机器人的初始状态策略
  2. 行动者和评论者的网络结构,受到[2]的启发
  3. 行动者和评论者表示的选项
  4. 训练选项(采样时间,折扣因子,小批量尺寸,经验缓冲长度,探索噪声)

代码下载

两足机器人模型

本例中的强化学习环境是一个两足机器人。训练目标是用最小的控制努力使机器人在直线上行走

将模型参数加载到MATLAB工作空间中。

robotParametersRL

打开Simulink模型。

mdl = 'rlWalkingBipedRobot';
open_system(mdl)


机器人模型使用Simscape Multibody。

对于这个模型:

  1. 在中立的0弧度体位,两个腿是伸直的,脚踝平。
  2. 使用Simscape Multibody中的 Spatial Contact Force(Simscape Multibody)块建模足部接触。
  3. agent可以通过施加从-3到3 N·m的扭矩信号来控制机器人两条腿上的3个独立关节(踝关节、膝关节和髋关节)。实际计算的动作信号在-1到1之间归一化。

环境向智能体提供了29个观察值,这些观察值是:

  1. 躯干中心的 y (侧向)和 z (垂直)平移。z 方向的平移被归一化为与其他观测值相似的范围。
  2. x (向前)、 y (横向)和 z (垂直)平移速度。
  3. 躯干的偏航、倾斜和滚转角度。
  4. 躯干的偏航、俯仰和侧滚角速度。
  5. 双腿3个关节(踝关节、膝关节、髋关节)的角位置和速度。
  6. 上一个时间步骤的操作值。

如果出现以下任何一种情况,则该事件终止。

  1. 机器人躯干重心在 z 方向(下落)小于0.1米,在 y 方向(横向运动)大于1米。
  2. 滚转、俯仰或偏航的绝对值大于0.7854 rad。

下面的奖励函数rtr_trt​,在每个时间步提供的灵感来自于[1]。这个奖励函数通过为积极的前进速度提供积极的奖励来鼓励智能体前进。它也鼓励智能体避免episode 终止,通过在每一个时间步骤提供一个恒定的奖励(25 Ts Tf)。奖励函数中的其他条款是对横向和纵向转变的重大变化的惩罚,以及对过度控制作用的使用。

这里:

  1. vxv_xvx​是机器人在 x 方向(向目标前进)的平移速度。
  2. y 是机器人从目标直线轨迹的横向移动位移。
  3. z^\hat{z}z^ 是机器人质心的归一化垂直平移位移。
  4. Ut−1iU^i_{t-1}Ut−1i​是上一个时间步长的关节 i 的扭矩。
  5. Ts 是环境的采样时间。
  6. Tf 是环境的最终模拟时间。

创建环境接口

创建观察规范。

numObs = 29;
obsInfo = rlNumericSpec([numObs 1]);
obsInfo.Name = 'observations';

创建动作规范。

numAct = 6;
actInfo = rlNumericSpec([numAct 1],'LowerLimit',-1,'UpperLimit',1);
actInfo.Name = 'foot_torque';

为步行机器人模型创建环境接口。

blk = [mdl,'/RL Agent'];
env = rlSimulinkEnv(mdl,blk,obsInfo,actInfo);
env.ResetFcn = @(in) walkerResetFcn(in,upper_leg_length/100,lower_leg_length/100,h/100);

选择和创建训练智能体

这个示例提供了使用 DDPG 或 TD3智能体来训练机器人的选项。要使用您选择的智能体仿真机器人,请相应地设置 AgentSelection 标志。

AgentSelection = 'TD3';
switch AgentSelectioncase 'DDPG'agent = createDDPGAgent(numObs,obsInfo,numAct,actInfo,Ts);case 'TD3'agent = createTD3Agent(numObs,obsInfo,numAct,actInfo,Ts);otherwisedisp('Enter DDPG or TD3 for AgentSelection')
end

createDDPGAgent 和 createTD3Agent 帮助函数执行以下操作。

  1. 创建行动者和评论者网络。
  2. 为行动者和评论者表示指定选项。
  3. 使用创建的网络和指定的选项创建行动者和评论者表示。
  4. 配置特定于智能体的选项。
  5. 创建智能体。

DDPG Agent

一个 DDPG 智能体使用评论值函数表示来近似给予观察和行动的长期奖励。DDPG 智能体通过使用行动者表示来决定采取给定的观察值的动作。这个例子的行动者和评论者网络的灵感来自于[2]。

有关创建 DDPG 智能体的详细信息,请参阅 createDDPGAgent 帮助函数。有关配置 DDPG 智能体选项的信息,请参见 rddpgagentoptions。

有关创建深层神经网络值函数表示的详细信息,请参阅创建策略和值函数表示。有关为 DDPG 智能体创建神经网络的示例,请参阅 trainddpg 智能体控制双积分器系统。

TD3 Agent

TD3智能体使用两个评价函数表示近似给定的观察和行为的长期奖励。TD3智能体使用行动者表示决定采取给定的观察值的操作。该智能体使用的行动者和评论者网络的结构与 DDPG 智能体使用的结构相同。

一个 DDPG 代理可能会高估 q 值。由于这个 q 值用于更新智能体的策略(行动者) ,所以结果策略可能是次优的,累积训练错误可能导致不同的行为。TD3算法是 DDPG 的扩展,通过防止对 q 值的过高估计,使其更加鲁棒。

  1. TD3智能体分别独立学习两个评论网络,并利用最小值函数估计更新行动者(策略)。这样做可以防止后续步骤中的错误积累和对 q 值的过高估计。
  2. 加入目标策略噪声ーー在目标动作中加入夹持噪声,以平滑 q 函数值。这样做可以防止学习一个不正确的尖峰噪声值估计。
  3. 延迟策略和目标更新ー对于 TD3智能体,建议延迟行动者的网络更新,因为它允许 q 函数在更新策略之前有更多的时间来减少错误(接近所需的目标)。这样做可以防止价值估计的差异,并导致更高质量的策略更新。

有关创建 TD3智能体的详细信息,请参阅 createTD3Agent helper 函数。有关配置 TD3智能体选项的信息,请参见 rlTD3AgentOptions。

指定训练选项和训练智能体

对于本例,DDPG 和 TD3智能体的训练选项是相同的。这些选项基于以下要求。

  1. 每个训练部分有2000episode ,每个episode 持续最多的 maxSteps 时间步骤。
  2. 在“episode 管理器”对话框中显示训练进度(设置“Plots ”选项) ,并禁用命令行显示(设置“Verbose ”选项)。
  3. 只有当训练达到最大系列长度时才终止训练。这样做可以比较多个智能体在整个训练过程中的学习曲线。
maxEpisodes = 2000;
maxSteps = floor(Tf/Ts);
trainOpts = rlTrainingOptions(...'MaxEpisodes',maxEpisodes,...'MaxStepsPerEpisode',maxSteps,...'ScoreAveragingWindowLength',250,...'Verbose',false,...'Plots','training-progress',...'StopTrainingCriteria','EpisodeCount',...'StopTrainingValue',maxEpisodes,...'SaveAgentCriteria','EpisodeCount',...'SaveAgentValue',maxEpisodes);

若要并行训练智能体,请指定以下训练选项。并行训练需要并行计算 ToolboxTM。如果没有安装并行计算工具箱软件,请将 Parallel 设置为 false

  1. 将 useballow 选项设置为 true。
  2. 异步并行地训练智能体。
  3. 每32个步骤之后,让每个worker向主机发送经验。DDPG 和 TD3智能体要求worker向主机发送经验。
trainOpts.UseParallel = true;
trainOpts.ParallelizationOptions.Mode = 'async';
trainOpts.ParallelizationOptions.StepsUntilDataIsSent = 32;
trainOpts.ParallelizationOptions.DataToSendFromWorkers = 'Experiences';

使用 Train 函数训练智能体。这个过程是计算密集型的,需要几个小时来完成每个智能体。若要在运行此示例时节省时间,请通过将 doTraining 设置为 false 来加载预训练的智能体。要自己训练智能体,请将 doTraining 设置为 true。由于在并行训练的随机性,你可以从下面的情节得到不同的训练结果。这些经过训练的智能体由4个worker并行训练。

doTraining = false;
if doTraining    % Train the agent.trainingStats = train(agent,env,trainOpts);
else% Load a pretrained agent for the selected agent type.if strcmp(AgentSelection,'DDPG')load('rlWalkingBipedRobotDDPG.mat','agent')elseload('rlWalkingBipedRobotTD3.mat','agent')end
end


对于前面的示例训练曲线,DDPG 和 TD3智能体每个训练步骤的平均时间分别为0.11和0.12秒。TD3智能体每步需要更多的训练时间,因为它更新两个评论者网络,而 DDPG 只需更新一个评论者网络。

仿真训练过的智能体

固定随机生成器种子的再现性。

rng(0)

为了验证训练过的智能体的性能,在双足机器人环境下进行仿真。有关智能体仿真的更多信息,请参见 rlSimulationOptions 和 sim。

simOptions = rlSimulationOptions('MaxSteps',maxSteps);
experience = sim(env,agent,simOptions);

比较智能体性能

在下面的智能体比较中,每个智能体被训练五次,每次使用不同的随机种子。由于并行训练中随机性和随机性的影响,每次训练的学习曲线是不同的。由于对智能体进行多次运行的训练需要几天的时间来完成,所以这种比较使用了经过训练的智能体。

comparePerformance('DDPGAgent','TD3Agent')


根据 Learning curve comparison 比较图:

  1. DDPG 似乎学得更快了(平均600 episode 左右) ,但是达到了局部极小值。TD3启动较慢,但最终比 DDPG 获得更高的回报,因为它避免了对 q 值的过高估计。
  2. TD3智能体的学习曲线稳步改善,表明与 DDPG 智能体相比,其稳定性有所提高。

根据Episode Q0 comparison的比较情节:

  1. 对于 TD3智能体,折扣长期报酬(2000 episode )的评论者估计低于 DDPG 智能体。这是因为 TD3算法在更新目标时采用了保守的方法,使用了两个最小 q 函数。由于对目标的延迟更新,这种行为得到了进一步的增强。
  2. 虽然 TD3对这2000 episode 的估计是低的,但是 TD3智能体在 Q0值上有稳定的增加,这与 DDPG 的智能体不同。

在这个例子中,训练被停止在2000 episode 。对于一个较大的训练周期,TD3智能体的估计值稳步增加,显示了收敛到真正折现的长期报酬的潜力。

有关如何训练DDPG智能体走路以Simscape™Multibody™建模的人形机器人的另一个示例,请参阅训练人形机器人Walker(Simscape Multibody)。 有关如何训练DDPG智能体行走四足机器人的示例,请参阅使用DDPG智能体的四足机器人运动。

References

[1] Heess, Nicolas, Dhruva TB, Srinivasan Sriram, Jay Lemmon, Josh Merel, Greg Wayne, Yuval Tassa, et al. ‘Emergence of Locomotion Behaviours in Rich Environments’. ArXiv:1707.02286 [Cs], 10 July 2017. https://arxiv.org/abs/1707.02286.

[2] Lillicrap, Timothy P., Jonathan J. Hunt, Alexander Pritzel, Nicolas Heess, Tom Erez, Yuval Tassa, David Silver, and Daan Wierstra. ‘Continuous Control with Deep Reinforcement Learning’. ArXiv:1509.02971 [Cs, Stat], 5 July 2019. https://arxiv.org/abs/1509.02971.

[3] Fujimoto, Scott, Herke van Hoof, and David Meger. ‘Addressing Function Approximation Error in Actor-Critic Methods’. ArXiv:1802.09477 [Cs, Stat], 22 October 2018. https://arxiv.org/abs/1802.09477.

MATLAB强化学习实战(十三) 使用强化学习智能体训练Biped机器人行走相关推荐

  1. MATLAB强化学习实战(一) 强化学习智能体训练总览

    强化学习智能体训练总览 简介 训练算法 情节管理器 保存候选智能体 并行计算 GPU加速 验证训练后的策略 环境验证 简介 创建环境和强化学习智能体后,您可以使用训练功能在环境中训练智能体. 要配置您 ...

  2. MATLAB强化学习工具箱(十一)训练DDPG智能体控制飞行机器人

    训练DDPG智能体控制飞行器 飞行机器人模型 创建集成模型 动作与观察 创建环境接口 重置函数 创建DDPG智能体 训练智能体 DDPG智能体仿真 本示例说明如何训练深度确定性策略梯度(DDPG)智能 ...

  3. Keras深度学习实战——使用深度Q学习进行SpaceInvaders游戏

    Keras深度学习实战--使用深度Q学习进行SpaceInvaders游戏 0. 前言 1. 问题与模型分析 2. 使用深度 Q 学习进行 SpaceInvaders 游戏 相关链接 0. 前言 在& ...

  4. 【Nature重磅】OpenAI科学家提出全新强化学习算法,推动AI向智能体进化

    深度强化学习实验室 官网:http://www.neurondance.com/ 论坛:http://deeprl.neurondance.com/ 编辑:DeepRL 近年来,人工智能(AI)在强化 ...

  5. 转:tensorflow深度学习实战笔记(二):把训练好的模型进行固化

    原文地址:https://blog.csdn.net/chenyuping333/article/details/82106863 目录 一.导出前向传播图 二.对模型进行固化 三.pb文件转tfli ...

  6. DeepMind大放送:开放4个多物体表征学习数据集,还有一篇智能体新研究

    铜灵 发自 凹非寺 量子位 出品 | 公众号 QbitAI "专注开源一百年"的DeepMind,今天又有了新动作. 这次连环放送包含的新物件不少:四个多物体表征学习数据集,还有一 ...

  7. 组会汇报(本科)-在复杂楼层背景下,一种基于深度强化学习的目的楼层预约调度算法的多智能体电梯群控系统的研究

    项目代码地址 总体流程 引入概念,说明问题,讲解论文,提出方案 对综述的引用说明,在老师给的综述中,文献调研时间是2019,从技术的发展历程角度考虑,本文只作部分引用,更多地倚靠2020左右地文章,因 ...

  8. Retro-用于强化学习智能体训练的各种有趣的游戏环境集合

    目录 步骤 安装 测试 查看游戏列表 issue 一.单智能体环境 90后大概都玩过的游戏环境 冒险岛系列 忍者神龟 二.多智能体环境 https://openai.com/blog/gym-retr ...

  9. 深度学习实战(七)——目标检测API训练自己的数据集(R-FCN数据集制作+训练+测试)

    TensorFlow提供的网络结构的预训练权重:https://cloud.tencent.com/developer/article/1006123 将voc数据集转换成.tfrecord格式供te ...

最新文章

  1. Linux入门第五集!MySQL8在Linux上的安装!MySQL的Linux资源分享!
  2. 新手入门深度学习 | 2-4:时间序列数据建模流程示例
  3. Linux shell ==运算符
  4. ES关于文档的基本操作
  5. foreach 循环详解
  6. java登录界面命令_Java命令行界面(第10部分):picocli
  7. Android 固定式底部上滑抽屉view
  8. mysql 5.7.13 mac_Mac 安装mysql 5.7.13版本 登录及改密码
  9. Python 中的协程 (4) asyncio模块
  10. VS下如何配置才能使用 cl 命令行方式编译 C/C++ 程序
  11. 无人驾驶出租车已经在北京全面开放,未来普通人还需要学驾照吗?
  12. Axure RP 8.1最新激活码
  13. linux fedora14 u盘运行,通过U盘安装Fedora-14-i686-Live-Desktop
  14. 贪吃蛇c语言代码vc,纯C语言实现贪吃蛇游戏(VC6.0)
  15. 在OEL6.5平台安装Oracle11g 数据库
  16. B. Alice and the List of Presents(组合数学)
  17. word 2019 深黑色背景如何改成白色(已解决)
  18. JavaScript大作业 (校园运动会网站设计与实现)
  19. to be top。。。
  20. 人见人“吐”的十大经典广告(绝对超经典)[zzzz]

热门文章

  1. 开放集识别之GPD and GEV Classi ers
  2. 一加8T,一加8和一加8Pro有什么区别哪个好?分析优缺点?
  3. 机器人研发十大热门编程语言:不死 Java、不朽 C/C ++、新贵 Python
  4. Spring个人深入学习路线图
  5. wow达拉然发礼物机器人_达拉然彩蛋:会把玩家变羊的NPC,并赠送礼物
  6. c#如何实现软件授权后才能使用?
  7. getWriter()
  8. 十大经典排序算法动图图解
  9. Python 采集87个手绘风格PPT模板
  10. 抖音SEO,抖音seo优化