主要内容

火车

在指定环境中列车加固学习代理

描述

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

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

例子

env=火车(___trainOpts火车代理env,使用training options对象trainOpts.使用培训选项指定培训参数,例如终止培训的标准,何时保存代理,培训的最大剧集数以及每集的最大步数。在上一个语法中的任何输入参数后使用此语法。

例子

全部折叠

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

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

加载RLTrainExample.mat

使用一些培训参数使用rlTrainingOptions.这些参数包括训练的最大剧集数,每集的最大步骤以及终止训练的条件。在此示例中,每集使用最多1000个剧集和500个步骤。当前五个剧集的平均奖励达到500时,指示培训停止。创建默认选项集并使用点表示法来更改一些参数值。

trainOpts = rlTrainingOptions;trainOpts。MaxEpisodes = 1000;trainOpts。MaxStepsPerEpisode = 500;trainOpts。StopTrainingCriteria =“AverageReward”;训练.StoptrainingValue = 500;训练.ScoreaveragingWindowLength = 5;

在培训期间,火车命令可以保存给予良好结果的候选代理商。进一步配置培训选项以在剧集奖励超过500时保存代理。将代理保存到名为的文件夹savedAgents

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

最后,关闭命令行显示。打开钢筋学习剧集经理,以便您可以在视觉上观察培训进度。

trainOpts。V.erbose = false; trainOpts.Plots =“训练进步”

您现在准备训练PG代理商。对于在此示例中使用的预定义推车环境,您可以使用阴谋生成卡车杆系统的可视化。

情节(env)

运行此示例时,此可视化和加强学习Episode Manager使用每个培训集发作更新。将它们并排放在屏幕上以观察进度,并培训代理人。(此计算可能需要20分钟或更长时间。)

traininginfo =火车(代理,env,训练);

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

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

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

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

该示例中的环境是含有由圆形表示的元件的无摩擦二维表面。目标对象C由带半径为2μm的蓝色圆,而机器人A(红色)和B(绿色)由较小的圆圈表示,每个圆形为1m。机器人试图通过碰撞施加力来将物体C在半径8m的圆环外移动。环境中的所有元素都有大规模的,牛顿的议案法则。另外,元件和环境边界之间的接触力被建模为弹簧和质量阻尼系统。元件可以通过在X和Y方向上的外部施加的外部施加的外部施加来移动表面。第三尺寸没有动作,并且系统的总能量是节省的。

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

rlcollaborativetaskparams.

打开Simulin金宝appk模型。

mdl =“rlcollaborativetask”;open_system (mdl)

对于这个环境:

  • 在x和y方向上,二维空间在-12μm到12μm中界定。

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

  • 代理商在最后一次步骤中共享相同的位置,A,B和C的位置,速度以及动作值。

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

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

R. 一种 = R. 全球 + R. 当地的 一种 R. B. = R. 全球 + R. 当地的 B. R. 全球 = 0. 001 D. C R. 当地的 一种 = - 0. 005 D. AC. - 0. 008 一种 2 R. 当地的 B. = - 0. 005 D. 公元前 - 0. 008 B. 2

在这里:

  • R. 一种 R. B. 代理A和B分别收到的奖励。

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

  • R. 当地的 一种 R. 当地的 B. 代理A和B基于从对象C的距离和最后一次步骤的行动的幅度来接受当地惩罚。

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

  • D. AC. D. 公元前 是代理A和对象C和代理B和对象C之间的距离。

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

本示例使用具有离散操作空间的近端策略优化(PPO)代理。要了解有关PPO代理的更多信息,请参见近端政策优化代理.这些代理在机器人上施加外力使其运动。在每个时间步骤中,代理选择操作 一种 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);

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

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

创建代理

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

建立批评神经网络和表示。评价网络的输出是状态值函数 V. S. 国家 S.

