主要内容

训练多智能体执行协同任务

本示例展示如何在Simulink®环境中设置多代理训练会话。金宝app在本例中,您训练两个代理协作执行移动对象的任务。

本例中的环境是一个无摩擦的二维表面,其中包含用圆表示的元素。目标物体C用半径为2米的蓝色圆表示,机器人A(红色)和B(绿色)用半径各为1米的小圆表示。机器人试图通过碰撞施加力将物体C移动到半径为8米的环外。环境中的所有元素都有质量并遵循牛顿运动定律。此外,单元与环境边界之间的接触力被建模为弹簧和质量阻尼器系统。通过在X和Y方向上施加外力,元件可以在表面上运动。在第三维中没有运动,系统的总能量是守恒的。

设置随机种子并创建本示例所需的参数集。

rng (10) rlCollaborativeTaskParams

打开Simulin金宝appk模型。

mdl =“rlCollaborativeTask”;open_system (mdl)

对于这种环境:

  • 二维空间在X和Y方向上都以-12米到12米为界。

  • 接触弹簧刚度为100 N/m,阻尼为0.1 N/m/s。

  • 这些代理共享A、B和C的位置、速度和上一个时间步骤的动作值的相同观测值。

  • 当对象C移动到圆环外时,模拟结束。

  • 在每一个时间步骤中,智能体得到如下奖励:

r 一个 r 全球 + r 当地的 一个 r B r 全球 + r 当地的 B r 全球 0 001 d c r 当地的 一个 - 0 005 d 交流 - 0 008 u 一个 2 r 当地的 B - 0 005 d 公元前 - 0 008 u B 2

在这里:

  • r 一个 而且 r B 分别为代理A和代理B收到的奖励。

  • r 全球 是一个团队奖励,当对象C靠近环的边界时,两个代理都会收到这个奖励。

  • r 当地的 一个 而且 r 当地的 B 是代理A和B根据它们与对象C的距离和从上一个时间步开始的动作的大小而受到的局部惩罚。

  • d C 是物体C到圆环中心的距离。

  • d 交流 而且 d 公元前 为agent A到对象C的距离,agent B到对象C的距离。

  • 代理对机器人施加外力导致机器人运动。 u 一个 而且 u B 为上一个时间步中两个代理A和B的动作值。动作值的范围在-1到1之间。

环境

要创建多代理环境,请使用字符串数组指定代理的块路径。另外,使用单元格数组指定观察和操作规范对象。单元格数组中的规范对象的顺序必须与块路径数组中指定的顺序匹配。当创建环境时,MATLAB工作空间中存在代理时,观察和操作规范数组是可选的。有关创建多代理环境的详细信息,请参见rl金宝appSimulinkEnv

为环境创建I/O规范。在本例中,代理是同构的,并且具有相同的I/O规范。

观测次数%numObs = 16;%动作次数numAct = 2;%外力最大值(N)maxF = 1.0;%每个代理的I/O规格oinfo = rlNumericSpec([numObs,1]);ainfo = rlNumericSpec([numAct,1],“UpperLimit”maxF,“LowerLimit”, maxf);oinfo。Name =“观察”;ainfo。Name =“力量”

创建Simulink环金宝app境接口。

BLKS = [“rlCollaborativeTask /代理”“B rlCollaborativeTask /代理”];obsinfo = {oinfo,oinfo};actinfo = {ainfo,ainfo};env = rl金宝appSimulinkEnv(mdl,blks,obsInfos,actInfos);

为环境指定一个重置函数。复位功能resetRobots确保机器人在每一集开始时从随机的初始位置开始。

env。ResetFcn = @(in) resetRobots(in,RA,RB,RC,boundaryR);

代理

本例使用两个具有连续动作空间的近端策略优化(PPO)代理。代理对机器人施加外力导致机器人运动。要了解更多关于PPO代理的信息,请参见近端策略优化代理

代理收集经验,直到达到经验范围(600步)。轨迹完成后,智能体从300个经验的小批量中学习。目标函数剪辑因子0.2用于提高训练稳定性,折扣因子0.99用于鼓励长期奖励。

为本例指定代理选项。

agentOptions = rlPPOAgentOptions(...“ExperienceHorizon”, 600,...“ClipFactor”, 0.2,...“EntropyLossWeight”, 0.01,...“MiniBatchSize”, 300,...“NumEpoch”4...“AdvantageEstimateMethod”“gae”...“GAEFactor”, 0.95,...“SampleTime”Ts,...“DiscountFactor”, 0.99);agentOptions.ActorOptimizerOptions.LearnRate = 1e-4;agentOptions.CriticOptimizerOptions.LearnRate = 1e-4;

