使用DDPG代理的四足机器人运动
这个例子展示了如何使用深度确定性策略梯度(DDPG)代理来训练一个四足机器人行走。本例中的机器人使用Simscape™Multibody™建模。有关DDPG代理的更多信息,请参见双延迟深度确定性策略梯度代理。
在MATLAB®中将必要的参数加载到基本工作区中。
initializeRobotParameters
四足机器人模型
本例的环境是一个四足机器人,训练目标是用最小的控制力使机器人在直线上行走。
打开模型。
mdl =“rlQuadrupedRobot”;open_system (mdl)
该机器人采用Simscape多体建模,其主要结构部件包括四条腿和一个躯干。腿通过转动关节与躯干相连,使腿相对于躯干旋转。关节由RL代理提供的扭矩信号驱动。
观察
机器人环境向代理提供44个观察值,每个都归一化在-1到1之间。这些观察结果是:
躯干质心的Y(垂直)和Y(横向)位置
四元数代表躯干的朝向
X(向前),Y(垂直),Z(横向)躯干在质心处的速度
躯干的滚动、俯仰和偏航率
每条腿的髋关节和膝关节的角度位置和速度
每条腿因接触地面而产生的法力和摩擦力
前一个时间步的动作值(每个关节的扭矩)
对于所有四条腿,臀部和膝关节角度的初始值分别设置为-0.8234和1.6468弧度。关节的中点位置设为0弧度。当腿被拉伸到最大程度并与地面垂直对齐时,腿处于中立位置。
行动
代理生成8个在-1到1之间归一化的动作。在与缩放因子相乘后,这些动作对应于转动关节的8个关节力矩信号。对于每个关节,关节扭矩的整体界限为+/ - 10 N·m。
奖励
以下奖励在训练过程中的每一个时间步骤提供给代理。这个奖励函数通过为正向前进速度提供正向奖励来鼓励agent前进。它还通过提供恒定的奖励( )在每个时间步。奖励函数中其余的项是惩罚,以阻止不需要的状态,如偏离预期高度和方向的较大偏差或使用过多的关节力矩。
在哪里
是躯干质心在x方向上的速度。
和 分别是环境的采样时间和最终模拟时间。
为躯干质心从0.75 m期望高度的缩放高度误差。
是躯干的俯仰角。
动作价值为关节吗 从上一个时间步。
集终止
在训练或模拟过程中,如果出现以下任何情况,本集将终止。
躯干质心离地面的高度低于0.5米(坠落)。
躯干的头部或尾部在地面以下。
任何膝关节都在地面以下。
横摇、俯仰或偏航角都在边界外(分别为+/ - 0.1745、+/ - 0.1745、+/ - 0.3491弧度)。
创建环境接口
指定观测集的参数。
numObs = 44;obsInfo = rlNumericSpec([numObs 1]);obsInfo。Name =“观察”;
指定动作集的参数。
numAct = 8;actInfo = rlNumericSpec([numAct 1],“LowerLimit”, 1“UpperLimit”1);actInfo。Name =“扭矩”;
使用强化学习模型创建环境。
BLK = MDL +“/ RL代理”;env = rlSimulinkEnv (mdl,黑色,obsInfo actInfo);
在训练过程中,复位函数将关节初始角度和角速度引入随机偏差。
env。ResetFcn = @quadrupedResetFcn;
创建DDPG代理
DDPG代理通过使用批评家价值函数表示来近似给出观察和行动的长期奖励。代理还使用参与者表示,在给定观察结果的情况下决定采取哪种行动。本例中的演员和评论家网络受到[2]的启发。
有关创建深度神经网络值函数表示的更多信息,请参见创建政策和价值功能。为DDPG代理创建神经网络的例子,请参见训练DDPG代理控制双积分器系统。
设置随机种子。
rng (0)
在MATLAB工作空间中创建网络createNetworks
helper函数。
createNetworks
,您还可以交互式地创建您的演员和评论家网络深层网络设计师应用程序。
查看批评家网络配置。
情节(criticNetwork)
查看演员网络配置。
情节(actorNetwork)
使用指定代理选项rlDDPGAgentOptions
。
agentOptions = rlDDPGAgentOptions ();agentOptions。SampleTime = t;agentOptions。DiscountFactor = 0.99;agentOptions。MiniBatchSize = 128;agentOptions。ExperienceBufferLength = 1 e6;agentOptions。TargetSmoothFactor = 1e-3; agentOptions.NoiseOptions.MeanAttractionConstant = 0.15; agentOptions.NoiseOptions.Variance = 0.1;
为演员和评论家指定优化器选项。
agentOptions.ActorOptimizerOptions.Algorithm =“亚当”;agentOptions.ActorOptimizerOptions.LearnRate = 1的军医;agentOptions.ActorOptimizerOptions.GradientThreshold = 1;agentOptions.ActorOptimizerOptions。L2RegularizationFactor = 1 e-5;agentOptions.CriticOptimizerOptions.Algorithm =“亚当”;agentOptions.CriticOptimizerOptions.LearnRate = 1 e - 3;agentOptions.CriticOptimizerOptions.GradientThreshold = 1;agentOptions.CriticOptimizerOptions。L2RegularizationFactor = 2的军医;
创建rlDDPGAgent
对象,用于代理。
代理= rlDDPGAgent(演员、评论家、agentOptions);
指定培训选项
要培训代理,首先指定以下培训选项:
每集训练最多运行1万集,每集最长持续时间
maxSteps
时间的步骤。在插曲管理器对话框中显示训练进度(设置
情节
选项)。当代理连续250集获得平均累计奖励大于190时停止训练。
累计奖励大于220的每一集,保存一份代理副本。
trainOpts = rlTrainingOptions (…MaxEpisodes = 10000,…MaxStepsPerEpisode =地板(Tf / Ts),…ScoreAveragingWindowLength = 250,…情节=“训练进步”,…StopTrainingCriteria =“AverageReward”,…StopTrainingValue = 210,…SaveAgentCriteria =“EpisodeReward”,…SaveAgentValue = 220);
要对代理进行并行培训,请指定以下培训选项。并行训练需要并行计算工具箱™软件。如果没有安装并行计算工具箱™软件,请设置UseParallel
来假
。
设置
UseParallel
t选项街
。并行异步地训练代理。
DDPG代理需要工人发送
“经验”
主机。
trainOpts。UseParallel = true;trainOpts.ParallelizationOptions.Mode =“异步”;trainOpts.ParallelizationOptions.DataToSendFromWorkers =“经验”;
火车代理
训练代理使用火车
函数。由于机器人模型的复杂性,这个过程计算量很大,需要几个小时才能完成。为了在运行此示例时节省时间,可以通过设置加载一个预先训练过的代理doTraining
来假
。自己训练特工,设doTraining
来真正的
。由于并行训练的随机性,你可以从下图中预期不同的训练结果。
doTraining = false;如果doTraining%培训代理。trainingStats =火车(代理,env, trainOpts);其他的%加载示例的预训练代理参数。负载(“rlQuadrupedAgentParams.mat”,“参数”) setLearnableParameters(代理params);结束
模拟训练的代理
修复随机生成器种子的可重复性。
rng (0)
要验证经过训练的代理的性能,请在机器人环境中模拟它。有关代理模拟的更多信息,请参见rlSimulationOptions
和sim卡
。
simOptions = rlSimulationOptions (MaxSteps =地板(Tf / Ts));经验= sim (env,代理,simOptions);
参考文献
[1] Heess, Nicolas, Dhruva TB, Srinivasan Sriram, Jay Lemmon, Josh Merel, Greg Wayne, Yuval Tassa, et al.“在丰富环境中运动行为的出现”。ArXiv: 1707.02286 (Cs), 2017年7月10日。https://arxiv.org/abs/1707.02286。
[2] Lillicrap, Timothy P., Jonathan J. Hunt, Alexander Pritzel, Nicolas Heess, Tom Erez, Yuval Tassa, David Silver和Daan Wierstra。“深度强化学习的持续控制”。ArXiv: 1509.02971 (Cs,统计), 2019年7月5日。https://arxiv.org/abs/1509.02971。