此示例演示了一个多代理协作竞争任务,您可以在其中培训三个近端策略优化(PPO)代理商,以探索网格世界环境中的所有区域。
仅支持Multi-Agent培训Simulink金宝app®环境。金宝app如本示例所示,如果使用MATLAB®系统对象定义环境行为,则可以使用a将其与SIMULINK环境合并金宝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];
指定每个剧集的采样时间,模拟时间和最大步数。
ts = 0.1;tf = 100;maxsteps = ceil(tf / ts);
打开Simulin金宝appk模型。
mdl =“rlAreaCoverage”;Open_System(MDL)
的GridWorld
block是表示训练环境的MATLAB系统块。此环境的System对象定义在GridWorld.m
.
在该示例中,药剂是均匀的并且具有相同的观察和动作规范。为环境创建观察和动作规范。有关更多信息,请参见rlnumericspec.
和rlFiniteSetSpec
.
%定义观察规范。Obsisize = [12 12 4];oinfo = rlnumericspec(obsisize);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代理依靠演员和评论家代表来学习最优策略。在这个例子中,代理为演员和评论家维护基于深度神经网络的函数近似器。行动者和批评者都有相似的具有卷积和全连接层的网络结构。批评家输出表示状态值的标量值
.演员输出概率
采取五项行动中的每一个。有关更多信息,请参见rlValueRepresentation
和rlstochastorrepresentation
.
设置随机种子以进行再现性。
rng (0)
使用以下步骤创建参与者和批评者表示。
创建演员和评论家深神经网络。
为演员和评论家指定表示选项。在本例中,指定学习率和梯度阈值。有关更多信息,请参见rlRepresentationOptions
.
创建演员和批评者表示对象。
对所有三个代理使用相同的网络结构和表示选项。
为idx = 1:3%创建actor深度神经网络。[imageInputLayer(obsSize,'正常化','没有任何',“名字”,“观察”)卷积2dlayer(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(“名字”,“行动”)];创建批评家深度神经网络。批判性= [imageInputlayer(ObseSize,'正常化','没有任何',“名字”,“观察”)卷积2dlayer(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);批评= rlrepresentationOptions(“LearnRate”1的军医,'gradientthreshold',1);创造演员和评论家演员(idx) = rlStochasticActorRepresentation (actorNetWork、oinfo ainfo,...“观察”,{“观察”},actoropts);评论家(IDX)= rlvalueerepresentation(批评,oinfo,...“观察”,{“观察”},批评);结尾
使用指定代理选项rlPPOAgentOptions
.对所有三个代理使用相同的选项。在培训期间,代理商收集经验,直到他们达到128个步骤的体验视野,然后从迷你批次的64个经验中训练。目标函数剪辑因子为0.2提高训练稳定性,折扣系数值为0.995鼓励长期奖励。
opt = rlppoagentoptions(...'经验热诚',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,Agantb,Agentc];
指定培训代理的以下选项。
运行训练最多1000集,每集最多持续5000时间步。
当其平均奖励超过100个连续发作80或更多时,停止培训代理人。
trainOpts = rlTrainingOptions (...'maxepisodes',1000,...'maxstepperepisode',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);结尾
下图显示了训练进度的快照。由于训练过程的随机性,你可以期待不同的结果。
在环境中模拟训练有素的特工。有关代理模拟的更多信息,请参见RlsimulationOptions.
和sim卡
.
rng (0)重置随机种子simOpts = rlSimulationOptions ('maxsteps',maxsteps);体验= SIM(ENV,代理,SIMOPTS);
特工成功地覆盖了整个电网世界。