主要内容

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

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

演员并行训练

当您对AC代理使用并行计算时,每个工作人员都会从代理和环境的副本中生成经验。在每一个N步骤中,工作人员根据经验计算梯度,并将计算出的梯度发送回客户端代理(与开始训练的MATLAB®过程相关的代理)。客户端计算梯度平均值,更新网络参数,并将更新后的参数发送给工人,以便他们可以继续使用新参数模拟代理。

这种类型的并行训练也被称为基于梯度的并行化,并且允许您在原则上实现与工作人员数量几乎成线性关系的速度改进。然而,这个选项需要同步训练(即模式的属性rlTrainingOptions必须将传递给train函数的对象设置为同步).这意味着工人必须暂停执行,直到所有工人都完成,因此训练只能以最慢的工人允许的速度推进。

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

创建车杆MATLAB环境接口

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

环境= rlPredefinedEnv(“CartPole-Discrete”);env。罚分= -10;

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

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

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

rng (0)

创建AC座席

行动者-评论家代理使用参数化价值函数逼近器来估计策略的价值。价值-函数评论家将当前观察结果作为输入,并返回单个标量作为输出(遵循当前观察结果对应的状态的策略的估计贴现累积长期奖励)。

为了在评论家中建模参数化值函数,使用带有一个输入层的神经网络(该输入层接收由obs指定的观察通道的内容)信息)和一个输出层(返回标量值)。请注意,刺激(obsInfo.Dimension)返回观察空间的总维数,而不管观察空间是列向量、行向量还是矩阵。

将网络定义为层对象的数组。

criticNetwork = [featureInputLayer(prod(obsInfo.Dimension)) fullyConnectedLayer(32) reluLayer fullyConnectedLayer(1)];

使用创建值函数逼近器对象criticNetwork以及环境动作和观察规范。

批评家= rlValueFunction(criticNetwork,obsInfo);

actor -critic agent采用参数化随机策略,对于离散动作空间,该策略由离散分类actor实现。该参与者将观察结果作为输入,并将从分类概率分布中采样的随机操作(在有限个可能操作中)作为输出返回。

为了在参与者中建模参数化策略,使用带有一个输入层的神经网络(该输入层接收环境观察通道的内容,如所指定的obsInfo)和一个输出层。输出层必须返回每个可能操作的概率向量,由actInfo.请注意,元素个数(actInfo.Dimension)返回离散操作空间的元素数。

将网络定义为层对象的数组。

actorNetwork = [featureInputLayer(prod(obsInfo.Dimension)) fullyConnectedLayer(32) reluLayer fullyConnectedLayer(nummel (actInfo.Dimension))];

使用创建参与者近似器对象actorNetwork以及环境动作和观察规范。

actor = rlDiscreteCategoricalActor(actorNetwork,obsInfo,actInfo);

有关创建近似器对象(如actor和批评家)的详细信息,请参见创建策略和值函数

指定评论家和演员使用的选项rlOptimizerOptions

criticOpts = rlOptimizerOptions(LearnRate=1e-2,GradientThreshold=1);actorOpts = rlOptimizerOptions(LearnRate=1e-2,GradientThreshold=1);

使用指定AC代理选项rlACAgentOptions,包括演员和评论家的培训选择。

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

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

agent = rlACAgent(actor,批评家,agentOpts);

并行培训方案

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

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

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

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

trainOpts = rlTrainingOptions(...MaxEpisodes = 1000,...MaxStepsPerEpisode = 500,...Verbose = false,...情节=“训练进步”...StopTrainingCriteria =“AverageReward”...StopTrainingValue = 500,...ScoreAveragingWindowLength = 10);

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

情节(env)

图推车杆可视化工具包含一个轴对象。axis对象包含6个类型为line, polygon的对象。

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

  • 设置UseParallel选项真正的

  • 属性来并行异步地训练代理ParallelizationOptions。模式选项“异步”

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

有关更多信息,请参见rlTrainingOptions

火车代理

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

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

模拟AC Agent

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

情节(env)

为了验证训练过的智能体的性能,在车杆环境中进行了仿真。有关代理模拟的详细信息,请参见rlSimulationOptions而且sim卡

simOptions = rlSimulationOptions(MaxSteps=500);experience = sim(env,agent,simOptions);

图推车杆可视化工具包含一个轴对象。axis对象包含6个类型为line, polygon的对象。

totalReward =总和(经验。奖励)
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