这个例子展示了如何使用异步并行训练训练一个行动者-评论家(AC)代理平衡一个在MATLAB®中建模的车杆系统。有关如何在不使用并行训练的情况下训练代理的示例,请参见训练空调代理人平衡车杆系统.
当您将并行计算与AC代理一起使用时,每个工作人员都会从其代理副本和环境中生成经验N
步骤,工作人员根据经验计算梯度,并将计算出的梯度发送回客户端代理(与MATLAB®进程相关的代理,该代理开始培训)。客户端代理更新其参数如下。
对于异步培训,客户端代理应用接收到的渐变,而不等待所有工作人员发送渐变,并将更新的参数发送回提供渐变的工作人员。然后,工作人员继续使用更新的参数从其环境中生成体验。
对于同步培训,客户端代理等待从所有工作人员接收梯度,并使用这些梯度更新其参数。然后,客户端将更新的参数同时发送给所有工作人员。然后,所有工作人员继续使用更新的参数生成体验。
有关同步与异步并行化的更多信息,请参见使用并行计算和gpu的列车代理.
为车杆系统创建一个预定义的环境接口。有关此环境的更多信息,请参见加载预定义的控制系统环境.
env=rlPredefinedEnv(“CartPole-Discrete”);env。PenaltyForFalling = -10;
从环境界面获取观察和行动信息。
obsInfo=getObservationInfo(env);numObservations=obsInfo.Dimension(1);actInfo=getActionInfo(env);
修复随机生成器种子的再现性。
rng(0)
AC代理使用批判值函数表示来近似给定的观察和行动的长期回报。要创建批评家,首先创建一个深度神经网络,它有一个输入(观察)和一个输出(状态值)。由于环境提供了4个观测结果,所以评价网络的输入大小为4。有关创建深度神经网络值函数表示的更多信息,请参见创建策略和值函数表示.
关键网络=[featureInputLayer(4,“归一化”,“没有”,“姓名”,“状态”)完全连接层(32,“姓名”,“CriticStateFC1”)雷卢耶(“姓名”,“CriticRelu1”)完全连接层(1,“姓名”,“临界CFC”));criticOpts = rlRepresentationOptions (“LearnRate”,1e-2,“GradientThreshold”1);评论家= rlValueRepresentation (criticNetwork obsInfo,“观察”, {“状态”}, criticOpts);
AC代理根据给定的观察结果,使用参与者表示来决定采取何种行动。要创建参与者,请创建一个具有一个输入(观察)和一个输出(行动)的深度神经网络。参与者网络的输出大小为2,因为代理可以向环境应用2个力值–10和10。
[featureInputLayer(4,“归一化”,“没有”,“姓名”,“状态”)完全连接层(32,“姓名”,“ActorStateFC1”)雷卢耶(“姓名”,“ActorRelu1”)完全连接层(2,“姓名”,“行动”));actorOpts = rlRepresentationOptions (“LearnRate”,1e-2,“GradientThreshold”1);演员= rlStochasticActorRepresentation (actorNetwork obsInfo actInfo,...“观察”, {“状态”},actorOpts);
要创建AC代理,请首先使用指定AC代理选项rlACAgentOptions
.
agentOpts=rlACAgentOptions(...“NumStepsToLookAhead”,32,...“无熵重量”, 0.01,...“DiscountFactor”,0.99);
然后使用指定的参与者表示和代理选项创建代理。有关更多信息,请参见拉卡金特
.
代理=代理(演员、评论家、代理);
要培训代理,首先指定培训选项。对于本示例,请使用以下选项。
每次训练最多跑一次1000
每集,每集最多持续一次500
时间步长。
在“事件管理器”对话框中显示培训进度(设置情节
选项),并禁用命令行显示(设置详细的
选项)。
停止训练时,代理收到的平均累积奖励大于500
结束10
连续集。在这一点上,代理可以平衡摆在直立的位置。
培训选项=RL培训选项(...“MaxEpisodes”,1000,...“MaxStepsPerEpisode”, 500,...“详细”假的,...“情节”,“培训进度”,...“停止培训标准”,“AverageReward”,...“StopTrainingValue”,500,...“ScoreAveragingWindowLength”10);
您可以可视化的车杆系统可以在训练或模拟使用情节
函数。
情节(env)
要使用并行计算培训代理,请指定以下培训选项。
设定UseParallel
选项真正的
.
通过设置ParallelizationOptions。模式
选项“异步”
.
在每32个步骤之后,每个工作人员根据经验计算梯度并将其发送给客户机。
AC代理要求工人发送“梯度“
给客户端。
AC代理要求“StepsUntilDataIsSent”
等于agentOptions.NumStepsToLookAhead
.
trainOpts。UseParallel = true;trainOpts.ParallelizationOptions.Mode =“异步”;trainOpts.ParallelizationOptions.DataToSendFromWorkers =“梯度”;trainOpts.ParallelizationOptions.StepsUntilDataIsSent = 32;
有关更多信息,请参见rlTrainingOptions
.
训练代理人使用火车
函数。训练代理是一个计算密集型的过程,需要几分钟才能完成。为了节省运行此示例的时间,请通过设置加载预先训练过的代理溺爱
到错误的
.自己训练代理人,设置溺爱
到真正的
.由于异步并行训练的随机性,您可以从下面的训练图中期待不同的训练结果。这张图显示了训练六名工人的结果。
doTraining = false;如果溺爱%培训代理人。trainingStats =火车(代理,env, trainOpts);其他的%加载示例的预训练代理。装载(“MATLABCartpoleParAC.mat”,“代理人”);终止
在模拟过程中,您可以使用绘图功能可视化车杆系统。
情节(env)
要验证经过培训的代理的性能,请在cart-pole环境中对其进行模拟。有关代理模拟的更多信息,请参阅rlSimulationOptions
和模拟
.
simOptions = rlSimulationOptions (“MaxSteps”,500);经验=sim(环境、代理、sim选项);
totalReward=总和(经验奖励)
totalReward = 500
[1] Mnih, Volodymyr, Adrià Puigdomènech Badia, Mehdi Mirza, Alex Graves, Timothy P. lilliicrap, Tim Harley, David Silver, Koray Kavukcuoglu。“深度强化学习的异步方法”。ArXiv:1602.01783[Cs],2016年6月16日。https://arxiv.org/abs/1602.01783.