主要内容

为区域覆盖培训多名特工

这个示例演示了一个多智能体协作-竞争任务,在该任务中,您训练三个近端策略优化(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 =“rlareacoverage”;open_system (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。Name ='行动'

为代理指定块路径

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. 的) 采取这五种行动。有关更多信息,请参阅rlvaluerepresentationrlStochasticActorRepresentation

为重现性设置随机种子。

RNG(0)

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

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

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

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

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

为了IDX = 1:3%创建演员深神经网络。ActorNetWork = [ImageInputLayer(Obsizize,“归一化”“没有”'姓名''观察') 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 ('姓名''行动'));%创建评论家深神经网络。criticNetwork = [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('学习',1E-4,“GradientThreshold”1);criticOpts = rlRepresentationOptions ('学习',1E-4,“GradientThreshold”1);%创建演员和评论家演员(IDX)= rlstochasticRepresentation(Actornetwork,oinfo,Ainfo,......'观察', {'观察'}, actorOpts);评论家(idx) = rlValueRepresentation (criticNetwork oinfo,......'观察', {'观察'}, criticOpts);结尾

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

选择= rlPPOAgentOptions (......“ExperienceHorizon”, 128,......“ClipFactor”,0.2,......'entropylossweight', 0.01,......'迷你atchsize', 64,......“NumEpoch”3,......“AdvantageEstimateMethod”gae的......'Gafactor', 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或更多。

训练= rltrainingOptions(......“MaxEpisodes”,1000,......“MaxStepsPerEpisode”maxsteps,......'plots''培训 - 进展'......'scoreaveragingwindowlength',100,......'stoptrinaincriteria'“AverageReward”......“StopTrainingValue”,80);

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

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

doTraining = false;如果doTraining stats = training (agents,env,trainOpts);其他的加载(“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的对象。

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

也可以看看

|

相关的话题