主要内容

火车

在指定的环境中训练强化学习代理

描述

列车统计=列车(环境代理人使用默认训练选项在指定的环境中训练一个或多个强化学习代理。虽然代理人是一个输入参数,在每次训练结束后,火车更新中指定的每个代理的参数代理人最大化他们从环境中获得的预期长期回报。当培训终止时,代理人反映了最后一集训练中每个agent的状态。

列车统计=列车(代理人环境执行与前面语法相同的训练。

例子

环境=列车(___trainOpts火车代理人在内部环境,使用training options对象trainOpts.使用训练选项来指定训练参数,如终止训练的条件、何时保存代理、要训练的最大集数以及每个集的最大步数。在前面语法中的任何输入参数之后使用此语法。

例子

全部崩溃

中配置的代理训练PG代理平衡车杆系统例如,在相应的环境中。从环境中观察到的是一个向量,包含了手推车的位置和速度,以及极点的角位置和速度。这个动作是一个标量,有两个可能的元素(一个-10或10牛顿的力作用在一辆手推车上)。

加载包含环境和已经为其配置的PG代理的文件。

负载RLTrainExample.mat

使用。指定一些训练参数RL培训选项.这些参数包括要训练的最大集数、每集的最大步长和终止训练的条件。对于本例,最多使用1000集,每集使用500步。当前五集的平均奖励达到500时,指示训练停止。创建一个默认选项集,并使用点符号来更改一些参数值。

trainOpts = rlTrainingOptions;trainOpts。MaxEpisodes = 1000;trainOpts。MaxStepsPerEpisode = 500;trainOpts。StopTrainingCriteria =“平均向上”;trainOpts。StopTrainingValue = 500;trainOpts。ScoreAveragingWindowLength = 5;

在培训期间火车命令可以保存提供良好结果的候选代理。进一步配置训练选项以在章节奖励超过500时拯救代理。将代理保存到一个名为savedAgents

trainOpts.SaveAgentCriteria=“EpisodeReward”;trainOpts。SaveAgentValue = 500;trainOpts。SaveAgentDirectory =“savedAgents”

最后,关闭命令行显示。打开Reinforcement Learning Episode Manager,这样您就可以直观地观察训练进度。

trainOpts.Verbose=false;trainOpts.Plots=“训练进步”

你现在可以训练PG特工了。对于本例中使用的预定义的车杆环境,您可以使用情节生成车杆系统的可视化。

情节(env)

当您运行此示例时,可视化和Reinforcement Learning Episode Manager都会随着每个培训章节而更新。将它们并排放在屏幕上观察进程,并训练代理。(此计算可能需要20分钟或更长时间。)

trainingInfo =火车(代理,env, trainOpts);

《Episode Manager》显示,训练成功达到了终止条件,即在前5集平均奖励500英镑。在每次训练中,火车更新代理根据上一集学到的参数。当训练结束时,您可以用训练过的代理模拟环境,以评估其性能。环境图在模拟过程中更新,就像在训练中一样。

simOptions = rlSimulationOptions (“MaxSteps”,500); 经验=模拟(环境、代理、模拟选项);

在训练中,,火车将满足指定条件的所有代理保存到磁盘trainOps。SaveAgentCriteratrainOpts。SaveAgentValue.要测试这些代理的性能,可以从指定的文件夹中的数据文件加载数据trainOpts。SaveAgentDirectory,并使用该代理模拟环境。

这个例子展示了如何在Simulink®环境中设置多智能体培训课程。万博1manbetx在本例中,训练两个代理协作执行移动对象的任务。

本例中的环境是一个无摩擦的二维表面,包含用圆表示的元素。目标物体C用半径为2米的蓝色圆圈表示,机器人A(红色)和B(绿色)用半径为1米的小圆圈表示。机器人试图通过碰撞施加力,将物体C移动到半径为8米的圆环外。环境中的所有元素都有质量,并遵循牛顿运动定律。此外,单元与环境边界之间的接触力被建模为弹簧和质量阻尼系统。这些元素可以通过在X和Y方向施加外力在表面上移动。在第三维中没有运动系统的总能量是守恒的。

创建此示例所需的参数集。

rlCollaborativeTaskParams

打开Simulin万博1manbetxk模型。

mdl =“rlCollaborativeTask”;开放式系统(mdl)

对于这个环境:

  • 二维空间在X和Y方向上都从-12米到12米有界。

  • 接触弹簧的刚度值为100n /m,阻尼值为0.1 N/m/s。

  • agent共享相同的位置、A、B、C的速度和上一次时间步长的动作值。

  • 当物体C移出圆环时,仿真终止。

  • 在每一个时间步骤中,代理获得以下奖励:

r 一个 r 全球 + r 地方的 一个 r B r 全球 + r 地方的 B r 全球 0 001 d c r 地方的 一个 - 0 005 d 交流 - 0 008 u 一个 2 r 地方的 B - 0 005 d 公元前 - 0 008 u B 2

在这里:

  • r 一个 r B 分别为代理A和代理B所获得的奖励。

  • r 全球 是当物体C向环的边界移动时,两个代理都收到的团队奖励。

  • r 地方的 一个 r 地方的 B 是agent A和agent B所收到的局部惩罚,基于它们与物体C的距离和距离最后一个时间步骤的动作大小。

  • d C 为物体C到环中心的距离。

  • d 交流 d 公元前 分别为agent A和对象C、agent B和对象C之间的距离。

  • u 一个 u B 为agent A和agent B在上一个时间步骤中的动作值。

本示例使用具有离散操作空间的近端策略优化(PPO)代理。要了解有关PPO代理的更多信息,请参见近端政策优化代理.这些代理在机器人上施加外力使其运动。在每个时间步骤中,代理选择操作 u 一个 B F X F Y ,在那里 F X F Y 是下列两对外加力之一。

F X - 1 0 N F Y - 1 0 N

F X - 1 0 N F Y 0

F X - 1 0 N F Y 1 0 N

F X 0 F Y - 1 0 N

F X 0 F Y 0

F X 0 F Y 1 0 N

F X 1 0 N F Y - 1 0 N

F X 1 0 N F Y 0

F X 1 0 N F Y 1 0 N

创建环境

要创建多代理环境,请使用字符串数组指定代理的块路径。另外,使用单元格数组指定观察和操作规范对象。单元格数组中的规范对象的顺序必须与块路径数组中指定的顺序匹配。当环境创建时MATLAB工作空间中有代理时,观察和动作规范数组是可选的。有关创建多代理环境的更多信息,请参见rl万博1manbetxSimulinkEnv

为环境创建I/O规格。在本例中,代理是同构的,具有相同的I/O规范。

%观测次数numObs = 16;%动作次数numAct = 2;%最大外力值(N)maxF = 1.0;%每个代理的I/O规范oinfo = rlNumericSpec ([numObs, 1]);info = rlFiniteSetSpec({[-maxF -maxF] [-maxF 0] [-maxF maxF] [0 0] [0 maxF] [maxF -maxF] [maxF 0] [maxF maxF]});oinfo。Name =“观察”;ainfo。Name =“力量”

创建Simulink环万博1manbetx境接口。

黑色=[“rlCollaborativeTask /代理”“B rlCollaborativeTask /代理”];obsInfos = {oinfo, oinfo};actInfos = {ainfo, ainfo};env = rl万博1manbetxSimulinkEnv (mdl,黑色,obsInfos actInfos);

指定环境的复位功能。重置功能resetRobots确保机器人在每集开始时从随机初始位置开始。

env。ResetFcn = @(in) resetRobots(in,RA,RB,RC,boundary);

创建代理

PPO代理依靠演员和评论家代表来学习最优策略。在这个例子中,代理为演员和评论家维护基于神经网络的函数近似器。

创建批评家神经网络并表示。批评家网络的输出是状态值函数 V 年代 国家 年代

%重置随机种子以提高再现性rng (0)%评论家网络criticNetwork = [...featureInputLayer (oinfo.Dimension (1),“归一化”“没有”“名字”“观察”)完全连接层(128,“名字”“临界CFC1”“增重剂”“他”) reluLayer (“名字”“CriticRelu1”)完全连接层(64,“名字”“临界CFC2”“增重剂”“他”) reluLayer (“名字”“CriticRelu2”) fullyConnectedLayer (32,“名字”“关键CFC3”“增重剂”“他”) reluLayer (“名字”“CriticRelu3”) fullyConnectedLayer (1,“名字”“CriticOutput”)];%评论家表示criticOpts=rlRepresentationOptions(“LearnRate”1的军医);criticA = rlValueRepresentation (criticNetwork oinfo,“观察”,{“观察”},criticOpts);criticB=rlValueRepresentation(criticNetwork,oinfo,“观察”,{“观察”},批判者);

参与者网络的输出是概率 π 一个 | 年代 在特定状态下采取每个可能的动作对 年代 .创建参与者神经网络和表示。

%的演员网络actorNetwork = [...featureInputLayer (oinfo.Dimension (1),“归一化”“没有”“名字”“观察”)完全连接层(128,“名字”“ActorFC1”“增重剂”“他”) reluLayer (“名字”“ActorRelu1”)完全连接层(64,“名字”“ActorFC2”“增重剂”“他”) reluLayer (“名字”“ActorRelu2”) fullyConnectedLayer (32,“名字”“ActorFC3”“增重剂”“他”) reluLayer (“名字”“ActorRelu3”) fullyConnectedLayer(元素个数(ainfo.Elements),“名字”“行动”)软MaxLayer(“名字”“SM”)];%的演员表示actorOpts = rlRepresentationOptions (“LearnRate”1的军医);actorA = rlStochasticActorRepresentation (actorNetwork oinfo ainfo,...“观察”,{“观察”}, actorOpts);actorB = rlStochasticActorRepresentation (actorNetwork oinfo ainfo,...“观察”,{“观察”}, actorOpts);

创建代理。两个代理使用相同的选项。

agentOptions = rlPPOAgentOptions (...“ExperienceHorizon”,256,...“ClipFactor”, 0.125,...“无熵重量”, 0.001,...“MiniBatchSize”,64,...“NumEpoch”3,...“AdvantageEstimateMethod”“盖伊”...“GAEFactor”,0.95,...“SampleTime”Ts,...“折扣演员”, 0.9995);agentA = rlPPOAgent (actorA criticA agentOptions);agentB = rlPPOAgent (actorB criticB agentOptions);

在培训过程中,代理收集经验,直到达到256步的经验范围或情节结束,然后从64个经验的小批量中进行培训。本例使用0.125的目标函数剪辑系数来提高训练稳定性,使用0.9995的贴现系数来鼓励长期奖励。

培训代理商

指定以下培训选项以培训代理。

  • 进行最多1000集的培训,每集最多持续5000个时间步。

  • 当一个代理的平均奖励超过100个连续事件是-10或更多时停止训练。

maxEpisodes = 1000;maxSteps = 5 e3;trainOpts = rlTrainingOptions (...“MaxEpisodes”maxEpisodes,...“MaxStepsPerEpisode”maxSteps,...“ScoreAveragingWindowLength”, 100,...“阴谋”“训练进步”...“StopTrainingCriteria”“AverageReward”...“停止训练值”,-10);

要训练多个代理,请指定一个代理数组火车函数。数组中的代理的顺序必须与环境创建期间指定的代理块路径的顺序匹配。这样做可以确保代理对象链接到环境中相应的I/O接口。根据可用的计算能力,培训这些代理可能需要几个小时才能完成。

垫文件rlCollaborativeTaskAgents里面有一组训练有素的特工。您可以加载该文件并查看代理的性能。亲自训练特工,集合doTraining真的

doTraining = false;如果doTraining stats = trainOpts ([agentA, agentB],env,trainOpts); / /获取数据其他的负载(“rlCollaborativeTaskAgents.mat”);结束

下图显示了培训进度的快照。由于培训过程的随机性,您可以预期不同的结果。

模拟代理

在环境中模拟训练有素的特工。

simOptions = rlSimulationOptions (“MaxSteps”, maxSteps);exp = sim(env,[agentA agentB],simOptions);

图多Agent协同任务包含一个坐标轴。轴包含5个类型为矩形、文本的对象。

有关代理模拟的更多信息,请参见rlSimulationOptions模拟

输入参数

全部崩溃

要训练的agent,指定为强化学习的agent对象,如rlACAgentrlDDPGAgent,或作为此类对象的数组。

如果环境多代理环境是用rl万博1manbetxSimulinkEnv,将代理指定为数组。数组中代理的顺序必须与用于创建的代理顺序匹配环境.MATLAB不支持多智能体仿真万博1manbetx®环境。

请注意

火车更新代理人在每个训练阶段。培训结束时,代理人反映了最后一集训练中每个agent的状态。因此,由于不断的探索,最终agent获得的奖励不一定是训练过程中获得的最高奖励。为了在培训期间保存代理,创建一个RL培训选项对象指定SaveAgentCriteriaSaveAgentValue属性并将其传递给火车作为一个trainOpts论点。

有关如何创建和配置用于强化学习的代理的详细信息,请参见强化学习代理

agent所处的环境,指定为下列强化学习环境对象之一:

  • 一个预定义的MATLAB或Simulink万博1manbetx®使用创建的环境rlPredefinedEnv.这种环境不支持同时训练多个代理。万博1manbetx

  • 一个自定义MATLAB环境,您创建的函数,如rlFunctionEnvrlCreateEnvTemplate.这种环境不支持同时训练多个代理。万博1manbetx

  • 使用创建的自定义S万博1manbetximulink环境rl万博1manbetxSimulinkEnv.这种环境支持同时训练多个agent。万博1manbetx

有关创建和配置环境的详细信息,请参阅:

环境是Simu万博1manbetxlink环境,调用火车编译并模拟与环境相关联的模型。

培训参数和选项,指定为RL培训选项对象。使用此参数指定如下参数和选项:

  • 培训结束标准

  • 保存候选代理的标准

  • 如何显示培训进度

  • 并行计算的选项

有关详细信息,请参见RL培训选项

输出参数

全部崩溃

培训事件数据,培训单个代理时作为结构返回,培训多个代理时作为结构数组返回。每个结构元素包含以下字段。

作为列向量返回的剧集号[1;2;…;N],在那里N是训练运行中的集数。如果要绘制其他数量在不同集之间的演变,此向量非常有用。

每一集的奖励,以长度的列向量返回N.每个条目都包含相应章节的奖励。

每个情节中的步骤数,以长度的列向量返回N.每个条目包含相应章节中的步骤数。

中指定的平均窗口的平均奖励trainOpts,返回为长度的列向量N.每个条目包含在相应章节结束时计算的平均奖励。

训练中的agent步骤总数,返回为长度列向量N.每个条目包含了条目的累积和EpisodeSteps到那时为止。

使用当前代理和环境初始条件对长期报酬进行评估,作为长度的列向量返回N.每一项都是评论家的估计(0)为相应情节的代理人。该字段仅对具有批评者的代理存在,例如rlDDPGAgentrlDQNAgent

训练模拟过程中收集的信息,返回为:

  • 用于在MATLAB环境中训练,一个包含域的结构SimulationError.这个字段是一个列向量,每集有一个条目。当StopOnError选择RL培训选项“关”,每个条目包含在相应的章节中发生的任何错误。

  • 为了在Simulink环境中进行万博1manbetx培训,向量为万博1manbetx仿真软件。SimulationOutput包含相应情节中记录的模拟数据的对象。一集的记录数据包括任何信号,并说明模型配置为日志、模拟元数据,以及在相应集期间发生的任何错误。

提示

  • 火车随着培训的进行,更新代理。为了保存原始的代理参数供以后使用,请将代理保存到一个mat文件中。

  • 默认情况下,调用火车打开Reinforcement Learning Episode Manager,它让您可视化培训的进度。《Episode Manager》情节显示了每一集的奖励、运行的平均奖励价值和评论家的估计0(适用于有批评者的代理)。情节管理器还显示各种情节和培训统计信息。要关闭强化学习情节管理器,请设置情节选择trainOpts“没有”

  • 如果使用具有可视化的预定义环境,则可以使用情节(env)可视化环境。如果你打电话情节(env)在训练前,然后在训练中可视化更新,让你可视化每一集的进展。(对于自定义环境,您必须实现自己的环境情节方法。)

  • 中规定的条件终止培训trainOpts感到满意。若要终止正在进行的培训,请在“强化学习集管理器”中单击停止训练.因为火车每集更新代理,您可以通过呼叫恢复培训列车(代理人、环境、列车员)同样,在不丢失第一次调用火车

  • 在培训期间,您可以保存满足指定条件的候选代理trainOpts.例如,您可以保存任何集奖励超过一定值的代理,即使还未满足终止训练的总体条件。火车将保存的代理存储在指定文件夹中的MAT文件中trainOpts.保存的代理可能很有用,例如,它允许您测试在长时间运行的培训过程中生成的候选代理。保存条件和保存位置请参见RL培训选项

算法

一般来说火车执行以下迭代步骤:

  1. 初始化代理

  2. 每集:

    1. 重置环境。

    2. 得到最初的观察结果年代0来自环境。

    3. 计算初始动作一个0μ年代0).

    4. 将当前操作设置为初始操作(一个一个0),并将当前观测值设置为初始观测值(年代年代0).

    5. 本集尚未结束或终止:

      1. 用行动来改善环境一个以获得下一个观察年代”“报酬呢r

      2. 从经验中学习(年代一个r年代”)。

      3. 计算下一个动作一个' =μ年代”)。

      4. 使用下一个操作更新当前操作(一个一个'),并将当前的观测值更新为下一个观测值(年代年代”)。

      5. 如果满足环境中定义的事件终止条件,则中断。

  3. 如果训练终止条件定义为trainOpts如果满足,终止训练。否则,开始下一集。

具体如何操作火车执行这些计算取决于代理和环境的配置。例如,在每一集的开始重置环境可以包括随机初始状态值,如果您配置您的环境这样做。

扩展功能

介绍了R2019a