这个例子展示了如何使用异步并行训练训练一个AC (actor-critic)代理来平衡MATLAB®中建模的车杆系统。有关如何在不使用并行训练的情况下训练代理的示例,请参见训练AC代理平衡车-杆系统.
使用与AC代理的并行计算时,每个工作人员从其代理和环境的副本生成体验。毕竟N
步骤中,工作人员根据经验计算渐变,并将计算出的渐变发送回主机代理。主机代理更新其参数如下所示。
对于异步培训,主机代理应用接收到的渐变,而不等待所有工作者发送渐变,并将更新后的参数发送回提供渐变的工作者。然后,工作者继续使用更新后的参数从其环境中生成经验。
对于同步培训,主机代理等待从所有工作者接收渐变并使用这些渐变更新其参数。然后主机同时向所有的工作者发送更新的参数。然后,所有工人继续使用更新后的参数生成经验。
为购物车系统创建一个预定义的环境界面。有关此环境的更多信息,请参阅负载预定义控制系统环境.
Env = Rlpredefinedenv(“CartPole-Discrete”);env.penaltyforafaling = -10;
从环境接口获取观察和操作信息。
ObsInfo = GetobservationInfo(ENV);numobservations = Obsinfo.dimension(1);Actinfo = GetActionInfo(Env);
修复了可重复性的随机生成器种子。
RNG(0)
AC代理使用评价值函数表示,通过给定的观察和行动来近似长期奖励。要创建评论家,首先要创建一个深度神经网络,它有一个输入(观察)和一个输出(状态值)。由于环境提供了4个观测结果,因此评论家网络的输入规模为4。有关创建深度神经网络值函数表示的更多信息,请参见创建策略和值函数表示.
批评= [featureInputLayer(4,'正常化'那'没有任何'那'名称'那“状态”)全连接列(32,'名称'那“CriticStateFC1”)剥离('名称'那“CriticRelu1”)全康连接层(1,'名称'那'批评'));criticOpts = rlRepresentationOptions ('学习',1e-2,'gradientthreshold'1);评论家= rlValueRepresentation (criticNetwork obsInfo,'观察',{“状态”}, criticOpts);
AC代理商决定使用演员代表的观察到进行哪些行动。要创建演员,请创建一个具有一个输入(观察)和一个输出(动作)的深神经网络。Actor网络的输出大小为2,因为代理可以将2力值应用于环境,-10和10。
[featureInputLayer(4,'正常化'那'没有任何'那'名称'那“状态”)全连接列(32,'名称'那'ActorstateFC1')剥离('名称'那“ActorRelu1”)全连接列(2,'名称'那'行动'));Actoropts = RlrepresentationOptions('学习',1e-2,'gradientthreshold'1);演员= rlStochasticActorRepresentation (actorNetwork obsInfo actInfo,......'观察',{“状态”},actoropts);
要创建AC代理,请先使用AC代理选项指定使用rlACAgentOptions
.
代理= rlacagentoptions(......“NumStepsToLookAhead”,32,......'entropylossweight',0.01,......“DiscountFactor”,0.99);
然后使用指定的Actor表示和代理选项创建代理。有关更多信息,请参阅rlacagent.
.
代理= rlacagent(演员,批评者,代理商);
要训练代理,首先指定训练选项。对于本例,使用以下选项。
每次训练最多跑一次1000
剧集,每一集最多持久500.
时间步骤。
在Episode Manager对话框中显示培训进度(设置绘图
选项)并禁用命令行显示(设置详细的
选项)。
停止训练时,代理人收到的平均累积奖励大于500.
超过10.
连续发作。此时,代理可以在直立位置平衡摆锤。
训练= rltrainingOptions(......“MaxEpisodes”,1000,......“MaxStepsPerEpisode”, 500,......'verbose'假的,......'plots'那'培训 - 进步'那......'stoptrinaincriteria'那'AverageReward'那......“StopTrainingValue”,500,......'scoreaveragingwindowlength',10);
您可以在可视化的拉杆系统中进行训练或模拟使用阴谋
函数。
情节(env)
要使用并行计算训练代理,请指定以下培训选项。
设定使用指α.
选项真正的
.
通过设置培训代理ParallelizationOptions。模式
选项“异步”
.
每32步之后,每个worker根据经验计算渐变,并将它们发送给主机。
AC代理需要工人发送“渐变“
到主人。
AC代理要求“StepsUntilDataIsSent”
等于AgentOptions.NumStepStolookahead.
.
trainOpts。UseParallel = true;trainOpts.ParallelizationOptions.Mode =“异步”;trainOpts.ParallelizationOptions.DataToSendFromWorkers =“梯度”;trainOpts.ParallelizationOptions.StepsUntilDataIsSent = 32;
有关更多信息,请参阅rlTrainingOptions
.
训练特工使用火车
函数。训练代理是一个计算密集的过程,需要几分钟才能完成。为了节省运行这个示例时的时间,可以通过设置加载一个预先训练过的代理用圆形
至错误的
.亲自训练探员,预备用圆形
至真正的
.由于异步并行培训中的随机性,您可以期待以下培训情节的不同培训结果。情节显示培训与六名工人的结果。
doTraining = false;如果用圆形%训练代理人。Trainstats =火车(代理,env,训练);别的%加载预磨料的代理。加载('matlabcartpoleplac.mat'那'代理人');结尾
在仿真期间,您可以使用绘图功能可视化Cart-杆系统。
情节(env)
要验证培训的代理的性能,请在推车杆环境中模拟它。有关代理模拟的更多信息,请参阅rlSimulationOptions
和SIM
.
simOptions = rlSimulationOptions (“MaxSteps”,500);体验= SIM(ENV,Agent,SimOptions);
TotalReward = Sum(经验.Rward)
totalReward = 500
[1] Mnih, Volodymyr, Adrià Puigdomènech Badia, Mehdi Mirza, Alex Graves, Timothy P. Lillicrap, Tim Harley, David Silver和Koray Kavukcuoglu。深度强化学习的异步方法。arxiv:1602.01783 [CS],2016年6月16日。https://arxiv.org/abs/1602.01783.