主要内容

火车

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

自从R2019a

描述

trainStats=火车(env,代理)列车内的一个或多个强化学习代理指定的环境中,使用默认训练选项。虽然代理是一个输入参数,在每一个训练集,火车更新参数中指定的每个代理代理最大化其预期的长期回报的环境。这是可能的因为每个代理是一个处理对象。培训结束时,代理反映了每个代理的状态结束时最后的训练集。

请注意

离线训练off-policy代理使用现有的数据,使用trainFromData

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

例子

trainStats=火车(___,trainOpts)火车代理env使用培训对象的选择trainOpts。使用培训选项来指定参数如终止的标准培训,保存代理时,集训练的最大数量,每集的最大数量的步骤。使用这个语法的任何输入参数后以前的语法。

trainStats=火车(代理,env,prevTrainStats)恢复训练的最后值代理中包含的参数和训练结果prevTrainStats在前面的函数调用火车

trainStats=火车(___记录器=lgr)训练数据使用日志FileLoggerMonitorLoggerlgr对象。

例子

全部折叠

火车代理的配置火车PG代理Cart-Pole平衡系统例如,在相应的环境中。环境的观察是一个向量包含一辆小车的位置和速度,以及角杆的位置和速度。与两种可能的行动是一个标量元素(-10年或10牛的力应用于车)。

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

负载RLTrainExample.mat

指定一些参数使用培训rlTrainingOptions。这些参数包括最大数量的训练集,每集最大的步骤和条件终止培训。对于这个示例,使用最多2000集,每集500步。指导培训停止当奖励前五集平均达到500。创建一个默认的选项设置和使用点符号改变一些参数值。

trainOpts = rlTrainingOptions;trainOpts。MaxEpisodes = 2000;trainOpts。MaxStepsPerEpisode = 500;trainOpts。StopTrainingCriteria =“AverageReward”;trainOpts。StopTrainingValue = 500;trainOpts。ScoreAveragingWindowLength = 5;

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

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

关闭命令行显示。打开强化学习集经理你可以直观地观察培训进展。

trainOpts。Verbose = false;trainOpts。情节=“训练进步”;

你现在准备训练PG的代理。预定义的cart-pole环境中使用这个示例中,您可以使用情节生成一个cart-pole系统的可视化。

情节(env)

当您运行这个示例中,该可视化和强化学习集经理更新每个训练集。把它们并排在屏幕上观察进展,和培训代理。(这个计算可以20分钟或更多)。

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

事件管理器显示培训成功达到终止条件的奖励500平均前五集。在每一个训练集,火车更新代理在上一次的参数。在培训结束时,您可以模拟训练的环境代理对其性能进行评估。环境图更新在模拟期间那样训练。

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

图车杆可视化工具包含一个坐标轴对象。坐标轴对象包含6行类型的对象,多边形。

在培训期间,火车保存到磁盘的任何代理满足指定的条件trainOps.SaveAgentCriteratrainOpts.SaveAgentValue。为了测试这些代理的性能,您可以加载数据从数据文件在您指定的文件夹在使用trainOpts.SaveAgentDirectory和模拟环境与代理。

这个例子展示了如何设置一个多智能训练仿真软件®环境。金宝app在这个例子中,您训练两个代理协作执行的任务移动一个对象。

环境在这个例子中是一个无摩擦的二维表面含有元素由圆圈表示。目标对象所代表的C是蓝色的圆的半径2米,和机器人(红色)和B(绿色)是由更小的圆的半径1米。机器人试图移动对象C外圆环的半径8 m运用力量的碰撞。所有的元素在环境质量和遵守牛顿运动定律。此外,元素之间的接触力和环境边界建模为春季和质量阻尼系统。表面的元素可以通过外部的应用程序应用部队在X和Y方向。没有在第三维度和运动系统的总能量是守恒的。

设置随机种子和这个例子所需创建的一组参数。

rng (10) rlCollaborativeTaskParams

打开仿真软件模型。金宝app

mdl =“rlCollaborativeTask”;open_system (mdl)

对于这个环境:

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

  • 接触弹簧刚度和阻尼值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 公元前 代理之间的距离和对象B和C和代理对象C,分别。

  • 代理申请外部力量导致运动的机器人。 u 一个 u B 行动的价值观是A和B两个代理从最后一次一步。动作值的范围是1 - 1。

