主要内容

火车

在特定环境中培训强化学习代理

描述

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

trainStats=火车(代理,env)执行与前面语法相同的训练。

实例

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

例子

全部折叠

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

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

负载RLTrainExample.mat

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

训练= rltringOptions;训练.maxepisodes = 1000;训练.maxstepperepisode = 500;训练.StoptrainingCriteria =“AverageReward”;trainOpts。StopTrainingValue = 500;trainOpts。ScoreAveragingWindowLength = 5;

在培训期间,火车命令可以保存获得良好结果的候选代理。进一步配置培训选项,以便在情节奖励超过500时保存代理。将代理保存到名为savedAgents

trainOpts。SaveAgentCriteria =“EpisodeReward”;训练.SaveagentValue = 500;训练.SaveAgentDirectory =“Savedagents”

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

trainOpts。verbose = false; trainOpts.Plots =“培训 - 进展”

现在您已经准备好培训PG代理了情节生成车杆系统的可视化。

情节(env)

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

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

Episode Manager表明,培训成功达到了在前五个集中的500次奖励的终止条件。在每个训练集,火车更新代理人根据上一集学到的参数。当训练结束时,您可以用训练过的代理模拟环境,以评估其性能。环境图在模拟过程中更新,就像在训练中一样。

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

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

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

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

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

rlCollaborativeTaskParams

打开Simulin金宝appk模型。

mdl =“rlCollaborativeTask”;open_system (mdl)

对于这个环境:

  • 二维空间在X和Y方向上的边界为–12 m到12 m。

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

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

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

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

R A. = R 全球的 + R 当地的 , A. R B = R 全球的 + R 当地的 , B R 全球的 = 0 001 D C R 当地的 , A. = - 0 005 D 自动控制 - 0 008 U A. 2. R 当地的 , B = - 0 005 D 卑诗省 - 0 008 U B 2.

这里:

  • R A. R B 分别为代理A和代理B所获得的奖励。

  • R 全球的 是两个代理接收的团队奖励,因为对象C移动更接近环的边界。

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

  • D C 物体c从环的中心的距离。

  • D 自动控制 D 卑诗省 分别是代理A和对象C以及代理B和对象C之间的距离。

  • U A. U B 是来自最后一次步骤的代理A和B的动作值。

本示例使用具有离散操作空间的近端策略优化(PPO)代理。要了解有关PPO代理的更多信息,请参见近端政策优化代理.代理商在导致运动的机器人上应用外力。每次步骤,代理都选择动作 U A. , 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金宝appSimulinkEnv

为环境创建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环金宝app境接口。

黑色= [“rlCollaborativeTask /代理”,“B rlCollaborativeTask /代理”];obsInfos = {oinfo, oinfo};actInfos = {ainfo, ainfo};env = rl金宝appSimulinkEnv (mdl,黑色,obsInfos actInfos);

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

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

创造代理人

PPO代理人依靠演员和批评者表示来学习最佳政策。在该示例中,代理能够为演员和评论家维持基于神经网络的函数近似器。

建立批评神经网络和表示。评价网络的输出是状态值函数 v ( s ) 国家 s

%重置随机种子以提高重现性RNG(0)%评论家网络批评= [......FeatureInputLayer(oinfo.dimension(1),“归一化”,“没有”,“姓名”,“观察”) fullyConnectedLayer (128,“姓名”,“CriticFC1”,“WeightsInitializer”,“他”)雷卢耶(“姓名”,“CriticRelu1”) fullyConnectedLayer (64,“姓名”,“CriticFC2”,“WeightsInitializer”,“他”)雷卢耶(“姓名”,“CriticRelu2”)完全连接层(32,“姓名”,“CriticFC3”,“WeightsInitializer”,“他”)雷卢耶(“姓名”,“CriticRelu3”) fullyConnectedLayer (1,“姓名”,'批评'));%批评意见criticOpts = rlRepresentationOptions (“LearnRate”1的军医);criticA = rlValueRepresentation (criticNetwork oinfo,'观察',{“观察”}, criticOpts);criticB = rlValueRepresentation (criticNetwork oinfo,'观察',{“观察”}, criticOpts);

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

