主要内容

用并行计算训练交流代理平衡车-杆系统

这个例子展示了如何通过异步并行训练训练一个AC (actor-批评家)代理来平衡MATLAB®中建模的车-杆系统。有关演示如何在不使用并行训练的情况下训练代理的示例,请参见训练交流装置平衡车杆系统

演员并行训练

当您对AC代理使用并行计算时,每个工作人员从其代理副本和环境中生成经验。在每一个N步骤,工作人员从经验中计算梯度,并将计算出的梯度发送回客户端代理(与开始训练的MATLAB®进程相关联的代理)。客户端代理按如下方式更新其参数。

  • 对于异步训练,客户端代理应用接收到的梯度,而不等待所有工作器发送梯度,并将更新的参数发送回提供梯度的工作器。然后,工作人员继续使用更新的参数从其环境中生成经验。

  • 对于同步训练,客户端代理等待从所有工作者接收梯度,并使用这些梯度更新其参数。然后客户机将更新后的参数同时发送给所有工作者。然后,所有的工作人员继续使用更新后的参数生成经验。

有关同步与异步并行的更多信息,请参见使用并行计算和图形处理器训练代理

创建Cart-Pole MATLAB环境接口

为车杆系统创建一个预定义的环境接口。有关此环境的更多信息,请参见负载预定义控制系统环境

env = rlPredefinedEnv (“CartPole-Discrete”);env。PenaltyForFalling = -10;

从环境接口获取观测和动作信息。

obsInfo = getObservationInfo (env);numObservations = obsInfo.Dimension (1);actInfo = getActionInfo (env);

固定随机生成器种子的再现性。

rng (0)

创建交流代理

AC代理在给定的观察和行动下,使用临界价值函数表示来近似长期奖励。要创建批评家,首先创建一个具有一个输入(观察值)和一个输出(状态值)的深度神经网络。由于环境提供了4个观测值,因此批评家网络的输入大小为4。有关创建深度神经网络值函数表示的更多信息,请参见创建政策和价值功能

criticNetwork = [featureInputLayer(4,“归一化”“没有”“名字”“状态”) fullyConnectedLayer (32,“名字”“CriticStateFC1”) reluLayer (“名字”“CriticRelu1”) fullyConnectedLayer (1,“名字”“CriticFC”));criticOpts = rlOptimizerOptions (“LearnRate”1飞行,“GradientThreshold”1);评论家= rlValueFunction (criticNetwork obsInfo);

AC代理根据观察结果,使用参与者表示来决定采取哪种行动。为了创建参与者,创建一个具有一个输入(观察)和一个输出(动作)的深度神经网络。行动者网络的输出大小为2,因为代理可以向环境施加两个力值-10和10。

actorNetwork = [featureInputLayer(4,“归一化”“没有”“名字”“状态”) fullyConnectedLayer (32,“名字”“ActorStateFC1”) reluLayer (“名字”“ActorRelu1”) fullyConnectedLayer (2“名字”“行动”));actorOpts = rlOptimizerOptions (“LearnRate”1飞行,“GradientThreshold”1);演员= rlDiscreteCategoricalActor (actorNetwork obsInfo actInfo);

要创建AC代理,首先指定AC代理选项usingrlACAgentOptions

agentOpts = rlACAgentOptions (...“ActorOptimizerOptions”actorOpts,...“CriticOptimizerOptions”criticOpts,...“EntropyLossWeight”, 0.01);

然后使用指定的参与者表示和代理选项创建代理。有关更多信息,请参见rlACAgent

代理= rlACAgent(演员、评论家、agentOpts);

并行训练选项

要培训代理,首先要指定培训选项。对于本例,使用以下选项。

  • 每次训练最多跑一次1000每集最多持续一集500时间的步骤。

  • 在“集训管理器”对话框中显示训练进度情节选项)并禁用命令行显示(设置详细的选项)。

  • 当代理收到的平均累积奖励大于时停止训练50010连续集。此时,代理可以将钟摆保持在直立位置。

trainOpts = rlTrainingOptions (...“MaxEpisodes”, 1000,...“MaxStepsPerEpisode”, 500,...“详细”假的,...“阴谋”“训练进步”...“StopTrainingCriteria”“AverageReward”...“StopTrainingValue”, 500,...“ScoreAveragingWindowLength”10);

您可以在训练或模拟过程中可视化车杆系统可以使用情节函数。

情节(env)

{

要使用并行计算训练代理,请指定以下训练选项。

  • 设置UseParallel选项真正的

  • 通过设置并行异步地训练代理ParallelizationOptions。模式选项“异步”

trainOpts。UseParallel = true;trainOpts.ParallelizationOptions.Mode =“异步”

有关更多信息,请参见rlTrainingOptions

火车代理

训练代理使用火车函数。训练代理是一个计算密集的过程,需要几分钟才能完成。要在运行此示例时节省时间,请通过设置加载预先训练过的代理doTraining.亲自训练探员,设doTraining真正的.由于异步并行训练的随机性,您可以从下面的训练图中预期不同的训练结果。图中显示了6名工人的培训结果。

doTraining = false;如果doTraining培训代理。trainingStats =火车(代理,env, trainOpts);其他的为示例加载预先训练过的代理。负载(“MATLABCartpoleParAC.mat”“代理”);结束

模拟交流代理

在模拟过程中,可以使用plot函数可视化车杆系统。

情节(env)

为了验证训练过的代理的性能,在车杆环境中模拟它。有关代理模拟的更多信息,请参见rlSimulationOptions而且sim卡

simOptions = rlSimulationOptions (“MaxSteps”, 500);经验= sim (env,代理,simOptions);

{

totalReward =总和(experience.Reward)
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

另请参阅

|

相关的例子

更多关于

Baidu
map