主要内容

火车多个代理区域范围

这个示例演示了一个多代理collaborative-competitive任务你火车三个近端政策优化(PPO)代理探索grid-world环境内的所有区域。

多代理仿真软件培训支持®环境中。金宝app金宝app如这个例子所示,如果你定义你的环境行为使用MATLAB®系统对象,你可以把它变成一个仿真软件环境使用金宝appMATLAB系统(金宝app模型)块。

创建环境

环境在这个例子中是世界12 x12网格包含障碍,与未知的细胞标记在黑色白色和障碍明显。有三个机器人在环境中由红、绿、蓝。三个近端政策优化代理与离散控制机器人行动空间。更多地了解PPO代理,看看近端政策优化代理

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

在每个时间步,一个代理观察环境的状态通过一组四个细胞图像识别障碍,当前位置的机器人控制,其他机器人的位置,和细胞在集探索。这些图像结合创建一套4-channel 12 x12图像观察。下图显示了一个示例的代理人控制绿色机器人观察对于一个给定的时间步长。

网格世界环境:

  • 搜索区域是一个12 x12网格与障碍。

  • 每个代理的观察是一个12 x12x4形象。

  • 离散操作集是一组五行为(= 1 = 0,等待,= 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 = 12 [3];s0 = [sA0;sB0;sC0];

指定样品时间,仿真时间,每集和最大数量的步骤。

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

打开仿真软件模型。金宝app

mdl =“rlAreaCoverage”;open_system (mdl)

GridWorld块是一个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 =“行动”;

为代理指定块路径。

黑色= mdl + (“/代理(红色)”,”“B /代理(绿色),“/剂C(蓝色)”];

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

env = rl金宝appSimulinkEnv (mdl,黑色,{oinfo、oinfo oinfo}, {ainfo、ainfo ainfo});

指定一个重置功能环境。重置功能resetMap确保了机器人从随机初始位置在每集的开始。随机初始化使代理健壮的不同的起始位置和提高训练收敛。

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

创建代理

PPO代理在这个例子中操作一个离散的行动空间和依靠演员和评论家函数学习的最优策略。代理维护深层神经网络函数近似者的演员和批评具有类似网络结构(卷积和完全连接层的组合)。代表国家的评论家输出标量值的值 V ( 年代 ) 。演员输出的概率 π ( 一个 | 年代 ) 的五行为等等,,,左移或右移。

设置随机种子再现性。

rng (0)

使用以下步骤创建演员和批判功能。

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

  2. 创建一个演员函数对象使用rlDiscreteCategoricalActor命令。

  3. 使用创建评论家函数对象rlValueFunction命令。

使用相同的网络结构和代表性的选择这三个代理。

idx = 1:3%建立演员深层神经网络。actorNetWork = [imageInputLayer obsSize,“归一化”,“没有”,“名字”,“观察”)convolution2dLayer (8, 16,“名字”,“conv1”,“步”,1“填充”,1“WeightsInitializer”,“他”)reluLayer (“名字”,“relu1”)convolution2dLayer (4 8“名字”,“conv2”,“步”,1“填充”,“相同”,“WeightsInitializer”,“他”)reluLayer (“名字”,“relu2”)fullyConnectedLayer (256,“名字”,“fc1”,“WeightsInitializer”,“他”)reluLayer (“名字”,“relu3”)fullyConnectedLayer (128,“名字”,“取得”,“WeightsInitializer”,“他”)reluLayer (“名字”,“relu4”)fullyConnectedLayer (64,“名字”,“一个fc3”文件,“WeightsInitializer”,“他”)reluLayer (“名字”,“relu5”)fullyConnectedLayer (numAct“名字”,“输出”)softmaxLayer (“名字”,“行动”));actorNetWork = dlnetwork (actorNetWork);%创建评论家深层神经网络。criticNetwork = [imageInputLayer obsSize,“归一化”,“没有”,“名字”,“观察”)convolution2dLayer (8, 16,“名字”,“conv1”,“步”,1“填充”,1“WeightsInitializer”,“他”)reluLayer (“名字”,“relu1”)convolution2dLayer (4 8“名字”,“conv2”,“步”,1“填充”,“相同”,“WeightsInitializer”,“他”)reluLayer (“名字”,“relu2”)fullyConnectedLayer (256,“名字”,“fc1”,“WeightsInitializer”,“他”)reluLayer (“名字”,“relu3”)fullyConnectedLayer (128,“名字”,“取得”,“WeightsInitializer”,“他”)reluLayer (“名字”,“relu4”)fullyConnectedLayer (64,“名字”,“一个fc3”文件,“WeightsInitializer”,“他”)reluLayer (“名字”,“relu5”)fullyConnectedLayer (1,“名字”,“输出”));criticNetwork = dlnetwork (criticNetwork);%建立演员兼评论家演员(idx) = rlDiscreteCategoricalActor (actorNetWork、oinfo ainfo);% #好< * SAGROW >评论家(idx) = rlValueFunction (criticNetwork oinfo);结束

指定优化器选择演员和评论家。

actorOpts = rlOptimizerOptions (“LearnRate”1的军医,“GradientThreshold”1);criticOpts = rlOptimizerOptions (“LearnRate”1的军医,“GradientThreshold”1);

使用指定代理选项rlPPOAgentOptions。使用相同的选项,所有三个代理。培训期间,代理收集经验,直到他们达到128步的经验地平线,然后从64年mini-batches火车的经历。0.2提高培训的目标函数剪辑因素稳定,和折扣因子值为0.995时鼓励长期回报。

选择= rlPPOAgentOptions (“ActorOptimizerOptions”actorOpts,“CriticOptimizerOptions”criticOpts,“ExperienceHorizon”,128,“ClipFactor”,0.2,“EntropyLossWeight”,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),选择);

培训代理商

在本例中,代理被训练独立分散的方式。为培训代理指定以下选项。

  • 自动分配代理组使用AgentGroups =汽车选择。这个分配每个代理在一个单独的组。

  • 指定“去中心化”学习策略。

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

  • 阻止一个代理的培训当其平均奖励连续超过100集是80或者更多。

trainOpts = rlMultiAgentTrainingOptions (“AgentGroups”,“汽车”,“LearningStrategy”,“去中心化”,“MaxEpisodes”,1000,“MaxStepsPerEpisode”maxsteps,“阴谋”,“训练进步”,“ScoreAveragingWindowLength”,100,“StopTrainingCriteria”,“AverageReward”,“StopTrainingValue”,80);

在多代理培训的更多信息,类型帮助rlMultiAgentTrainingOptions在MATLAB。

培训代理商,指定代理的数组火车函数。数组中代理的顺序必须匹配的顺序代理阻止环境创建过程中指定路径。这样做可以确保代理对象与适当的操作和观察环境中的规范。

培训是一个计算密集型的过程需要几分钟才能完成。节省时间在运行这个例子中,负载pretrained代理通过设置参数doTraining。训练自己代理,集doTraining真正的

doTraining = false;如果doTraining结果=火车([agentA, agentB agentC], env, trainOpts);其他的负载(“rlAreaCoverageAgents.mat”);结束

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

模拟代理

模拟环境中的训练有素的特工。代理模拟更多的信息,请参阅rlSimulationOptionssim卡

rng (0)%重置随机种子simOpts = rlSimulationOptions (“MaxSteps”,maxsteps);经验= sim (env, [agentA、agentB agentC], simOpts);

图包含一个坐标轴对象。坐标轴对象与标题步骤= 438,覆盖率= 100.0%包含30个图像类的对象,直线,矩形。

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

另请参阅

|

相关的话题