环境

多智能体环境,创建一个指定代理的块路径使用字符串数组。同时,指定使用细胞观察和行动规范对象数组。单元阵列中的规范对象的顺序必须匹配块路径数组中指定的顺序。当代理可用MATLAB工作区环境创建的时候,观察和行动规范数组是可选的。关于多智能体环境创造的更多信息,请参阅rl金宝appSimulinkEnv

创造的I / O规范环境。在本例中,代理是均匀和I / O规格相同。

%的观察numObs = 16;%的行动numAct = 2;%最大价值的外部作用力(N)maxF = 1.0;为每个代理% I / O规范oinfo = rlNumericSpec ([numObs, 1]);ainfo = rlNumericSpec (numAct, 1,UpperLimit = maxF,LowerLimit = maxf);oinfo。Name =“观察”;ainfo。Name =“力量”;

创建界面的仿真软件环境金宝app。

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

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

env。ResetFcn = @(在)resetRobots (RA, RB、RC boundaryR);

代理

这个示例使用两个近端政策优化(PPO)代理与持续的行动空间。代理申请外部力量导致运动的机器人。更多地了解PPO代理,看看近端政策优化(PPO)代理

代理收集经验到经验地平线(600步)。轨迹完成后,代理从mini-batches 300经验。一个目标函数剪辑因素0.2是用来改善培训稳定和折现系数0.99是用来鼓励长期回报。

对于这个示例指定代理选项。

agentOptions = rlPPOAgentOptions (ExperienceHorizon = 600,ClipFactor = 0.2,EntropyLossWeight = 0.01,MiniBatchSize = 300,NumEpoch = 4,AdvantageEstimateMethod =“gae”,GAEFactor = 0.95,SampleTime = Ts,DiscountFactor = 0.99);agentOptions.ActorOptimizerOptions。LearnRate = 1的军医;agentOptions.CriticOptimizerOptions。LearnRate = 1的军医;

使用默认代理创建语法创建代理。更多信息见rlPPOAgent

agentA = rlPPOAgent (oinfo ainfo,rlAgentInitializationOptions (NumHiddenUnit = 200), agentOptions);agentB = rlPPOAgent (oinfo ainfo,rlAgentInitializationOptions (NumHiddenUnit = 200), agentOptions);

培训

训练多个代理,你可以通过代理的一个数组火车函数。代理的顺序数组中指定的代理块路径必须匹配订单在创造环境。这样做确保代理对象是与他们的环境中适当的I / O接口。

你可以训练多个代理分散或集中的方式。分散培训,代理收集自己的经验在情节和独立学习的经验。在集中培训、代理一起分享收集到的经验和从错误中学习。演员和评论家函数之间同步轨道后的代理完成。

配置一个多代理培训,您可以创建代理组,每组指定一个学习策略rlMultiAgentTrainingOptions对象。每个代理组可能包含独特的代理指标,和学习策略“集中”“去中心化”。例如,您可以使用以下命令来配置培训三个代理组用不同的学习策略。的代理指标[1,2](3、4)学习在一个集中的方式代理4以分散的方式学习。

选择= rlMultiAgentTrainingOptions (AgentGroups = {[1, 2] 4 (3、5)}, LearningStrategy =[“集中式”、“分散”,“集中”))

在多代理培训的更多信息,类型帮助rlMultiAgentTrainingOptions在MATLAB。

您可以执行分散或集中培训通过运行以下部分之一使用Run按钮。

1。分散培训

配置分散的多代理培训这个例子:

  • 自动分配代理组使用AgentGroups =汽车选择。这个分配每个代理在一个单独的组。

  • 指定“去中心化”学习策略。

  • 运行培训最多1000集,每集持续最多600的时间步骤。

  • 阻止一个代理的培训当其平均奖励30多个连续集是-10或更多。

trainOpts = rlMultiAgentTrainingOptions (AgentGroups =“汽车”,LearningStrategy =“去中心化”,MaxEpisodes = 1000,MaxStepsPerEpisode = 600,ScoreAveragingWindowLength = 30,StopTrainingCriteria =“AverageReward”,StopTrainingValue = -10);

