主要内容

为区域覆盖培训多个代理

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

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

创建环境

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

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

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

对于网格世界环境:

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

  • 每个代理的观察结果为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=[22];sB0=[114];sC0=[312];s0=[sA0;sB0;sC0];

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

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

打开Simulin万博1manbetxk模型。

mdl=“覆盖范围”;开放式系统(mdl)

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

在本例中,代理是同质的,并且具有相同的观察和操作规范。为环境创建观察和操作规范。有关更多信息,请参阅rlNumericSpecrlFiniteSetSpec

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

为代理指定块路径

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.“增重剂”,“他”)雷卢耶(“姓名”,“relu1”)卷积2层(4,8,“姓名”,“conv2”,“大步走”1.“填充”,“相同”,“增重剂”,“他”)雷卢耶(“姓名”,“relu2”)完全连接层(256,“姓名”,“fc1”,“增重剂”,“他”)雷卢耶(“姓名”,“relu3”)完全连接层(128,“姓名”,“fc2”,“增重剂”,“他”)雷卢耶(“姓名”,“relu4”)完全连接层(64,“姓名”,“fc3”,“增重剂”,“他”)雷卢耶(“姓名”,“relu5”)完全连接层(numAct,“姓名”,“输出”)软MaxLayer(“姓名”,“行动”)];%创建深度神经网络。关键网络=[imageInputLayer(obsSize,“正常化”,“没有”,“姓名”,“观察”) convolution2dLayer (8, 16,“姓名”,“conv1”,“大步走”1.“填充”1.“增重剂”,“他”)雷卢耶(“姓名”,“relu1”)卷积2层(4,8,“姓名”,“conv2”,“大步走”1.“填充”,“相同”,“增重剂”,“他”)雷卢耶(“姓名”,“relu2”)完全连接层(256,“姓名”,“fc1”,“增重剂”,“他”)雷卢耶(“姓名”,“relu3”)完全连接层(128,“姓名”,“fc2”,“增重剂”,“他”)雷卢耶(“姓名”,“relu4”)完全连接层(64,“姓名”,“fc3”,“增重剂”,“他”)雷卢耶(“姓名”,“relu5”)完全连接层(1,“姓名”,“输出”)];%指定演员和评论家的表示选项。actorOpts=rlRepresentationOptions(“LearnRate”,1e-4,“梯度阈值”1);criticOpts = rlRepresentationOptions (“LearnRate”,1e-4,“梯度阈值”1);%创造演员和评论家actor(idx)=rl随机actor表示(actorNetWork、oinfo、ainfo、,...“观察”, {“观察”}, actorOpts);评论家(idx) = rlValueRepresentation (criticNetwork oinfo,...“观察”, {“观察”}, criticOpts);终止

使用指定代理选项rlPPOAgentOptions。对所有三个代理使用相同的选项。在培训期间,代理收集经验,直到达到128个步骤的经验范围,然后从64个经验的小批量中进行培训。目标函数剪辑因子0.2可提高培训稳定性,贴现因子值0.995可鼓励长期奖励。

opt=rlPPOAgentOptions(...“ExperienceHorizon”,128,...“ClipFactor”,0.2,...“无熵重量”,0.01,...“MiniBatchSize”,64,...“努梅波奇”3....“优势估计法”,“盖伊”,...“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或更多。

培训选项=RL培训选项(...“最大集”,1000,...“MaxStepsPerEpisode”,maxsteps,...“情节”,“培训进度”,...“ScoreAveragingWindowLength”,100,...“停止培训标准”,“平均向上”,...“停止训练值”,80);

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

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

doTraining = false;如果doTraining统计数据=列车(代理、环境、列车选择);其他的装载(“rlAreaCoverageParameters.mat”);setLearnableParameters (agentA agentAParams);setLearnableParameters (agentB agentBParams);setLearnableParameters (agentC agentCParams);终止

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

模拟代理

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

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

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

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

另见

|

相关的话题