主要内容

为区域覆盖培训多名特工

这个示例演示了一个多智能体协作-竞争任务,在该任务中,您训练三个近端策略优化(PPO)代理来探索网格世界环境中的所有区域。

多智能体培训仅支持Simulink®环境。万博1manbetx万博1manbetx如本例所示,如果您使用MATLAB®System对象定义环境行为,则可以使用万博1manbetxMATLAB系统(万博1manbetxSimulink)

创建环境

本例中的环境是一个包含障碍的12x12网格世界,未探索的单元格用白色标记,障碍用黑色标记。环境中有三个机器人,分别用红色、绿色和蓝色的圆圈表示。采用三个具有离散动作空间的近端策略优化代理对机器人进行控制。要了解有关PPO代理的更多信息,请参见策略优化代理

代理为各自的机器人提供五种可能的移动动作(等待、向上、向下、向左或向右)中的一种。机器人决定一个动作是合法还是非法。例如,当机器人位于环境的左边界附近时,向左移动的动作被认为是非法的。同样,与环境中的障碍物和其他代理人碰撞的行为是非法行为,将受到处罚。环境动力学是确定性的,这意味着机器人执行合法和非法行为的概率分别为100%和0%。总体目标是尽可能快地探索所有细胞。

在每个时间步,一个代理通过一组四幅图像来观察环境的状态,这些图像识别有障碍物的细胞、被控制机器人的当前位置、其他机器人的位置以及在事件中探索过的细胞。将这些图像组合起来,创建一个4通道12x12图像观察集。下图显示了控制绿色机器人的代理在给定时间步长内观察到的内容的示例。

