主要内容

火车

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

描述

训练司=火车(env.代理人使用默认培训选项在指定环境中培训一个或多个强化学习代理。尽管代理人是一个输入参数,在每次训练后,火车更新中指定的每个代理的参数代理人最大化他们预期的环境长期奖励。训练终止时,代理人反映了最后一集训练中每个agent的状态。

训练司=火车(代理人env.执行与前面语法相同的训练。

例子

env.=火车(___列车火车代理人之内env.,使用training options对象列车。使用“训练选项”指定训练参数,例如终止训练的标准、何时保存代理、要训练的最大集数以及每集的最大步数。在前面语法中的任何输入参数后使用此语法。

例子

全部收缩

培训在中配置的代理培训PG代理以平衡车柱系统示例,在相应的环境中。从环境中观察是载体包含推车的位置和速度,以及杆的角位置和速度。该动作是具有两个可能元素的标量(应用于推车的-10或10个牛顿的力)。

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

负载rltrainexample.mat.

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

trainOpts = rlTrainingOptions;trainOpts。MaxEpisodes = 1000;trainOpts。MaxStepsPerEpisode = 500;trainOpts。StopTrainingCriteria =“平均”;trainOpts.StopTrainingValue=500;trainOpts.score平均增长窗长=5;

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

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

最后,关闭命令行显示。打开强化学习事件管理器,以便直观地观察培训进度。

训练。verbose = false;训练.Plots =.“训练进步”

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

情节(env)

运行此示例时,此可视化和强化学习事件管理器都会随着每个培训事件而更新。将它们并排放在屏幕上以观察进度,并培训代理。(此计算可能需要20分钟或更长时间。)

培训信息=列车(代理人、环境、列车员);

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

simOptions=rlSimulationOptions(“MaxSteps”,500);体验= SIM(ENV,Agent,SimOptions);

在训练中,火车保存磁盘符合指定条件的代理列车运营公司trainOpts.SaveAgentValue.要测试这些代理的性能,可以从指定的文件夹中的数据文件加载数据trainOpts。SaveAgentDirectory,并使用该代理模拟环境。

本示例演示如何在Simulink®环境中设置多代理培训会话。在本示例中,您培训两个代理协同执行移动对象的任务。金宝app

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

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

rlCollaborativeTaskParams

打开Simulin金宝appk模型。

mdl=“rlCollaborativeTask”;Open_System(MDL)

对于这种环境:

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

  • 接触弹簧刚度和阻尼值分别为100 N/m和0.1 N/m/s。

  • 对于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 是代理A和代理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金宝appSimulinkEnv

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

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

创建Simulink环金宝app境界面。

Blks = [“rlCollaborativeTask/代理A”“rlCollaborativeTask/Agent B”]; obsInfos={oinfo,oinfo};actInfos={ainfo,ainfo};环境=rlSimulinkE金宝appnv(mdl、blks、obsInfos、ACTIFOS);

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

env.ResetFcn=@(in)resetRobots(in、RA、RB、RC、boundaryR);

创建代理

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

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

%重置随机种子以提高再现性rng (0)%批评网络criticNetwork = [...featureInputLayer (oinfo.Dimension (1),“正常化”'没有任何'“名字”“观察”)全连接列(128,“名字”'批判福尔''掌控itializer''他') reluLayer (“名字”“CriticRelu1”)全连接层(64,“名字”'批判性]'掌控itializer''他') reluLayer (“名字”“CriticRelu2”) fullyConnectedLayer (32,“名字”'批判液3''掌控itializer''他') reluLayer (“名字”“CriticRelu3”)完全连接层(1,“名字”“CriticOutput”)];%评论家表示批评= rlrepresentationOptions(“LearnRate”,1e-4);criticA=rlValueRepresentation(关键网络,oinfo,“观察”,{“观察”},批评);批评= rlvalueerepresentation(批评,oinfo,“观察”,{“观察”},批评);

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

%的演员网络actorNetwork=[...featureInputLayer (oinfo.Dimension (1),“正常化”'没有任何'“名字”“观察”)全连接列(128,“名字”“ActorFC1”'掌控itializer''他') reluLayer (“名字”'ACTORRELU1')全连接层(64,“名字”“ActorFC2”'掌控itializer''他') reluLayer (“名字”'ACTORRELU2') fullyConnectedLayer (32,“名字”“ActorFC3”'掌控itializer''他') reluLayer (“名字”'ACTORRELU3') fullyConnectedLayer(元素个数(ainfo.Elements),“名字”“行动”)softmaxlayer(“名字”“SM”)];%的演员表示actorOpts = rlRepresentationOptions (“LearnRate”1的军医);actorA = rlStochasticActorRepresentation (actorNetwork oinfo ainfo,...“观察”,{“观察”}, actorOpts);actorB = rlStochasticActorRepresentation (actorNetwork oinfo ainfo,...“观察”,{“观察”}, actorOpts);

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

agentOptions = rlPPOAgentOptions (...“体验地平线”,256,...“ClipFactor”,0.125,...'entropylossweight', 0.001,...“MiniBatchSize”,64,...“努梅波奇”3....“优势估计法”'gae'...“GAEFactor”,0.95,...“采样时间”Ts,...'贴花因子',0.9995); agentA=rlPPOAgent(actorA、criticA、agentOptions);agentB=rlPPOAgent(actorB、criticB、agentOptions);

在培训期间,代理商收集经验,直到达到256个步骤或摘要的体验视界,然后从迷你批次的64个经验中培训。此示例使用0.125的客观函数剪辑因子,以提高培训稳定性和0.9995的折扣因子,以鼓励长期奖励。

列车员

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

  • 运行大多数1000次剧集的培训,每个集发作持续最多5000个时间步长。

  • 当连续100集的平均奖励为–10或更多时,停止对代理的培训。

最大事件数=1000;最大步长=5e3;培训选项=RL培训选项(...“最大集”maxEpisodes,...“MaxStepsPerEpisode”,maxSteps,...“ScoreAveragingWindowLength”, 100,...“阴谋”“训练进步”...“StopTrainingCriteria”“平均向上”...'stoptriningvalue',-10);

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

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

doTraining = false;如果doTraining stats = trainOpts ([agentA, agentB],env,trainOpts); / /获取数据别的负载('rlCollaborativeTaskAgent.mat');结尾

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

模拟代理

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

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

图多代理协作任务包含一个Axis对象。Axis对象包含5个矩形、文本类型的对象。

有关代理模拟的详细信息,请参见模拟选项SIM

输入参数

全部收缩

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

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

请注意

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

有关如何为强化学习创建和配置代理的更多信息,请参阅加固学习代理人

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

  • 预定义的MATLAB或Simulink金宝app®环境创建的环境rlPredefinedEnv. 这种环境不支持同时培训多个代理。金宝app

  • 使用以下函数创建的自定义MATLAB环境:rlFunctionEnvrlCreateEnvTemplate. 这种环境不支持同时培训多个代理。金宝app

  • 您创建的自定义Si金宝appmulink环境rl金宝appSimulinkEnv. 这种环境支持同时训练多个代理。金宝app

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

什么时候env.是一个Si金宝appmulink环境,调用火车编译并模拟与环境关联的模型。

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

  • 培训结束标准

  • 拯救候选人的标准

  • 如何显示培训进度

  • 并行计算的选项

有关详细信息,请参见rltringOptions.

输出参数

全部收缩

培训剧集数据,当训练多个代理时训练单个代理或结构阵列时,返回为结构。每个结构元素都包含以下字段。

事件编号,作为列向量返回[1; 2; ......; n]哪里N是训练运行中的剧集数量。如果您想将其他数量从集发作到集中绘制的演变是有用的。

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

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

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

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

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

在为培训而执行的模拟过程中收集的信息,返回为:

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

  • 对于Simulink环境中的培训金宝app,以下向量金宝app仿真软件。SimulationOutput包含相应事件期间记录的模拟数据的对象。事件的记录数据包括模型配置为记录的任何信号和状态、模拟元数据以及相应事件期间发生的任何错误。

提示

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

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

  • 如果您使用有可视化的预定义环境,则可以使用情节(env)可视化环境。如果你打电话情节(env)在培训之前,可视化将在培训期间更新,以使您能够可视化每一集的进度。(对于自定义环境,您必须实现自己的情节方法。)

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

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

算法

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

  1. 初始化代理

  2. 每集:

    1. 重置环境。

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

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

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

    5. 当该集尚未结束或终止时:

      1. 用行动来改善环境一个获取下一个观察结果年代'和奖励r

      2. 从体验集中学习(年代一个r年代').

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

      4. 用下一个操作更新当前操作(一个一个“),并用下一个观察更新当前观察(年代年代').

      5. 如果满足环境中定义的剧集终端条件,则打破。

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

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

扩展能力

介绍了R2019a