此示例显示如何在Simulink®环境上设置多代理培训会话。万博1manbetx在该示例中,您培训两个代理商协作执行移动对象的任务。
该示例中的环境是含有由圆形表示的元件的无摩擦二维表面。目标对象C由带半径为2μm的蓝色圆,而机器人A(红色)和B(绿色)由较小的圆圈表示,每个圆形为1m。机器人试图通过碰撞施加力来将物体C在半径8m的圆环外移动。环境中的所有元素都有大规模的,牛顿的议案法则。另外,元件和环境边界之间的接触力被建模为弹簧和质量阻尼系统。元件可以通过在X和Y方向上的外部施加的外部施加的外部施加来移动表面。第三尺寸没有动作,并且系统的总能量是节省的。
创建此示例所需的参数集。
rlcollaborativetaskparams.
打开Simulin万博1manbetxk模型。
mdl =“rlcollaborativetask”;Open_System(MDL)
对于这个环境:
在x和y方向上,二维空间在-12μm到12μm中界定。
接触弹簧刚度和阻尼值分别为100n / m和0.1n / m / s。
代理商在最后一次步骤中共享相同的位置,A,B和C的位置,速度以及动作值。
当物体C在圆环外移动时,模拟终止。
在每步,代理商都会收到以下奖励:
这里:
和 代理A和B分别收到的奖励。
是两个代理接收的团队奖励,因为对象C移动更接近环的边界。
和 代理A和B基于从对象C的距离和最后一次步骤的行动的幅度来接受当地惩罚。
物体c从环的中心的距离。
和 是代理A和对象C和代理B和对象C之间的距离。
和 是来自最后一次步骤的代理A和B的动作值。
此示例使用具有离散动作空间的近端策略优化(PPO)代理。要了解有关PPO代理商的更多信息,请参阅近端政策优化代理。代理商在导致运动的机器人上应用外力。每次步骤,代理都选择动作 , 在哪里 是以下是外部应用力的以下成对之一。
要创建多代理环境,请使用字符串数组指定代理的块路径。此外,使用单元阵列指定观察和操作规范对象。单元格数组中规范对象的顺序必须与块路径阵列中指定的顺序匹配。当在环境创建时的Matlab工作空间中可用代理时,观察和操作规范阵列是可选的。有关创建多代理环境的更多信息,请参阅Rl万博1manbetxsimulinkenv.
。
为环境创建I / O规范。在该示例中,药剂是均匀的并且具有相同的I / O规格。
%观察数numobs = 16;%行动数量numact = 2;外部施加力的%最大值(n)maxf = 1.0;每个代理的I / O规范oinfo = rlnumericspec([numobs,1]);AINFO = rlFiniteSetSpec({[-maxF -maxF] [-maxF 0] [-maxF MAXF] [0 -maxF] [0 0] [0 MAXF] [MAXF -maxF] [MAXF 0] [MAXF MAXF]});oinfo.name =.'观察';ainfo.name =.'势力';
创建Simulink环万博1manbetx境界面。
Blks = [“rlcollaborativetask /代理a”那“rlcollaborativetask /代理b”];Obsinfos = {oinfo,oinfo};Actinfos = {AINFO,AINFO};Env = Rl万博1manbetxsimulinkenv(MDL,BLK,OBSINFOS,ACTINFOS);
为环境指定重置函数。重置功能重新汲取
确保机器人从每个集发作开始的随机初始位置开始。
env.resetfcn = @(in)Resetrobots(在,RA,RB,RC,边界);
PPO代理人依靠演员和批评者表示来学习最佳政策。在该示例中,代理能够为演员和评论家维持基于神经网络的函数近似器。
创建批评神经网络和表示。批评网络的输出是状态值函数 对于国家 。
%重置随机种子以提高再现性RNG(0)%批评网络批评= [......FeatureInputLayer(oinfo.dimension(1),'正常化'那'没有任何'那'姓名'那'观察')全连接列(128,'姓名'那'批判福尔'那'掌控itializer'那'他')剥离('姓名'那'rictrelu1')全连接层(64,'姓名'那'批判性]那'掌控itializer'那'他')剥离('姓名'那'transrelu2')全连接列(32,'姓名'那'批判液3'那'掌控itializer'那'他')剥离('姓名'那'rictrelu3')全康连接层(1,'姓名'那'批评')];%批评意见批评= rlrepresentationOptions('学习',1E-4);批评= rlvaluerepresentation(批判性,oinfo,'观察',{'观察'},批评);批评= rlvalueerepresentation(批评,oinfo,'观察',{'观察'},批评);
actor网络的输出是概率 在某个状态下采取每个可能的行动对 。创建演员神经网络和表示。
%演员网络Actornetwork = [......FeatureInputLayer(oinfo.dimension(1),'正常化'那'没有任何'那'姓名'那'观察')全连接列(128,'姓名'那'actorfc1'那'掌控itializer'那'他')剥离('姓名'那'ACTORRELU1')全连接层(64,'姓名'那'Actorfc2'那'掌控itializer'那'他')剥离('姓名'那'ACTORRELU2')全连接列(32,'姓名'那'Actorfc3'那'掌控itializer'那'他')剥离('姓名'那'ACTORRELU3')全连接列(numel(ainfo.elements),'姓名'那'行动')softmaxlayer('姓名'那“sm”)];%演员表示Actoropts = RlRepresentationOptions('学习',1E-4);Actora = rlstochasticRoreEntentation(Actornetwork,Oinfo,Ainfo,......'观察',{'观察'},actoropts);Actorb = rlstochasticRoreEntation(Actornetwork,Oinfo,Ainfo,......'观察',{'观察'},actoropts);
创建代理商。两个代理商都使用相同的选项。
代理选项= rlppoagentoptions(......'经验热诚',256,......'ClipFactor',0.125,......'entropylossweight',0.001,......'minibatchsize',64,......'numechoch',3,......'vieildereextimatemethod'那'gae'那......'Gafactor',0.95,......'采样时间',ts,......'贴花因子',0.9995);Agenta = RLPPoAgent(Actora,Tresca,AgentOptions);AgentB = RLPPoAgent(Actorb,批评,AgentOptions);
在培训期间,代理商收集经验,直到达到256个步骤或摘要的体验视界,然后从迷你批次的64个经验中培训。此示例使用0.125的客观函数剪辑因子,以提高培训稳定性和0.9995的折扣因子,以鼓励长期奖励。
指定以下培训代理人的培训选项。
运行大多数1000次剧集的培训,每个集发作持续最多5000个时间步长。
当其平均奖励超过100个连续发作是-10或更多的平均奖励时,停止培训代理商。
maxepisodes = 1000;maxsteps = 5e3;训练= rltrainingOptions(......'maxepisodes',maxepisodes,......'maxstepperepisode',maxsteps,......'scoreaveragingwindowlength',100,......'plots'那'培训 - 进步'那......'stoptrinaincriteria'那'AverageReward'那......'stoptriningvalue',-10);
要培训多个代理,请指定一系列代理商火车
功能。数组中的代理顺序必须匹配环境创建期间指定的代理块路径的顺序。这样做可确保代理对象链接到环境中的适当I / O接口。培训这些代理人可能需要几个小时才能完成,具体取决于可用的计算能力。
垫文件rlcollaborativetaskagents.
包含一组预制代理。您可以加载文件并查看代理的性能。训练代理人,套装用圆形
到真的
。
dotraining = false;如果dotraining stats =火车([Agenta,Agentb],Env,训练);别的加载('rlcollaborativetaskagents.mat');结尾
下图显示了培训进度的快照。由于培训过程中的随机性,您可以期待不同的结果。
模拟环境中的训练有素的代理。
simoptions = rlsimulation选项('maxsteps',maxsteps);exp = sim(env,[Agenta AgentB],SimOptions);
有关代理模拟的更多信息,请参阅RlsimulationOptions.
和SIM
。