%重置随机种子以提高重现性rng (0)%评论家网络criticNetwork = [...featureInputLayer (oinfo.Dimension (1),'正常化'“没有”'姓名''观察') fullyConnectedLayer (128,'姓名'“CriticFC1”“WeightsInitializer”“他”)剥离('姓名'“CriticRelu1”) fullyConnectedLayer (64,'姓名'“CriticFC2”“WeightsInitializer”“他”)剥离('姓名''transrelu2')全连接列(32,'姓名'“CriticFC3”“WeightsInitializer”“他”)剥离('姓名''rictrelu3')全康连接层(1,'姓名'“CriticOutput”));%评论家表示criticOpts = rlRepresentationOptions ('学习'1的军医);criticA = rlValueRepresentation (criticNetwork oinfo,“观察”,{'观察'}, criticOpts);criticB = rlValueRepresentation (criticNetwork oinfo,“观察”,{'观察'}, criticOpts);

参与者网络的输出是概率 π 一种 | 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 = RlR​​epresentationOptions('学习'1的军医);Actora = rlstochasticRoreEntentation(Actornetwork,Oinfo,Ainfo,...“观察”,{'观察'}, actorOpts);actorB = rlStochasticActorRepresentation (actorNetwork oinfo ainfo,...“观察”,{'观察'}, actorOpts);

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

代理选项= rlppoagentoptions(...“ExperienceHorizon”, 256,...'ClipFactor',0.125,...“EntropyLossWeight”, 0.001,...'minibatchsize', 64,...“NumEpoch”3,...“AdvantageEstimateMethod”gae的...'Gafactor', 0.95,...'采样时间'Ts,...“DiscountFactor”,0.9995);Agenta = RLPPoAgent(Actora,Tresca,AgentOptions);AgentB = RLPPoAgent(Actorb,批评,AgentOptions);

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

训练代理人

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

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

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

maxepisodes = 1000;maxsteps = 5e3;训练= rltrainingOptions(...“MaxEpisodes”maxEpisodes,...“MaxStepsPerEpisode”maxSteps,...'scoreaveragingwindowlength',100,...'plots'“训练进步”...'stoptrinaincriteria''AverageReward'...“StopTrainingValue”, -10);

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

垫文件rlcollaborativetaskagents.包含一组预制代理。您可以加载文件并查看代理的性能。训练代理人,套装用圆形真正的

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

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

模拟代理人

模拟环境中的训练有素的代理。

simOptions = rlSimulationOptions (“MaxSteps”,maxsteps);exp = sim(env,[Agenta AgentB],SimOptions);

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

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

输入参数

全部折叠

培训代理商,指定为加强学习代理对象,例如rlACAgentrlDDPGAgent,或作为这些对象的阵列。

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

笔记

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

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

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

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

  • 使用诸如此类的功能创建自定义MATLAB环境rlFunctionEnvrlCreateEnvTemplate.这种环境不支持同时训练多个代理。金宝app

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

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

env是一个Si金宝appmulink环境,致电火车编译并模拟与环境相关联的模型。

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

  • 培训结束标准

  • 保存候选代理的标准

  • 如何显示培训进度

  • 并行计算选项

有关详细信息,请参阅rlTrainingOptions

输出参数

全部折叠

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

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

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

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

在指定的平均窗口上的平均奖励trainOpts,作为长度的列向量返回N.每个条目都包含在相应剧集末尾计算的平均奖励。

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

使用当前代理和环境初始条件对长期回报的评估,返回为长度列向量N.每个条目都是批评者估计(问:0.)对于相应的集的代理。该字段仅适用于具有批评者的代理,例如rlDDPGAgentrlDQNAgent

在为培训进行模拟期间收集的信息返回为:

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

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

提示

  • 火车在培训进展时更新代理商。要保留原始代理参数以供稍后使用,请将代理保存到MAT文件。

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

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

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

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

算法

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

  1. 初始化代理

  2. 对于每一次集:

    1. 重置环境。

    2. 得到最初的观察结果S.0.从环境中。

    3. 计算初始动作一种0.=μS.0.).

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

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

      1. 用行动来改善环境一种以获得下一个观察S.“至于报酬呢?R.

      2. 从经验中学习(S.一种R.S.”)。

      3. 计算下一个操作一种' =μS.”)。

      4. 使用下一个操作更新当前操作(一种一种')并通过下一个观察更新当前观察(S.S.”)。

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

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

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

扩展能力

在R2019A介绍