此示例显示如何训练深层确定性策略梯度(DDPG)代理,以生成Simulink®中建模的飞行机器人的轨迹。有关DDPG代理的更多信息,请参阅金宝app深度确定性策略梯度代理.
本例中的强化学习环境是一个飞行机器人,其初始条件围绕一个半径环随机化15
m、 机器人的方向也是随机的。机器人有两个推进器安装在身体一侧,用于推动和引导机器人。训练目标是将机器人从初始状态驱动到面向东方的原点。
打开模型。
mdl=“rlflyingrobotev”;开放式系统(mdl)
设置初始模型状态变量。
θ0=0;x0=-15;y0=0;
定义采样时间Ts
以及模拟持续时间Tf
.
Ts=0.4;Tf=30;
对于此型号:
目标定位是0
rad(面向东方的机器人)。
每个执行器的推力从-1
到1.
N
从环境中观察到的是机器人的位置、方向(方向的正弦和余弦)、速度和角速度。
奖赏 在每次执行步骤时提供
哪里:
是机器人沿x轴的位置。
是机器人沿y轴的位置。
是机器人的方向。
是来自左推进器的控制力。
是来自右推进器的控制力。
是机器人接近目标时的奖励。
当机器人驾驶超出范围时,处罚是多少20
m在x或y方向。当
.
是一种QR惩罚,惩罚与目标的距离和控制努力。
培训一名代理飞行机器人
模型,使用createIntegratedEnv
该函数用于自动生成一个集成模型,该模型带有准备好进行培训的RL代理块。
集成MDL=“集成飞行机器人”; [~,agentBlk,observationInfo,actionInfo]=createIntegratedEnv(mdl,integratedMdl);
在创建环境对象之前,请指定观察和操作规范的名称,并在它们之间绑定推力操作-1
和1.
.
这种环境的观测信号如下: .
numObs=产品(观测信息尺寸);observationInfo.Name=“观察”;
这种环境的行动信号是 .
numAct=prod(actionInfo.Dimension);actionInfo.LowerLimit=-one(numAct,1);actionInfo.UpperLimit=one(numAct,1);actionInfo.Name=“插入”;
使用集成模型为飞行机器人创建环境界面。
env=rlSi金宝appmulinkEnv(集成MDL、代理LK、观测信息、操作信息);
创建一个自定义重置功能,使机器人的初始位置沿半径环随机化15
m和初始方向。有关重置功能的详细信息,请参阅飞行机器人
.
env.ResetFcn=@(in)flyingRobotResetFcn(in);
修复随机生成器种子以获得再现性。
rng(0)
DDPG代理通过使用临界值函数表示来近似给定观察和行动的长期奖励。要创建临界值,首先创建一个包含两个输入(观察和行动)和一个输出的深度神经网络。有关创建神经网络值函数表示的更多信息,请参阅创建策略和值函数表示.
%指定隐藏层的输出数量。hiddenLayerSize=100;observationPath=[featureInputLayer(numObs,“正常化”,“没有”,“姓名”,“观察”)完全连接层(隐藏层化,“姓名”,“fc1”)雷卢耶(“姓名”,“relu1”)完全连接层(隐藏层化,“姓名”,“fc2”)附加层(2,“姓名”,“添加”)雷卢耶(“姓名”,“relu2”)完全连接层(隐藏层化,“姓名”,“fc3”)雷卢耶(“姓名”,“relu3”)完全连接层(1,“姓名”,“fc4”)];actionPath=[featureInputLayer(numAct,“正常化”,“没有”,“姓名”,“行动”)完全连接层(隐藏层化,“姓名”,“fc5”)];%创建图层图。临界网络=层图(观测路径);临界网络=添加层(临界网络,动作路径);%将actionPath连接到observationPath。临界网络=连接层(临界网络,“fc5”,“添加/in2”);
使用指定批评家的选项rlRepresentationOptions
.
临界点=rlRepresentationOptions(“LearnRate”,1e-03,“梯度阈值”,1);
使用指定的神经网络和选项创建批评家表示。还必须指定批评家的操作和观察规范。有关更多信息,请参阅rlQValueRepresentation
.
critic=rlQValueRepresentation(关键网络、观测信息、动作信息、,...“观察”,{“观察”},“行动”,{“行动”},批评);
DDPG代理通过使用参与者表示来决定执行给定观察的动作。要创建参与者,首先创建一个具有一个输入(观察)和一个输出(动作)的深度神经网络。
以类似于批评家的方式构造参与者。有关更多信息,请参阅决定论呈现
.
actorNetwork=[featureInputLayer(numObs,“正常化”,“没有”,“姓名”,“观察”)完全连接层(隐藏层化,“姓名”,“fc1”)雷卢耶(“姓名”,“relu1”)完全连接层(隐藏层化,“姓名”,“fc2”)雷卢耶(“姓名”,“relu2”)完全连接层(隐藏层化,“姓名”,“fc3”)雷卢耶(“姓名”,“relu3”)完全连接层(numAct,“姓名”,“fc4”)坦莱尔(“姓名”,“tanh1”)];actorOptions=rlRepresentationOptions(“LearnRate”,1e-04,“梯度阈值”,1);actor=rlDeterministicActorRepresentation(actorNetwork,observationInfo,actionInfo,...“观察”,{“观察”},“行动”,{“tanh1”},动植物);
要创建DDPG代理,请首先使用指定DDPG代理选项rlDDPGAgentOptions
.
agentOptions=rlDDPGAgentOptions(...“采样时间”,Ts,...“目标平滑因子”,1e-3,...“经验缓冲长度”,1e6,...“折扣演员”,0.99,...“MiniBatchSize”,256);agentOptions.NoiseOptions.Variance=1e-1;agentOptions.NoiseOptions.VarianceDecayRate=1e-6;
然后,使用指定的参与者表示、评论家表示和代理选项创建代理。有关更多信息,请参阅RLDDPG试剂
.
代理=rlDDPGAgent(演员、评论家、代理);
要培训代理,请首先指定培训选项。对于本例,请使用以下选项:
每次训练最多进行一次20000
每集,每集最多持续一次ceil(Tf/Ts)
时间步长。
在“事件管理器”对话框中显示培训进度(设置阴谋
选项)并禁用命令行显示(设置冗长的
选择错误的
).
当代理收到的平均累积奖励大于时,停止培训415
连续10集以上。此时,代理可以驱动飞行机器人到达目标位置。
为累积奖励大于的每集保存一份代理副本415
.
有关详细信息,请参阅RL培训选项
.
最大事件数=20000;最大步骤数=ceil(Tf/Ts);培训选项数=RL培训选项数(...“最大集”,每集,...“MaxStepsPerEpisode”,maxsteps,...“StopOnError”,“关于”,...“冗长”错误的...“情节”,“培训进度”,...“停止培训标准”,“平均向上”,...“停止训练值”,415,...“ScoreAveragingWindowLength”,10,...“SaveAgentCriteria”,“情节奖励”,...“SaveAgentValue”,415);
使用火车
培训是一个计算密集型的过程,需要几个小时才能完成。要在运行此示例时节省时间,请通过设置溺爱
到错误的
.要亲自培训特工,请设置溺爱
到符合事实的
.
doTraining=false;如果溺爱%培训代理人。培训状态=培训(代理、环境、培训选项);其他的%加载示例的预训练代理。装载(“FlyingRobotDDPG.mat”,“代理人”)终止
要验证经过培训的agent的性能,请在环境中模拟agent。有关代理模拟的详细信息,请参见模拟选项
和模拟
.
simOptions=rlSimulationOptions(“MaxSteps”,maxsteps);体验=sim(环境、代理、simOptions);