对于网格世界环境:

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

  • 每个代理的观察结果为12x12x4图像。

  • 离散动作集是由5个动作(WAIT=0, UP=1, DOWN=2, LEFT=3, RIGHT=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万博1manbetxk模型。

mdl=“覆盖范围”;open_system (mdl)

这个网格世界block是表示训练环境的MATLAB系统块。此环境的系统对象在中定义GridWorld.m

在本例中,代理是同构的,具有相同的观察和操作规范。创建环境的观察和行动规范。有关更多信息,请参见rlNumericSpecrlFiniteSetSpec

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

为代理指定块路径

blks=mdl+[“/代理A(红色)”,“/代理B(绿色)”,“/代理C(蓝色)”];

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

env=rlSi万博1manbetxmulinkEnv(mdl,blks,{oinfo,oinfo,oinfo},{ainfo,ainfo,ainfo});

指定环境的重置功能。重置功能重置地图确保机器人在每集开始时从随机初始位置开始。随机初始化使代理对不同的初始位置具有鲁棒性,并提高训练收敛性。

env。ResetFcn = @(in) resetMap(in, obsMat);

创建代理

PPO代理依赖参与者和评论家表示来学习最优策略。在本例中,代理为参与者和评论家维护基于深度神经网络的函数近似器。参与者和评论家都具有类似的卷积网络结构和完全连接的层。评论家输出表示食用价值 v ( s ) .参与者输出概率 π ( A. | s ) 采取这五种行动。有关更多信息,请参见rlValueRepresentationrlStochasticActorRepresentation

为重现性设置随机种子。

rng(0)

使用以下步骤创建演员和评论家表示。

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

  2. 指定演员和评论家的表示选项。在本例中,指定学习速率和渐变阈值。有关更多信息,请参阅rlRepresentationOptions

  3. 创建演员和评论家表示对象。

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

对于idx=1:3%创建演员深层神经网络。actorNetWork=[imageInputLayer(obsSize,“归一化”,“没有”,“姓名”,“观察”) convolution2dLayer (8, 16,“姓名”,“conv1”,“大步走”,1,“填充”,1,“WeightsInitializer”,“他”)雷卢耶(“姓名”,“relu1”) convolution2dLayer (4 8“姓名”,“conv2”,“大步走”,1,“填充”,“相同”,“WeightsInitializer”,“他”)雷卢耶(“姓名”,“relu2”)完全连接层(256,“姓名”,“fc1”,“WeightsInitializer”,“他”)雷卢耶(“姓名”,“relu3”) fullyConnectedLayer (128,“姓名”,“fc2”,“WeightsInitializer”,“他”)雷卢耶(“姓名”,“relu4”) fullyConnectedLayer (64,“姓名”,“fc3”,“WeightsInitializer”,“他”)雷卢耶(“姓名”,“relu5”) fullyConnectedLayer (numAct“姓名”,“输出”) softmaxLayer (“姓名”,“行动”));%创建深度神经网络。关键网络=[imageInputLayer(obsSize,“归一化”,“没有”,“姓名”,“观察”) convolution2dLayer (8, 16,“姓名”,“conv1”,“大步走”,1,“填充”,1,“WeightsInitializer”,“他”)雷卢耶(“姓名”,“relu1”) convolution2dLayer (4 8“姓名”,“conv2”,“大步走”,1,“填充”,“相同”,“WeightsInitializer”,“他”)雷卢耶(“姓名”,“relu2”)完全连接层(256,“姓名”,“fc1”,“WeightsInitializer”,“他”)雷卢耶(“姓名”,“relu3”) fullyConnectedLayer (128,“姓名”,“fc2”,“WeightsInitializer”,“他”)雷卢耶(“姓名”,“relu4”) fullyConnectedLayer (64,“姓名”,“fc3”,“WeightsInitializer”,“他”)雷卢耶(“姓名”,“relu5”)完全连接层(1,“姓名”,“输出”));%指定演员和评论家的表示选项。actorOpts=rlRepresentationOptions(“LearnRate”,1e-4,“GradientThreshold”1);criticOpts = rlRepresentationOptions (“LearnRate”,1e-4,“GradientThreshold”1);%创造演员和评论家actor(idx)=rl随机actor表示(actorNetWork、oinfo、ainfo、,...“观察”,{“观察”}, actorOpts);评论家(idx) = rlValueRepresentation (criticNetwork oinfo,...“观察”,{“观察”}, criticOpts);终止

使用指定代理选项rlPPOAgentOptions.对所有三个代理使用相同的选项。在培训过程中,agents收集经验,直到达到128步的经验视界,然后从64个经验小批量进行培训。目标函数剪辑系数为0.2可提高训练稳定性,折扣系数为0.995可鼓励长期奖励。

选择= rlPPOAgentOptions (...“ExperienceHorizon”, 128,...“ClipFactor”,0.2,...“无熵重量”, 0.01,...“MiniBatchSize”, 64,...“NumEpoch”,3,...“AdvantageEstimateMethod”,gae的,...“GAEFactor”, 0.95,...“SampleTime”Ts,...“DiscountFactor”, 0.995);

使用已定义的参与者、注释器和选项创建代理。

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

培训代理商

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

  • 进行最多1000集的培训,每集最多持续5000个时间步。

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

培训选项=RL培训选项(...“MaxEpisodes”,1000,...“MaxStepsPerEpisode”maxsteps,...“情节”,“培训进度”,...“ScoreAveragingWindowLength”,100,...“停止培训标准”,“AverageReward”,...“StopTrainingValue”,80);

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

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

doTraining = false;如果doTraining stats = training (agents,env,trainOpts);其他的装载(“rlAreaCoverageParameters.mat”);setLearnableParameters (agentA agentAParams);setLearnableParameters (agentB agentBParams);setLearnableParameters (agentC agentCParams);终止

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

模拟代理

在环境中模拟经过训练的代理。有关代理模拟的更多信息,请参阅rlSimulationOptions模拟

rng(0)%重置随机种子simOpts=rlSimulationOptions(“MaxSteps”, maxsteps);经验= sim (env、代理simOpts);

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

代理成功地覆盖了整个网格世界。

另见

|

相关的话题