培训人员使用火车函数。培训可以需要几个小时才能完成取决于可用的计算能力。为了节省时间,文件加载垫decentralizedAgents.mat它包含一组pretrained代理。培训代理商自己,集doTraining真正的

doTraining = false;如果doTraining decentralizedTrainResults =火车([agentA agentB], env, trainOpts);其他的负载(“decentralizedAgents.mat”);结束

下面的图显示了一个快照分散培训进展。你可以期待不同的结果由于随机性的培训过程。

2。集中的训练

配置集中多代理培训这个例子:

  • 分配(指数两个代理12)在一个组。你可以通过指定的代理指标“AgentGroups”选择。

  • 指定“集中”学习策略。

  • 运行培训最多1000集,每集持续最多600的时间步骤。

  • 阻止一个代理的培训当其平均奖励30多个连续集是-10或更多。

trainOpts = rlMultiAgentTrainingOptions (AgentGroups = {[1, 2]},LearningStrategy =“集中”,MaxEpisodes = 1000,MaxStepsPerEpisode = 600,ScoreAveragingWindowLength = 30,StopTrainingCriteria =“AverageReward”,StopTrainingValue = -10);

培训人员使用火车函数。培训可以需要几个小时才能完成取决于可用的计算能力。为了节省时间,文件加载垫centralizedAgents.mat它包含一组pretrained代理。培训代理商自己,集doTraining真正的

doTraining = false;如果doTraining centralizedTrainResults =火车([agentA agentB], env, trainOpts);其他的负载(“centralizedAgents.mat”);结束

下面的图显示了一个快照的集中培训的进展。你可以期待不同的结果由于随机性的培训过程。

模拟

一旦训练完成后,与环境模拟训练有素的特工。

simOptions = rlSimulationOptions (MaxSteps = 300);经验= sim (env, [agentA agentB], simOptions);

图多代理协作任务包含一个坐标轴对象。坐标轴对象包含X (m), ylabel Y (m)包含5类型的矩形对象,文本。

代理模拟更多的信息,请参阅rlSimulationOptionssim卡

这个例子展示了如何使用现有的训练数据训练q学习的恢复训练。这些代理的更多信息,请参阅q学习的代理撒尔沙代理

创建网格世界环境

对于这个示例,创建基本网格的世界环境。

env = rlPredefinedEnv (“BasicGridWorld”);

指定代理的初始状态总是(2,1),创建一个复位函数,它返回初始代理状态的状态数。

x0 =[1:12十五17 1:18 24];env。ResetFcn = @ () x0 (randi(元素个数(x0)));

解决随机发生器再现性的种子。

rng (1)

创建q学习的代理

创建一个Q学习代理,首先创建一个Q表使用观察和行动规范从电网世界环境。设置的学习速率表示为1。

qTable = rlTable (getObservationInfo (env) getActionInfo (env));qVf = rlQValueFunction (qTable getObservationInfo (env) getActionInfo (env));

接下来,创建一个q学习代理和配置使用此表表示epsilon-greedy探索。创建q学习代理的更多信息,请参阅rlQAgentrlQAgentOptions。保持默认值的折现系数0.99

agentOpts = rlQAgentOptions;agentOpts.EpsilonGreedyExploration。ε= 0.2;agentOpts.CriticOptimizerOptions。LearnRate = 0.2;agentOpts.EpsilonGreedyExploration。EpsilonDecay = 1 e - 3;agentOpts.EpsilonGreedyExploration。EpsilonMin = 1 e - 3;agentOpts。DiscountFactor = 1;qAgent = rlQAgent (qVf agentOpts);

火车q学习代理100集

培训代理商,首先指定培训选项。有关更多信息,请参见rlTrainingOptions

trainOpts = rlTrainingOptions;trainOpts。MaxStepsPerEpisode = 200;trainOpts。MaxEpisodes = 1 e6;trainOpts。情节=“没有”;trainOpts。Verbose = false;trainOpts。StopTrainingCriteria =“EpisodeCount”;trainOpts。StopTrainingValue = 100;trainOpts。ScoreAveragingWindowLength = 30;

火车q学习代理使用火车函数。培训可能需要几分钟才能完成。节省时间在运行这个例子中,加载一个pretrained代理设置doTraining。训练自己代理,集doTraining真正的

