主要内容

火车用于区域覆盖的多个代理

此示例演示了一个多代理协作竞争任务,您可以在其中培训三个近端策略优化(PPO)代理商,以探索网格世界环境中的所有区域。

多智能体培训仅支持Simulink®环境。金宝app金宝app如本例所示,如果您使用MATLAB®System对象定义环境行为,则可以使用金宝appMATLAB系统(金宝app模型)块。

创建环境

在该示例中的环境是一个包含障碍的12x12网格世界,具有在黑色中标记为白色和障碍物的未开发的细胞。环境中有三个机器人,由红色,绿色和蓝色圆圈表示。具有离散动作空间的三个近端策略优化代理控制机器人。要了解有关PPO代理商的更多信息,请参阅近端政策优化代理

代理商提供了五种可能的运动行动(等待,向上,向下,向左或向右)中的一个。机器人决定行动是否合法或非法。例如,当机器人位于环境的左侧边界旁边时,左移的动作被认为是非法的。同样,抵抗障碍物和环境中其他代理人的行动是非法行动和造成惩罚。环境动态是确定性的,这意味着机器人分别使用100%和0%的概率执行合法和非法动作。总体目标是尽快探索所有细胞。

在每一个时间步骤中,一个代理通过一组四张图像来观察环境的状态,这些图像识别有障碍的细胞、被控制机器人的当前位置、其他机器人的位置,以及在本集中探索过的细胞。这些图像被组合成一个4通道12x12图像观测集。下图显示了控制绿色机器人的agent在给定时间步长的情况。

对于网格世界环境:

  • 搜索区域是一个带有障碍物的12 × 12网格。

  • 观察每个代理是一个12x12x4的图像。

  • 离散动作集是一组五个动作(等待= 0,向上= 1,向下= 2,左= 3,右= 4)。

  • 当完全探索网格或达到最大步数时,模拟终止。

在每一个时间步骤中,代理会收到以下奖励和惩罚。

  • +1移动到以前未开发的细胞(白色)。

  • -0.5违法行为(试图移动到边界外或与其他机器人和障碍物相撞)

  • -0.05对于导致移动的动作(移动成本)。

  • -0.1对于没有动作的动作(懒罚)。

  • 如果网格完全探索,+200倍该集团在集中的覆盖率贡献(对总细胞的细胞比例)

使用索引矩阵定义网格内障碍的位置。第一列包含行索引,第二列包含列索引。

obsMat = [4 3;5 3;6 3;7 3;8 3;9 3;5 11;6 11;7 11;8 11; 5 12; 6 12; 7 12; 8 12];

初始化机器人位置。

SA0 = [2 2];SB0 = [11 4];sc0 = [3 12];s0 = [sa0;SB0;SC0];

指定每个剧集的采样时间,模拟时间和最大步数。

t = 0.1;Tf = 100;maxsteps =装天花板(Tf / Ts);

打开Simulin金宝appk模型。

mdl =“rlAreaCoverage”;Open_System(MDL)

GridWorldblock是表示训练环境的MATLAB系统块。此环境的System对象定义在GridWorld.m

在该示例中,药剂是均匀的并且具有相同的观察和动作规范。为环境创建观察和动作规范。有关更多信息,请参见rlnumericspec.rlFiniteSetSpec

%定义观察规范。obsSize = [12 12 4];oinfo = rlNumericSpec (obsSize);oinfo。Name =“观察”定义动作规格。numAct = 5;actionSpace = {0 1 2 3 4};ainfo = rlFiniteSetSpec (actionSpace);ainfo。Name =“行动”

为代理指定块路径

BLKS = MDL + [“/代理(红色)””“B /代理(绿色)“/剂C(蓝色)”];

创建环境接口,为所有三个代理指定相同的观察和操作规范。

env = rl金宝appSimulinkEnv (mdl,黑色,{oinfo、oinfo oinfo}, {ainfo、ainfo ainfo});

指定环境的复位功能。重置功能resetMap确保机器人在每一集开始时从随机的初始位置开始。随机初始化使得agent对不同的初始位置具有鲁棒性,提高了训练的收敛性。

env.resetfcn = @(in)resetmap(在,obsmat);

创建代理

PPO代理依靠演员和评论家代表来学习最优策略。在这个例子中,代理为演员和评论家维护基于深度神经网络的函数近似器。行动者和批评者都有相似的具有卷积和全连接层的网络结构。批评家输出表示状态值的标量值 V 年代 .演员输出概率 π 一个 | 年代 采取这五种行动。有关更多信息,请参见rlValueRepresentationrlStochasticActorRepresentation

设置随机种子以进行再现性。

rng (0)

使用以下步骤创建参与者和批评者表示。

  1. 创建演员和评论家的深度神经网络。

  2. 为演员和评论家指定表示选项。在本例中,指定学习率和梯度阈值。有关更多信息,请参见rlRepresentationOptions

  3. 创建演员和批评者表示对象。