%演员网络actorNetwork = [......FeatureInputLayer(oinfo.dimension(1),“归一化”,“没有”,“姓名”,“观察”) fullyConnectedLayer (128,“姓名”,'actorfc1',“WeightsInitializer”,“他”)雷卢耶(“姓名”,“ActorRelu1”) fullyConnectedLayer (64,“姓名”,'Actorfc2',“WeightsInitializer”,“他”)雷卢耶(“姓名”,“ActorRelu2”)完全连接层(32,“姓名”,'Actorfc3',“WeightsInitializer”,“他”)雷卢耶(“姓名”,“ActorRelu3”)完整连接层(numel(ainfo.Elements),“姓名”,“行动”) softmaxLayer (“姓名”,“SM”));%演员表示actorOpts=rlRepresentationOptions(“LearnRate”,1e-4);actorA=RL随机因素表示法(actorNetwork、oinfo、ainfo、,......'观察',{“观察”},actorOpts);Actorb = rlstochasticRoreEntation(Actornetwork,Oinfo,Ainfo,......'观察',{“观察”},actorOpts);

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

agentOptions=rlPPOAgentOptions(......“ExperienceHorizon”, 256,......“ClipFactor”, 0.125,......“EntropyLossWeight”,0.001,......“MiniBatchSize”, 64,......“NumEpoch”3,......“AdvantageEstimateMethod”,gae的,......“GAEFactor”, 0.95,......“SampleTime”,ts,......“DiscountFactor”, 0.9995);agentA = rlPPOAgent (actorA criticA agentOptions);agentB = rlPPOAgent (actorB criticB agentOptions);

在训练过程中,agent收集经验,直到达到256步的经验视界或事件结束,然后从64个经验的小批进行训练。本例使用目标函数剪辑因子0.125来提高训练稳定性,使用折扣因子0.9995来鼓励长期奖励。

培训代理商

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

  • 运行训练最多1000集,每集最多持续5000时间步。

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

maxEpisodes = 1000;maxSteps = 5 e3;trainOpts = rlTrainingOptions (......“MaxEpisodes”,maxepisodes,......“MaxStepsPerEpisode”maxSteps,......“ScoreAveragingWindowLength”,100,......“情节”,'培训 - 进步',......“停止培训标准”,“AverageReward”,......“StopTrainingValue”, -10);

要训练多个代理,请指定一个代理数组火车功能。数组中的代理顺序必须匹配环境创建期间指定的代理块路径的顺序。这样做可确保代理对象链接到环境中的适当I / O接口。培训这些代理人可能需要几个小时才能完成,具体取决于可用的计算能力。

垫子锉rlCollaborativeTaskAgents包含一组预训练的代理。您可以加载文件并查看代理的性能。要亲自训练特工,请设置溺爱真正的

dotraining = false;如果dotraining stats =火车([Agenta,Agentb],Env,训练);其他的加载(“rlCollaborativeTaskAgents.mat”);结束

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

模拟代理

在环境中模拟经过训练的代理。

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

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

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

输入参数

全部折叠

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

如果env是一个创建的多代理环境rl金宝appSimulinkEnv,将代理指定为数组。数组中代理的顺序必须与用于创建的代理顺序匹配env.MATLAB不支持多智能体仿真金宝app®环境。

笔记

火车更新代理在每次训练中。培训结束时,代理在最终培训集结束时反映每个代理人的状态。因此,由于持续勘探,最终试剂所获得的奖励不一定是培训过程中所达到的最高奖励。为了在培训期间保存代理,创建一个rlTrainingOptions指定的对象SaveAgentCriteriaSaveAgentValue.属性并将其传递给火车作为一个trainOpts论点。

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

