此示例显示如何培训深度确定性策略梯度(DDPG)代理以摆动并使用Matlab®中建模的图像观察平衡摆锤。
有关DDPG代理商的更多信息,请参阅深度确定性政策梯度代理。
用于该示例的增强学习环境是一个简单的无摩擦摆锤,其最初悬挂在向下位置。培训目标是使摆锤直立,而不会使用最小的控制工作。
对于这个环境:
向上平衡的摆锤位置是0.
弧度和向下悬挂的位置是PI.
弧度。
来自代理到环境的扭矩动作信号来自-2至2 n·m。
来自环境的观察是表示摆质量和摆锤角速度的位置的图像。
奖励 ,每次步骤都提供了
这里:
是从直立位置的位移角度。
是位移角度的衍生物。
是前一步的控制力。
有关此模型的更多信息,请参阅负载预定义控制系统环境。
为摆锤创建预定义的环境界面。
Env = Rlpredefinedenv('SimpleDeputulumWithimage-Continue')
Env = SimpleeplumWithimageConeTinuredeAgutace
界面具有连续的动作空间,其中代理可以在-2到2 n·m之间施加扭矩。
从环境界面获取观察和动作规范。
ObsInfo = GetobservationInfo(ENV);Actinfo = GetActionInfo(Env);
修复随机发生器种子以进行再现性。
RNG(0)
DDPG代理使用批评价值函数表示来估计长期奖励,给定观察和行动。要创建评论家,首先创建一个具有三个输入(图像,角速度和动作)和一个输出的深度卷积神经网络(CNN)。有关创建表示的更多信息,请参阅创建策略和值函数表示。
hiddenlayersize1 = 400;hiddenlayersize2 = 300;IMGPath = [ImageInputLayer(ObsInfo(1).dimension,'正常化'那'没有任何'那'名称',Obsinfo(1).name)卷积2dlayer(10,2,'名称'那'conv1'那'走吧',5,'填充',0)剥离('名称'那'relu1')全连接列(2,'名称'那'fc1')concatenationLayer(3,2,'名称'那'cat1')全连接列(HiddenLayerSize1,'名称'那'fc2')剥离('名称'那'relu2')全连接层(HiddenLayerSize2,'名称'那'fc3')附加层(2,'名称'那'添加')剥离('名称'那'relu3')全康连接层(1,'名称'那'fc4')];dthetapath = [imageinputlayer(Obsinfo(2).dimension,'正常化'那'没有任何'那'名称',ObsInfo(2).name)全连接列(1,'名称'那'fc5'那'biaslearnratefactor',0,'偏见',0)];ActPath = [ImageInputLayer(Actinfo(1).dimension,'正常化'那'没有任何'那'名称'那'行动')全连接层(HiddenLayerSize2,'名称'那'fc6'那'biaslearnratefactor',0,'偏见',零(HiddenLayersize2,1))];批判性= taterpraph(Imgpath);批评网络= addlayers(批判性,dthetapath);批评者= addlayers(批判性,Actpath);批评网络= ConnectLayers(批评者,'fc5'那'cat1 / in2');批评网络= ConnectLayers(批评者,'fc6'那'添加/ in2');
查看批评批评网络配置。
图情节(批评性)
指定使用批评者的选项rlrepresentationOptions.
。
QuandOptions = rlrepresentationOptions('学习',1e-03,'gradientthreshold',1);
取消了以下行使用GPU加速批评CNN的培训。有关支持的GPU的更多信息,请参阅金宝appGPU通金宝app过发布支持(并行计算工具箱)。
%批评.Evedevice ='GPU';
使用指定的神经网络和选项创建批读表示。您还必须指定从环境界面获取的批评者的操作和观察信息。有关更多信息,请参阅rlqvalueerepresentation
。
评论家= rlqvalueerepresentation(批评,undernfo,Actinfo,......'观察',{'pendimage'那'Angularrate'},'行动',{'行动'},批评);
DDPG代理决定使用演员表示获取观察的行动。要创建演员,首先创建具有两个输入(图像和角速度)和一个输出(动作)的深卷积神经网络(CNN)。
以与评论家类似的方式构建演员。
IMGPath = [ImageInputLayer(ObsInfo(1).dimension,'正常化'那'没有任何'那'名称',Obsinfo(1).name)卷积2dlayer(10,2,'名称'那'conv1'那'走吧',5,'填充',0)剥离('名称'那'relu1')全连接列(2,'名称'那'fc1')concatenationLayer(3,2,'名称'那'cat1')全连接列(HiddenLayerSize1,'名称'那'fc2')剥离('名称'那'relu2')全连接层(HiddenLayerSize2,'名称'那'fc3')剥离('名称'那'relu3')全康连接层(1,'名称'那'fc4')Tanhlayer('名称'那'tanh1')ScalingLayer('名称'那'scale1'那'规模',max(actinfo.upperlimit))];dthetapath = [imageinputlayer(Obsinfo(2).dimension,'正常化'那'没有任何'那'名称',ObsInfo(2).name)全连接列(1,'名称'那'fc5'那'biaslearnratefactor',0,'偏见',0)];Actornetwork = TallayGraph(IMGPath);Actornetwork = Addlayers(Actornetwork,Dthetapath);ActorNetWork = ConnectLayers(ActorNetWork,'fc5'那'cat1 / in2');ACTOROPTIONS = RLREPRESENTATIONOPTIONS('学习',1E-04,'gradientthreshold',1);
取消注释以下行使用GPU加速演员CNN的培训。
%ACTOROPTIONS.useVICE ='GPU';
使用指定的神经网络和选项创建演员表示。有关更多信息,请参阅RLDETerminyActorRepresentation
。
Actor = RLDETerminyActorRepresentation(Actornetwork,Obsinfo,Actinfo,'观察',{'pendimage'那'Angularrate'},'行动',{'scale1'},ActorOptions);
查看Actor网络配置。
图情节(Actornetwork)
要创建DDPG代理,首先使用DDPG代理选项使用rlddpgagentoptions.
。
AgentOptions = RLDDPGagentOptions(......'采样时间',env.ts,......'targetsmoothfactor',1e-3,......'经验BufferLength',1E6,......'贴花因子',0.99,......'minibatchsize',128);代理选项.NoiseOptions.variance = 0.6;代理选项.NoiseOptions.varecedCayrate = 1E-6;
然后使用指定的Actor表示,批评者表示和代理选项创建代理。有关更多信息,请参阅rlddpgagent.
。
代理= rlddpgagent(演员,批评者,代理选项);
要培训代理,首先指定培训选项。对于此示例,请使用以下选项。
每次运行每次5000次剧集,每个剧集都持续至多400次。
在Episode Manager对话框中显示培训进度(设置绘图
选项)。
当代理在连续十集中收到大于-740的移动平均累积奖励时停止培训。此时,代理商可以使用最小的控制工作快速平衡摆锤的摆锤。
有关更多信息,请参阅rltringOptions.
。
maxepisodes = 5000;maxsteps = 400;trysertingoptions = rltringOptions(......'maxepisodes',maxepisodes,......'maxstepperepisode',maxsteps,......'plots'那'培训 - 进步'那......'stoptrinaincriteria'那'AverageReward'那......'stoptriningvalue',-740);
您可以使用使用的位置来可视化主张阴谋
培训或模拟期间的功能。
情节(env)
使用该代理商培训火车
功能。培训此代理是一个计算密集型进程,需要几个小时才能完成。要在运行此示例的同时节省时间,请通过设置加载预制代理用圆形
至错误的
。训练代理人,套装用圆形
至真的
。
dotraining = false;如果用圆形%训练代理人。TrainingStats =火车(代理商,ENV,TRANETIONOPTIONS);别的%负载净化代理。加载('simple quidulumwithimageddpg.mat'那'代理人')结尾
要验证培训的代理的性能,请在摆内环境中模拟它。有关代理模拟的更多信息,请参阅RlsimulationOptions.
和SIM
。
simoptions = rlsimulation选项('maxsteps',500);体验= SIM(ENV,Agent,SimOptions);