env, trainingStats =火车(qAgent trainOpts);

显示最后一集的指数。

trainingStats.EpisodeIndex(结束)
ans = 100

火车q学习代理200多集

设置训练集300后停止。

trainingStats.TrainingOptions。StopTrainingValue = 300;

恢复使用中存在的训练数据训练trainingStats

env, trainingStats =火车(qAgent trainingStats);

显示最后一集的指数。

trainingStats.EpisodeIndex(结束)
ans = 300

情节插曲奖励。

图()图(trainingStats.EpisodeIndex trainingStats.EpisodeReward)标题(“集奖励”)包含(“EpisodeIndex”)ylabel (“EpisodeReward”)

图包含一个坐标轴对象。坐标轴对象与标题集奖励,包含EpisodeIndex, ylabel EpisodeReward包含一个类型的对象。

显示最后的核反应能量表。

qAgentFinalQ = getLearnableParameters (getCritic (qAgent));qAgentFinalQ {1}
ans =25 x4单一矩阵4.8373 10.0000 -1.3036 0.8020 9.2058 4.3147 11.0000 5.8501 10.0000 3.3987 4.5830 -6.4751 6.3569 6.0000 8.9971 5.4393 5.0433 5.8399 7.0067 4.1439 5.1031 8.5228 10.9936 0.1200 9.9616 8.8647 12.0000 10.0026 11.0000 8.4131 8.6974 6.0001 10.0000 6.9997 5.8122 8.5523 7.1164 7.0019 8.0000 5.8196⋮

验证q学习的结果

验证培训效果,培训环境中模拟剂。

在运行模拟之前,可视化环境和配置代理的可视化保持跟踪状态。

情节env (env)。ResetFcn = @ () 2;env.Model.Viewer。ShowTrace = true;env.Model.Viewer.clearTrace;

模拟环境中的代理使用sim卡函数。

sim (qAgent env)

输入参数

全部折叠

代理培训,指定为强化学习代理对象,如rlACAgentrlDDPGAgent,或者是一个这样的对象数组。

如果env是一个多代理环境创建rl金宝appSimulinkEnv作为数组,指定代理。数组中代理的顺序必须与代理命令用于创建env。多代理培训不支持MATLAB金宝app®环境。

请注意

火车更新代理商培训的进展。这是可能的因为每个代理是一个处理对象。保留原来的代理参数供以后使用,将代理保存到MAT-file(如果你代理复制到一个新的变量,新变量也将总是指向最近的代理版本更新参数)。关于处理对象的更多信息,请参阅处理对象的行为

请注意

培训结束时,代理反映了每个代理的状态结束时最后的训练集。回报最终获得的代理不一定是最高的实现在培训过程中,由于持续的探索。期间保存代理培训,创建一个rlTrainingOptions对象指定SaveAgentCriteriaSaveAgentValue并将其传递给属性火车作为一个trainOpts论点。

为更多的信息关于如何创建和配置代理强化学习,明白了强化学习代理

环境代理行为,指定为以下类型之一,强化学习环境对象:

  • 一个预定义的MATLAB仿真软件金宝app®所创造的环境中使用rlPredefinedEnv。这种环境不支持同时多个代理培训。金宝app

  • 一个定制的MATLAB环境下创建等功能rlFunctionEnvrlCreateEnvTemplate。这种环境不支持同时多个代理培训。金宝app

  • 自定义创建使用仿真金宝app软件环境rl金宝appSimulinkEnv。这种环境下多个代理同时支持培训。金宝app

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

env是一个仿真金宝app软件环境,调用火车编译和模拟模型与环境有关。

训练参数和选项,指定为一个rlTrainingOptions或者一个rlMultiAgentTrainingOptions对象。使用这个参数来指定参数和选项如:

  • 结束培训标准

  • 储蓄的候选人标准代理

  • 如何显示培训进展吗

  • 选择并行计算

有关详细信息,请参见rlTrainingOptionsrlMultiAgentTrainingOptions

训练集数据,指定为一个:

  • rlTrainingResult对象,当训练一个代理。

  • 的数组rlTrainingResult当训练多个代理对象。