使用默认的代理创建语法创建代理。有关更多信息,请参阅rlPPOAgent

agentA = rlPPOAgent(oinfo, ainfo, rlAgentInitializationOptions(“NumHiddenUnit”, 200), agentOptions);agentB = rlPPOAgent(oinfo, ainfo, rlAgentInitializationOptions(“NumHiddenUnit”, 200), agentOptions);

培训

要训练多个代理,可以将代理数组传递给火车函数。数组中代理的顺序必须与创建环境时指定的代理块路径的顺序相匹配。这样做可以确保代理对象链接到环境中相应的I/O接口。

您可以采用分散或集中的方式训练多个座席。在去中心化训练中,代理在事件期间收集自己的一组经验,并从这些经验中独立学习。集中式培训中,各座席分享收集到的经验,共同学习。轨迹完成后,各智能体之间的actor和批评家功能同步。

在配置多座席培训时,您可以创建座席组,并为每个座席组指定学习策略rlMultiAgentTrainingOptions对象。每个智能体组可以包含唯一的智能体索引,学习策略可以是“集中”“去中心化”.例如,可以使用以下命令为三个具有不同学习策略的座席组配置培训。有指数的代理[1,2]而且(3、4)一边代理一边集中学习4以分散的方式学习。

opts = rlMultiAgentTrainingOptions("AgentGroups", {[1,2], 4, [3,5]}, "LearningStrategy", ["centralized","decentralized","centralized"])

有关多代理训练的更多信息,请键入帮助rlMultiAgentTrainingOptions在MATLAB。

您可以通过使用“运行部分”按钮运行以下部分之一来执行分散或集中训练。

1.分散培训

为本例配置分散的多代理训练:

  • 属性自动分配代理组AgentGroups =汽车选择。这将每个代理分配到一个单独的组中。

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

  • 运行训练最多1000集,每集最多600个时间步。

  • 当一个智能体连续30集的平均奖励为-10或更多时停止训练。

trainOpts = rlMultiAgentTrainingOptions(...“AgentGroups”“汽车”...“LearningStrategy”“去中心化”...“MaxEpisodes”, 1000,...“MaxStepsPerEpisode”, 600,...“ScoreAveragingWindowLength”30岁的...“StopTrainingCriteria”“AverageReward”...“StopTrainingValue”, -10);

培训特工使用火车函数。根据可用的计算能力,训练可能需要几个小时才能完成。为了节省时间,加载MAT文件decentralizedAgents.mat其中包含一组预先训练过的代理。亲自训练探员,设置doTraining真正的

doTraining = false;如果doTraining decentralizedTrainResults = train([agentA,agentB],env,trainOpts);其他的负载(“decentralizedAgents.mat”);结束

下图是去中心化训练进度的快照。由于训练过程的随机性,你可以期待不同的结果。

2.集中的训练

为本例配置集中式多代理训练:

  • 分配两个代理(带索引)1而且2)放在一组。类型中的代理索引可以做到这一点“AgentGroups”选择。

  • 指定“集中”学习策略。

  • 运行训练最多1000集,每集最多600个时间步。

  • 当一个智能体连续30集的平均奖励为-10或更多时停止训练。

trainOpts = rlMultiAgentTrainingOptions(...“AgentGroups”{[1, 2]},...“LearningStrategy”“集中”...“MaxEpisodes”, 1000,...“MaxStepsPerEpisode”, 600,...“ScoreAveragingWindowLength”30岁的...“StopTrainingCriteria”“AverageReward”...“StopTrainingValue”, -10);

培训特工使用火车函数。根据可用的计算能力,训练可能需要几个小时才能完成。为了节省时间,加载MAT文件centralizedAgents.mat其中包含一组预先训练过的代理。亲自训练探员,设置doTraining真正的

doTraining = false;如果doTraining centrizedtrainresults = train([agentA,agentB],env,trainOpts);其他的负载(“centralizedAgents.mat”);结束

下图为集中训练进度快照。由于训练过程的随机性,你可以期待不同的结果。

模拟

训练完成后,在环境中模拟训练过的代理。

simOptions = rlSimulationOptions(“MaxSteps”, 300);exp = sim(env,[agentA agentB],simOptions);

图多Agent协同任务包含一个坐标轴对象。axis对象包含5个矩形、文本类型的对象。

有关代理模拟的详细信息,请参见rlSimulationOptions而且sim卡

另请参阅

|

相关的话题