主要内容

为区域覆盖培训多个代理

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

多代理培训仅支持Simulink®环境。如本例所万博1manbetx示,如果使用MATLAB®系万博1manbetx统对象定义环境行为,则可以使用Matlab系统(万博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;7 12;8 12];

初始化机器人位置。

sA0=[22];sB0=[114];sC0=[312];s0=[sA0;sB0;sC0];

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

Ts=0.1;Tf=100;最大步长=ceil(Tf/Ts);

打开Simulin万博1manbetxk模型。

mdl =“rlareacoverage”;开放式系统(mdl)

Gridworld.块是代表培训环境的Matlab系统块。此环境的系统对象是定义的Gridworld.m.

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

%定义观察规范。Obsisize = [12 12 4];oinfo = rlnumericspec(obsisize);oinfo.name =.'观察';%定义动作规范。numAct=5;actionSpace={0,1,2,3,4};ainfo=rlFiniteSetSpec(actionSpace);ainfo.名称='行动';

指定代理的块路径

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

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

env = rl万博1manbetxsimulinkenv(mdl,blks,{oinfo,oinfo,oinfo},{ainfo,ainfo,ainfo});

为环境指定重置函数。重置功能resetmap.确保机器人从每个集发作开始的随机初始位置开始。随机初始化使得代理鲁棒到不同的起始位置并提高训练收敛。

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

创造代理人

PPO代理人依靠演员和批评者表示来学习最佳政策。在该示例中,代理能够为演员和评论家维持基于神经网络的基于神经网络的函数近似器。演员和评论家都有类似的网络结构,卷积和完全连接的层。批评者输出表示状态值的标量值 V. S. .参与者输出概率 π 一种 | S. 采取这五种行动中的每一种。有关更多信息,请参阅rlvalueerepresentation随机表示

设置随机种子的重复性。

RNG(0)

使用以下步骤创建演员和批评者表示。

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

  2. 指定演员和批评者的表示选项。在此示例中,指定学习速率和梯度阈值。有关更多信息,请参阅rlrepresentationOptions.

  3. 创建参与者和评论家表示对象。

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

为了IDX = 1:3%创建演员深神经网络。ActorNetWork = [ImageInputLayer(Obserize,“正常化”“没有”'姓名''观察')卷积2层(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,“正常化”“没有”'姓名''观察')卷积2层(8,16,'姓名'“conv1”'走吧'1.“填充”1.“增重剂”“他”)剥离('姓名'“relu1”)卷积2层(4,8,'姓名'“conv2”'走吧'1.“填充”“一样”“增重剂”“他”)剥离('姓名''relu2')全连接列(256,'姓名''fc1'“增重剂”“他”)剥离('姓名''relu3')完全连接层(128,'姓名''fc2'“增重剂”“他”)剥离('姓名''relu4')完全连接层(64,'姓名''fc3'“增重剂”“他”)剥离('姓名''relu5')全康连接层(1,'姓名''输出')];%为参与者和评论家指定表示选项。Actoropts = RlR​​epresentationOptions('学习',1e-4,“梯度阈值”,1); criticOpts=rlRepresentationOptions('学习',1e-4,“梯度阈值”,1);%创建演员和评论家演员(IDX)= rlstochasticRepresentation(Actornetwork,Oinfo,Ainfo,......'观察',{'观察'},actorOpts);评论家(idx)=rlValueRepresentation(评论家网络,oinfo,......'观察',{'观察'},批判者);结尾

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

opt=rlPPOAgentOptions(......“体验地平线”,128,......“ClipFactor”,0.2,......'entropylossweight',0.01,......'minibatchsize',64,......“努梅波奇”3.......“优势估计法”“盖伊”......'Gafactor',0.95,......“采样时间”,Ts,......“折扣演员”,0.995);

使用定义的参与者、批评者和选项创建代理。

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

列车员

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

  • 运行大多数1000次剧集的培训,每个集发作持续最多5000个时间步长。

  • 当连续100集的平均奖励为80或更多时,停止对代理人的培训。

训练= rltrainingOptions(......“最大集”,1000,......“MaxStepsPerEpisode”,maxsteps,......'plots''培训 - 进步'......'scoreaveragingwindowlength',100,......'stoptrinaincriteria'“平均向上”......“停止训练值”,80);

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

培训是一个计算密集型的过程,需要几分钟才能完成。为了在运行此示例时节省时间,请通过设置用圆形错误的.要亲自培训特工,请设置用圆形符合事实的

doTraining=false;如果doTraining统计数据=列车(代理、环境、列车选择);其他的加载(“rlAreaCoverageParameters.mat”); 可设置参数(agentA,AgentParams);setLearnableParameters(agentB、AgentParams);可设置参数(agentC、agentParams);结尾

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

模拟代理

模拟环境中的训练有素的代理。有关代理模拟的更多信息,请参阅模拟选项SIM

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

图中包含一个Axis对象。标题步骤为737、覆盖率为100.0%的Axis对象包含30个类型为image、line、rectangle的对象。

代理商成功涵盖整个网格世界。

也可以看看

|

相关话题