此示例显示如何培训演员 - 评论家(AC)代理以使用异步并行培训使用异步并行培训平衡Matlab®中建模的购物车系统。有关在不使用并行培训的情况下培训代理的示例,请参阅火车交流代理以平衡车杆系统.
当您使用AC代理的并行计算时,每个工作人员都会从其代理和环境的副本中生成经验。在每一个N
步骤,工作人员根据经验计算梯度,并将计算出的梯度发送回客户端代理(与MATLAB®进程相关的代理,该代理开始培训)。客户端代理更新其参数如下。
对于异步培训,客户端代理应用接收到的梯度,而不需要等待所有的worker发送梯度,并将更新后的参数发送回提供梯度的worker。然后,工作人员继续使用更新后的参数从其环境中生成经验。
对于同步训练,客户端代理等待从所有工作人员接收梯度并使用这些梯度更新其参数。然后,客户端同时将更新后的参数发送给所有工作人员。然后,所有工作人员使用更新后的参数继续生成体验。
有关同步与异步并行化的更多信息,请参见使用并行计算和GPU的火车代理.
为购物车系统创建预定义的环境界面。有关此环境的更多信息,请参阅加载预定义的控制系统环境.
env = rlPredefinedEnv (“卡尔博 - 离散”);env.penaltyforafaling = -10;
从环境界面获取观察和动作信息。
obsInfo = getObservationInfo (env);numObservations = obsInfo.Dimension (1);actInfo = getActionInfo (env);
修复随机发生器种子以进行再现性。
rng (0)
AC代理使用批判值函数表示来近似给定的观察和行动的长期回报。要创建批评家,首先创建一个深度神经网络,它有一个输入(观察)和一个输出(状态值)。由于环境提供了4个观测结果,所以评价网络的输入大小为4。有关创建深度神经网络值函数表示的更多信息,请参见创建策略和价值功能表示.
批评家= [featureInputLayer(4,'正常化',“没有”,“名字”,'状态') fullyConnectedLayer (32,“名字”,'批评者福科') reluLayer (“名字”,'transrelu1') fullyConnectedLayer (1,“名字”,“CriticFC”)];批评= rlrepresentationOptions(“LearnRate”1飞行,'gradientthreshold'1);评论家= rlValueRepresentation (criticNetwork obsInfo,“观察”,{'状态'},批评);
在给定的观察结果下,AC代理使用一个参与者表示来决定采取哪个动作。要创建参与者,需要创建一个具有一个输入(观察)和一个输出(动作)的深度神经网络。actor网络的输出大小为2,因为agent可以对环境施加两个力值-10和10。
ActorNetWork = [FeatureInputLayer(4,'正常化',“没有”,“名字”,'状态') fullyConnectedLayer (32,“名字”,“ActorStateFC1”) reluLayer (“名字”,'ACTORRELU1') fullyConnectedLayer (2“名字”,“行动”)];ACTOROPTS = RLREPRESENTATIONOPTIONS(“LearnRate”1飞行,'gradientthreshold'1);Actor = rlstochasticRepresentation(Actornetwork,Obsinfo,Actinfo,...“观察”,{'状态'}, actorOpts);
要创建AC代理,首先使用rlacagentoptions.
.
agentOpts = rlACAgentOptions (...'numstepstolookahead'32岁的...“EntropyLossWeight”,0.01,...'贴花因子', 0.99);
然后使用指定的Actor表示和代理选项创建代理。有关更多信息,请参阅rlACAgent
.
代理= rlACAgent(演员、评论家、agentOpts);
要培训代理,首先指定培训选项。对于此示例,请使用以下选项。
最多运行每个培训1000
每集最多持续一集500
时间的步骤。
在“插曲管理器”对话框中显示培训进度(设置情节
选项)并禁用命令行显示(设置verb
选项)。
当代理收到平均累积奖励时停止培训大于500
在10
连续发作。此时,代理可以在直立位置平衡摆锤。
trainOpts = rlTrainingOptions (...'maxepisodes', 1000,...'maxstepperepisode'500,...'verbose',错误的,...“阴谋”,“训练进步”,...“StopTrainingCriteria”,'平均',...'stoptriningvalue', 500,...“ScoreAveragingWindowLength”10);
您可以在训练或模拟期间可视化推车杆系统可以使用情节
函数。
情节(env)
要使用并行计算训练代理,请指定以下训练选项。
设置使用指α.
选项真的
.
通过设置异步并行训练代理并行化选项.Mode.
选项“异步”
.
在每32步之后,每个工作人员根据经验计算梯度并将其发送给客户端。
AC代理要求工人发送“梯度”
到客户。
AC代理需要'stpeptuntildataissent'
等于agentOptions。NumStepsToLookAhead
.
训练.Useplate = true;训练.ParlellelizationOptions.Mode =.“异步”;训练.ParallelizationOptions.datatosendfromworkers =“梯度”;训练.ParlellelizationOptions.StepsuntIndataistent = 32;
有关更多信息,请参阅rltringOptions.
.
使用培训代理商使用火车
函数。培训代理是一个计算密集型进程,需要几分钟才能完成。要在运行此示例的同时节省时间,请通过设置加载预制代理doTraining
来假
.训练代理人,套装doTraining
来真的
.由于异步并行培训中的随机性,您可以期待以下培训图中的不同培训结果。情节显示六名工人培训的结果。
dotraining = false;如果doTraining培训代理商。TrainingStats =火车(代理商,ENV,训练);别的%加载预磨料的代理。负载(“MATLABCartpoleParAC.mat”,“代理”);结束
在仿真期间,您可以通过绘图功能可视化Cart-杆系统。
情节(env)
为了验证训练过的代理的性能,在车杆环境中模拟它。有关代理模拟的更多信息,请参见RlsimulationOptions.
和sim卡
.
simoptions = rlsimulationOptions('maxsteps', 500);经验= sim (env,代理,simOptions);
totalReward =总和(experience.Reward)
TotalReward = 500.
[1] Mnih,Volodymyr,AdriàPuigdomènechBadia,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.