使用这个参数恢复训练从它的精确的点停止。这将启动培训从代理的最后值参数和训练后获得之前的结果对象火车函数调用。prevTrainStats包含,作为它的一个属性,rlTrainingOptions对象或rlMultiAgentTrainingOptions对象指定培训选项集。因此,重新启动培训与更新选项,首先改变训练选项trainResults使用点符号。如果事件的最大数量已经达到了在前面的训练,你必须增加事件的最大数量。

为详细信息rlTrainingResult对象属性,请参阅trainStats输出参数。

日志记录器对象,指定的作为FileLogger或作为一个MonitorLogger对象。关于强化日志记录器对象的更多信息,请参阅rlDataLogger

输出参数

全部折叠

训练集数据,返回:

  • rlTrainingResult对象,当训练一个代理。

  • 的数组rlTrainingResult当训练多个代理对象。

以下属性属于rlTrainingResult对象:

集数据,返回的列向量[1,2,…;N],在那里N在训练集的数量。这个向量是有用的,如果你想阴谋其他数量从事件到事件的演变。

奖励对于每一个事件,返回一个列向量的长度N。每个条目包含奖励相应的事件。

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

平均回报的平均窗口中指定trainOpts,返回一个列向量的长度N。每个条目包含的平均奖最后计算相应的事件。

代理总数步骤训练,返回一个列向量的长度N。每个条目包含条目的总合EpisodeSteps了这一点。

评论家估计预期的长期累积奖励使用当前的代理和环境的初始条件,返回一个列向量的长度N。每个条目是评论家估计(0)代理相应的事件。这一领域存在的代理只批评,如rlDDPGAgentrlDQNAgent

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

  • 培训在MATLAB环境中,包含字段的结构SimulationError。这个领域是一个列向量,每集一个条目。当StopOnError选择rlTrainingOptions“关闭”,每个条目包含相应的事件期间发生的任何错误。

  • 培训在仿真软件环境中,一个向量的金宝app金宝appSimulink.SimulationOutput对象包含仿真数据记录在相应的事件。记录数据,包括任何一集信号模型配置日志和状态,仿真元数据和相应的事件期间发生的任何错误。

培训选项设置,返回:

提示

  • 火车更新代理商培训的进展。保留原来的代理参数供以后使用,保存MAT-file代理。

  • 默认情况下,调用火车打开了强化学习集管理器,它允许您可视化培训的进展。这一事件经理情节展示了每一集的奖励,运行的平均回报价值,评论家估计0(代理的批评)。事件管理器还显示各种集和训练数据。关掉强化学习事件管理器,设置情节选择trainOpts“没有”

  • 如果你使用一个预定义的环境的可视化,可以使用情节(env)可视化环境。如果你叫情节(env)在训练之前,那么可视化更新培训期间允许您可视化每集的进步。(自定义的环境中,你必须实现自己的情节方法。)

  • 培训中指定的条件时终止trainOpts感到满意。终止培训进展,在强化学习事件管理器中,单击停止训练。因为火车在每一集更新代理,你可以通过调用恢复训练火车(代理,env, trainOpts)再一次,没有失去训练参数学习在第一次调用火车

  • 在培训期间,您可以节省候选人符合条件指定代理trainOpts。例如,您可以保存任何代理的集奖励超过一定值,即使总体条件终止培训还不满意。火车商店保存代理MAT-file在您所指定的文件夹trainOpts。保存代理可能是有用的,例如,允许您测试候选人代理长期训练过程中生成的。关于保存条件和保存位置的详细信息,请参见rlTrainingOptions

算法

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

  1. 初始化代理

  2. 每集:

    1. 重置环境。

    2. 获得最初的观察年代0从环境中。

    3. 计算初始行动一个0=μ(年代0)。

    4. 设置当前行动最初的行动(一个一个0)和设置当前观测到初始观察(年代年代0)。

    5. 虽然这不是完成或终止:

      1. 一步的环境行动一个获取下一个观察年代”和奖励r

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

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

      4. 更新当前的行动和未来行动(一个一个”)和更新当前与未来观察(观察年代年代”)。

      5. 打破如果事件环境中定义满足终止条件。

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

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

扩展功能

版本历史

介绍了R2019a

全部展开