代理法案的环境指定为以下各种钢筋学习环境对象:

  • 一个预定义的MATLAB或Simulink金宝app®所创造的环境中使用rlPredefinedEnv.这种环境不支持同时训练多个代理。金宝app

  • 一个自定义MATLAB环境,您创建的函数,如rlFunctionEnv或者rlCreateEnvTemplate.这种环境不支持同时训练多个代理。金宝app

  • 您使用创建的自定义金宝appSimulink环境rl金宝appSimulinkEnv.这种环境支持同时训练多个agent。金宝app

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

env是Simu金宝applink环境,调用火车编译并模拟与环境相关联的模型。

训练参数和选项,指定为rlTrainingOptions目的。使用此参数指定此类参数和选项,如下所示:

  • 结束培训的标准

  • 保存候选代理的标准

  • 如何显示培训进度

  • 并行计算的选择

有关详细信息,请参阅rlTrainingOptions

输出参数

全部折叠

训练集数据,当训练单个agent时返回一个结构,当训练多个agent时返回一个结构数组。每个结构元素包含以下字段。

作为列向量返回的剧集号[1, 2,…;N],在那里N是训练过程中的发作次数。如果你想绘制从一集到另一集的其他量的变化,这个向量是有用的。

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

每一次集中的步数,在长度的列向量中返回N. 每个条目包含相应事件中的步骤数。

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

培训中的代理步骤总数,作为长度的列向量返回N.每个条目包含了条目的累积和EpisodeSteps直到那个点。

使用当前代理和环境初始条件对长期回报的评估,返回为长度列向量N. 每个条目都是批评家的估计值(Q0)为相应插曲的代理。该领域仅适用于有批评者的代理,例如rlddpgagent.rlDQNAgent

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

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

  • 为了在Simulink环境中进行金宝app培训,向量为金宝appsimulink.simulationOutput.包含相应情节中记录的模拟数据的对象。一集的记录数据包括任何信号,并说明模型配置为日志、模拟元数据,以及在相应集期间发生的任何错误。

提示

  • 火车在培训过程中更新代理。要保留原始代理参数以供以后使用,请将代理保存到MAT文件中。

  • 默认情况下,调用火车打开钢筋学习剧集管理器,允许您可视化培训的进度。Episode Manager Plot显示每个剧集,运行平均奖励价值和批评估计的奖励Q0(针对有批评者的代理商)。章节管理器还显示各种章节和培训统计数据。要关闭强化学习集管理器,请设置情节选择trainOpts“没有”

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

  • 培训在下列条件下终止:trainOpts满意。要终止正在进行的培训,请在加强学习集团管理器中,单击停止训练.因为火车在每集更新代理,您可以通过拨打火车(代理,env, trainOpts)同样,在不丢失第一次调用时学到的训练参数的情况下火车

  • 在培训期间,您可以保存满足指定条件的候选代理trainOpts.例如,即使尚未满足终止培训的整体条件,您还可以保存剧集奖励超出某个值的任何代理。火车在指定的文件夹中的mat -文件中存储已保存的代理trainOpts。保存的代理可能很有用,例如,允许您测试在长时间运行的培训过程中生成的候选代理。有关保存条件和保存位置的详细信息,请参阅rlTrainingOptions

算法

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

  1. 初始化代理人

  2. 每集:

    1. 重置环境。

    2. 获得初始观察s0从环境中。

    3. 计算初始动作A.0=μ(s0).

    4. 将当前操作设置为初始操作(A.A.0)并将当前观察设置为初始观察(ss0).

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

      1. 使用动作步骤环境A.以获得下一个观察s“至于报酬呢?R

      2. 从经验中学习(s,A.,R,s”)。

      3. 计算下一个动作A.'=μ(s”)。

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

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

  3. 如果培训终止条件由trainOpts满足条件,终止培训。否则,就开始下一集。

具体如何火车执行这些计算取决于您的代理和环境的配置。例如,如果配置环境,则重置每个剧集开始时的环境可以包括随机化初始状态值。

扩展功能

在R2019a中引入