对所有三个代理使用相同的网络结构和表示选项。

idx = 1:3%创建actor深度神经网络。[imageInputLayer(obsSize,'正常化''没有任何'“名字”“观察”) convolution2dLayer (8, 16,“名字”'conv1'“步”,1,'填充',1,'掌控itializer''他') reluLayer (“名字”'relu1')卷积2dlayer(4,8,“名字”'conv2'“步”,1,'填充'“相同”'掌控itializer''他') reluLayer (“名字”“relu2”) fullyConnectedLayer (256,“名字”“fc1”'掌控itializer''他') reluLayer (“名字”“relu3”)全连接列(128,“名字”“取得”'掌控itializer''他') reluLayer (“名字”“relu4”)全连接层(64,“名字”“一个fc3”文件'掌控itializer''他') reluLayer (“名字”“relu5”)全连接层(数量,“名字”“输出”)softmaxlayer(“名字”“行动”)];创建批评家深度神经网络。criticNetwork = [imageInputLayer(obsSize,'正常化''没有任何'“名字”“观察”) convolution2dLayer (8, 16,“名字”'conv1'“步”,1,'填充',1,'掌控itializer''他') reluLayer (“名字”'relu1')卷积2dlayer(4,8,“名字”'conv2'“步”,1,'填充'“相同”'掌控itializer''他') reluLayer (“名字”“relu2”) fullyConnectedLayer (256,“名字”“fc1”'掌控itializer''他') reluLayer (“名字”“relu3”)全连接列(128,“名字”“取得”'掌控itializer''他') reluLayer (“名字”“relu4”)全连接层(64,“名字”“一个fc3”文件'掌控itializer''他') reluLayer (“名字”“relu5”) fullyConnectedLayer (1,“名字”“输出”)];%指定演员和评论家的表示选项。actorOpts = rlRepresentationOptions (“LearnRate”1的军医,'gradientthreshold'1);criticOpts = rlRepresentationOptions (“LearnRate”1的军医,'gradientthreshold'1);创造演员和评论家演员(idx) = rlStochasticActorRepresentation (actorNetWork、oinfo ainfo,...“观察”, {“观察”},actoropts);评论家(IDX)= rlvalueerepresentation(批评,oinfo,...“观察”, {“观察”},批评);结束

使用指定代理选项rlPPOAgentOptions.对所有三个代理使用相同的选项。在培训期间,代理商收集经验,直到他们达到128个步骤的体验视野,然后从迷你批次的64个经验中训练。目标函数剪辑因子为0.2提高训练稳定性,折扣系数值为0.995鼓励长期奖励。

opt = rlppoagentoptions(...“ExperienceHorizon”,128,...'ClipFactor', 0.2,...“EntropyLossWeight”,0.01,...“MiniBatchSize”,64,...'numechoch',3,...'vieildereextimatemethod''gae'...“GAEFactor”,0.95,...'采样时间'Ts,...'贴花因子',0.995);

使用已定义的演员,批评和选项创建代理。

agentA = rlPPOAgent(演员(1)评论(1),选择);agentB = rlPPOAgent(演员(2),评论家(2),选择);agentC = rlPPOAgent(演员(3)评论(3),选择);代理= [agentA、agentB agentC];

训练代理人

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

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

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

trainOpts = rlTrainingOptions (...'maxepisodes', 1000,...“MaxStepsPerEpisode”,maxsteps,...“阴谋”“训练进步”...“ScoreAveragingWindowLength”, 100,...“StopTrainingCriteria”'AverageReward'...'stoptriningvalue', 80);

要培训多个代理,请指定一系列代理商火车功能。数组中的代理的顺序必须匹配环境创建期间指定的代理块路径的顺序。这样做可确保代理对象链接到环境中的适当动作和观察规范。

培训是一个计算密集型的过程,需要几分钟才能完成。为了节省运行此示例的时间,请通过设置加载预先训练过的代理参数doTraining错误的.训练代理人,套装doTraining真正的

doTraining = false;如果dotraining stats =火车(代理商,env,训练);别的负载(“rlAreaCoverageParameters.mat”);setLearnableParameters (agentA agentAParams);setLearnableParameters (agentB agentBParams);setLearnableParameters (agentC agentCParams);结束

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

模拟代理人

在环境中模拟训练有素的特工。有关代理模拟的更多信息,请参见rlSimulationOptionssim卡

rng (0)重置随机种子simOpts = rlSimulationOptions (“MaxSteps”,maxsteps);体验= SIM(ENV,代理,SIMOPTS);

图中包含一个轴对象。标题为Steps = 737, Coverage = 100.0%的axis对象包含30个类型为image, line, rectangle的对象。

特工成功地覆盖了整个电网世界。

另请参阅

|

相关的话题