主要内容

培训DDPG代理以摇摆和平衡摆动图像观察

此示例显示如何培训深度确定性策略梯度(DDPG)代理以摆动并使用Matlab®中建模的图像观察平衡摆锤。

有关DDPG代理商的更多信息,请参阅深度确定性政策梯度代理

简单的摆锤与图像matlab环境

用于该示例的增强学习环境是一个简单的无摩擦摆锤,其最初悬挂在向下位置。培训目标是使摆锤直立,而不会使用最小的控制工作。

对于这个环境:

  • 向上平衡的摆锤位置是0.弧度和向下悬挂的位置是PI.弧度。

  • 来自代理到环境的扭矩动作信号来自-2至2 n·m。

  • 来自环境的观察是表示摆质量和摆锤角速度的位置的图像。

  • 奖励 R. T. ,每次步骤都提供了

R. T. = - θ. T. 2 + 0. 1 θ. T. ˙ 2 + 0. 001 T. - 1 2

这里:

  • θ. T. 是从直立位置的位移角度。

  • θ. T. ˙ 是位移角度的衍生物。

  • T. - 1 是前一步的控制力。

有关此模型的更多信息,请参阅负载预定义控制系统环境

创建环境界面

为摆锤创建预定义的环境界面。

Env = Rlpredefinedenv('SimpleDeputulumWithimage-Continue'
Env = SimpleeplumWithimageConeTinuredeAgutace

界面具有连续的动作空间,其中代理可以在-2到2 n·m之间施加扭矩。

从环境界面获取观察和动作规范。

ObsInfo = GetobservationInfo(ENV);Actinfo = GetActionInfo(Env);

修复随机发生器种子以进行再现性。

RNG(0)

创建DDPG代理

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');

查看批评批评网络配置。

图情节(批评性)

图包含轴。轴包含Type Graphplot的对象。

指定使用批评者的选项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)

图包含轴。轴包含Type Graphplot的对象。

要创建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)

图简单的柱形可视化器包含2个轴。轴1包含2个类型的线,矩形。轴2包含类型图像的对象。

使用该代理商培训火车功能。培训此代理是一个计算密集型进程,需要几个小时才能完成。要在运行此示例的同时节省时间,请通过设置加载预制代理用圆形错误的。训练代理人,套装用圆形真的

dotraining = false;如果用圆形%训练代理人。TrainingStats =火车(代理商,ENV,TRANETIONOPTIONS);别的%负载净化代理。加载('simple quidulumwithimageddpg.mat''代理人'结尾

模拟DDPG代理

要验证培训的代理的性能,请在摆内环境中模拟它。有关代理模拟的更多信息,请参阅RlsimulationOptions.SIM

simoptions = rlsimulation选项('maxsteps',500);体验= SIM(ENV,Agent,SimOptions);

图简单的柱形可视化器包含2个轴。轴1包含2个类型的线,矩形。轴2包含类型图像的对象。

也可以看看

相关话题