此示例显示如何培训深度确定性策略梯度(DDPG)代理以生成在Simulink®中建模的飞行机器人的轨迹。金宝app有关DDPG代理商的更多信息,请参阅据a href="//www.tatmou.com/de/help/reinforcement-learning/ug/ddpg-agents.html" class="a">深度确定性策略梯度代理据/a>。据/p>
此示例的增强学习环境是一种飞行机器人,其初始条件随随机化在半径环周围据code class="literal">15据/code>m.机器人的方向也是随机的。机器人在身体的一侧安装了两个推进器,用来推动和控制机器人。训练目标是将机器人从初始状态驱动到面向东方的原点。据/p>
打开模型。据/p>
mdl =据span style="color:#A020F0">“rlFlyingRobotEnv”据/span>;Open_System(MDL)据/pre>
设置初始模型状态变量。据/p>
theta0 = 0;x0 = -15;y0 = 0;据/pre>
定义样本时间据code class="literal">Ts据/code>以及模拟持续时间据code class="literal">特遣部队据/code>。据/p>
ts = 0.4;tf = 30;据/pre>
对于这个模型:据/p>
目标方向是据code class="literal">0.据/code>rad(机器人面向东部)。据/p>
每个执行器的推力是界定的据code class="literal remove_text_wrapping">-1据/code>来据code class="literal">1据/code>N.据/p>
从环境中观察到的是机器人的位置、方向(方向的正弦和余弦)、速度和角速度。据/p>
奖励据span class="inlineequation"> 每次步骤都提供据/p>
在哪里:据/p>
是机器人沿x轴的位置。据/p>
是机器人沿y轴的位置。据/p>
为机器人的方向。据/p>
来自左推进器的控制努力。据/p>
是右侧推进器的控制力。据/p>
机器人接近目标时是奖励。据/p>
是机器人推动超越时的惩罚据code class="literal">20.据/code>M在x或y方向上。当据span class="inlineequation"> 。据/p>
是QR惩罚,惩罚距离目标和控制努力的距离。据/p>
培训代理人据code class="literal">FlyingRobotenv.据/code>模型,使用据code class="literal">createIntegratedEnv据/code>使用已准备好培训的RL代理块自动生成集成模型。据/p>
SideachMDL =据span style="color:#A020F0">“IntegratedFlyingRobot”据/span>;[~, agentBlk observationInfo actionInfo] = createIntegratedEnv (mdl integratedMdl);据/pre>
在创建环境对象之前,请指定观察和操作规范的名称,并绑定两者之间的推力操作据code class="literal remove_text_wrapping">-1据/code>和据code class="literal">1据/code>。据/p>
这种环境的观察信号是据span class="inlineequation"> 。据/p>
numobs = prod(观察info.dimension);观察info.name =据span style="color:#A020F0">“观察”据/span>;据/pre>
这个环境的动作信号是据span class="inlineequation"> 。据/p>
numAct = prod (actionInfo.Dimension);actionInfo。L.owerLimit = -ones(numAct,1); actionInfo.UpperLimit = ones(numAct,1); actionInfo.Name =据span style="color:#A020F0">“手臂”据/span>;据/pre>
使用集成模型为飞行机器人创建环境界面。据/p>
env = rl金宝appSimulinkEnv (integratedMdl agentBlk、observationInfo actionInfo);据/pre>
创建一个自定义重置函数,使机器人沿半径环的初始位置随机化据code class="literal">15据/code>m和初始方向。有关重置功能的详细信息,请参阅据code class="literal">flyingrobotresetfcn.据/code>。据/p>
env.resetfcn = @(in)flyingrobotresetfcn(in);据/pre>
修复随机生成器种子的再现性。据/p>
rng (0)据/pre>
DDPG代理通过使用批判价值函数表示来近似给定观察和行动的长期奖励。要创建批评家,首先要创建一个有两个输入(观察和行动)和一个输出的深度神经网络。有关创建神经网络值函数表示的更多信息,请参见据a href="//www.tatmou.com/de/help/reinforcement-learning/ug/create-policy-and-value-function-representations.html" class="a">创建策略和价值功能表示据/a>。据/p>
%指定隐藏图层的输出数。据/span>hiddenLayerSize = 100;observationPath = [featureInputLayer(numObs,据span style="color:#A020F0">“归一化”据/span>那据span style="color:#A020F0">'没有任何'据/span>那据span style="color:#A020F0">'姓名'据/span>那据span style="color:#A020F0">“观察”据/span>)全连接列(HiddenLayersize,据span style="color:#A020F0">'姓名'据/span>那据span style="color:#A020F0">“fc1”据/span>)剥离(据span style="color:#A020F0">'姓名'据/span>那据span style="color:#A020F0">“relu1”据/span>)全连接列(HiddenLayersize,据span style="color:#A020F0">'姓名'据/span>那据span style="color:#A020F0">'fc2'据/span>)附加层(2,据span style="color:#A020F0">'姓名'据/span>那据span style="color:#A020F0">“添加”据/span>)剥离(据span style="color:#A020F0">'姓名'据/span>那据span style="color:#A020F0">“relu2”据/span>)全连接列(HiddenLayersize,据span style="color:#A020F0">'姓名'据/span>那据span style="color:#A020F0">“一个fc3”文件据/span>)剥离(据span style="color:#A020F0">'姓名'据/span>那据span style="color:#A020F0">“relu3”据/span>) fullyConnectedLayer (1,据span style="color:#A020F0">'姓名'据/span>那据span style="color:#A020F0">“fc4”据/span>));ActionPath = [FeatureInputLayer(Numact,据span style="color:#A020F0">“归一化”据/span>那据span style="color:#A020F0">'没有任何'据/span>那据span style="color:#A020F0">'姓名'据/span>那据span style="color:#A020F0">'行动'据/span>)全连接列(HiddenLayersize,据span style="color:#A020F0">'姓名'据/span>那据span style="color:#A020F0">“fc5”据/span>));据span style="color:#228B22">%创建图层图。据/span>criticNetwork = layerGraph (observationPath);criticNetwork = addLayers (criticNetwork actionPath);据span style="color:#228B22">%连接actionPath到observationPath。据/span>批评网络= ConnectLayers(批评者,据span style="color:#A020F0">“fc5”据/span>那据span style="color:#A020F0">'添加/ in2'据/span>);据/pre>
为批评者指定选项据a href="//www.tatmou.com/de/help/reinforcement-learning/ref/rlrepresentationoptions.html" class="a"> 使用指定的神经网络和选项创建批读表示。您还必须指定评论家的操作和观察规范。有关更多信息,请参阅据a href="//www.tatmou.com/de/help/reinforcement-learning/ref/rlqvaluerepresentation.html" class="a"> DDPG代理决定通过使用演员表示来考虑观察的行动。要创建演员,首先创建一个具有一个输入(观察)和一个输出(动作)的深神经网络。据/p>
与批评者同样地构建演员。有关更多信息,请参阅据a href="//www.tatmou.com/de/help/reinforcement-learning/ref/rldeterministicactorrepresentation.html" class="a"> 要创建DDPG代理,首先使用DDPG代理选项使用据a href="//www.tatmou.com/de/help/reinforcement-learning/ref/rlddpgagentoptions.html" class="a"> 然后,使用指定的Actor表示,批评者表示和代理选项创建代理。有关更多信息,请参阅据a href="//www.tatmou.com/de/help/reinforcement-learning/ref/rlddpgagent.html" class="a"> 要培训代理,首先指定培训选项。对于本例,使用以下选项:据/p>
最多运行每个培训据code class="literal">20000据/code>每集最多持续一集据code class="literal">CEIL(TF / TS)据/code>时间步骤。据/p> 在“插曲管理器”对话框中显示培训进度(设置据code class="literal">情节据/code>选项)并禁用命令行显示(设置据code class="literal">verb据/code>选择据code class="literal">错误的据/code>)。据/p> 当代理收到平均累积奖励时停止培训大于据code class="literal">415.据/code>连续10集以上。此时agent可以驱动飞行机器人到达目标位置。据/p> 为每个集中的累计奖励的副本保存代理的副本大于据code class="literal">415.据/code>。据/p> 有关更多信息,请参阅据a href="//www.tatmou.com/de/help/reinforcement-learning/ref/rltrainingoptions.html" class="a"> 使用该代理商培训据a href="//www.tatmou.com/de/help/reinforcement-learning/ref/rl.agent.rlqagent.train.html" class="a"> 要验证培训的代理的性能,请在环境中模拟代理。有关代理模拟的更多信息,请参阅据a href="//www.tatmou.com/de/help/reinforcement-learning/ref/rlsimulationoptions.html" class="a">rlrepresentationOptions.据/code>。据/p>
QuandOptions = rlrepresentationOptions(据span style="color:#A020F0">'学习'据/span>1 e 03据span style="color:#A020F0">'gradientthreshold'据/span>1);据/pre>
rlQValueRepresentation据/code>。据/p>
评论家= rlqvalueerepresentation(批评,观察invo,afticeinfo,据span style="color:#0000FF">...据/span>“观察”据/span>,{据span style="color:#A020F0">“观察”据/span>},据span style="color:#A020F0">'行动'据/span>,{据span style="color:#A020F0">'行动'据/span>}, criticOptions);据/pre>
rlDeterministicActorRepresentation据/code>。据/p>
ActorNetWork = [FeatureInputLayer(numobs,据span style="color:#A020F0">“归一化”据/span>那据span style="color:#A020F0">'没有任何'据/span>那据span style="color:#A020F0">'姓名'据/span>那据span style="color:#A020F0">“观察”据/span>)全连接列(HiddenLayersize,据span style="color:#A020F0">'姓名'据/span>那据span style="color:#A020F0">“fc1”据/span>)剥离(据span style="color:#A020F0">'姓名'据/span>那据span style="color:#A020F0">“relu1”据/span>)全连接列(HiddenLayersize,据span style="color:#A020F0">'姓名'据/span>那据span style="color:#A020F0">'fc2'据/span>)剥离(据span style="color:#A020F0">'姓名'据/span>那据span style="color:#A020F0">“relu2”据/span>)全连接列(HiddenLayersize,据span style="color:#A020F0">'姓名'据/span>那据span style="color:#A020F0">“一个fc3”文件据/span>)剥离(据span style="color:#A020F0">'姓名'据/span>那据span style="color:#A020F0">“relu3”据/span>)全连接层(数量,据span style="color:#A020F0">'姓名'据/span>那据span style="color:#A020F0">“fc4”据/span>)Tanhlayer(据span style="color:#A020F0">'姓名'据/span>那据span style="color:#A020F0">“tanh1”据/span>));actorOptions = rlRepresentationOptions (据span style="color:#A020F0">'学习'据/span>,1E-04,据span style="color:#A020F0">'gradientthreshold'据/span>1);演员= rlDeterministicActorRepresentation (actorNetwork observationInfo actionInfo,据span style="color:#0000FF">...据/span>“观察”据/span>,{据span style="color:#A020F0">“观察”据/span>},据span style="color:#A020F0">'行动'据/span>,{据span style="color:#A020F0">“tanh1”据/span>}, actorOptions);据/pre>
rlddpgagentoptions.据/code>。据/p>
AgentOptions = RLDDPGagentOptions(据span style="color:#0000FF">...据/span>“SampleTime”据/span>,ts,据span style="color:#0000FF">...据/span>'targetsmoothfactor'据/span>1 e - 3,据span style="color:#0000FF">...据/span>'经验BufferLength'据/span>1 e6,据span style="color:#0000FF">...据/span>'贴花因子'据/span>,0.99,据span style="color:#0000FF">...据/span>“MiniBatchSize”据/span>,256);代理选项.NoiseOptions.StandardDeviation = 1E-1;代理选项.NoiseOptions.StandardDeviationdecayrate = 1E-6;据/pre>
rlDDPGAgent据/code>。据/p>
代理= rlddpgagent(演员,批评者,代理选项);据/pre>
火车代理据/h3>
rltringOptions.据/code>。据/p>
maxepisodes = 20000;maxsteps = ceil(tf / ts);trysertingoptions = rltringOptions(据span style="color:#0000FF">...据/span>“MaxEpisodes”据/span>maxepisodes,据span style="color:#0000FF">...据/span>'maxstepperepisode'据/span>,maxsteps,据span style="color:#0000FF">...据/span>“StopOnError”据/span>那据span style="color:#A020F0">“上”据/span>那据span style="color:#0000FF">...据/span>“详细”据/span>,错误的,据span style="color:#0000FF">...据/span>'plots'据/span>那据span style="color:#A020F0">“训练进步”据/span>那据span style="color:#0000FF">...据/span>'stoptrinaincriteria'据/span>那据span style="color:#A020F0">“平均”据/span>那据span style="color:#0000FF">...据/span>'stoptriningvalue'据/span>, 415,据span style="color:#0000FF">...据/span>'scoreaveragingwindowlength'据/span>10据span style="color:#0000FF">...据/span>“SaveAgentCriteria”据/span>那据span style="color:#A020F0">“EpisodeReward”据/span>那据span style="color:#0000FF">...据/span>'SaveagentValue'据/span>,415);据/pre>
火车据/code>函数。培训是一个计算密集型的过程,需要几个小时才能完成。为了节省运行此示例的时间,请通过设置加载预先训练过的代理据code class="literal">用圆形据/code>来据code class="literal">错误的据/code>。训练代理人,套装据code class="literal">用圆形据/code>来据code class="literal">真的据/code>。据/p>
dotraining = false;据span style="color:#0000FF">如果据/span>用圆形据span style="color:#228B22">培训代理商。据/span>trainingStats =火车(代理,env, trainingOptions);据span style="color:#0000FF">别的据/span>%加载示例的预训练代理。据/span>负载(据span style="color:#A020F0">“FlyingRobotDDPG.mat”据/span>那据span style="color:#A020F0">“代理”据/span>)据span style="color:#0000FF">结尾据/span>
模拟DDPG代理据/h3>
RlsimulationOptions.据/code>和据a href="//www.tatmou.com/de/help/reinforcement-learning/ref/rl.env.abstractenv.sim.html" class="a">
SIM据/code>。据/p>
simoptions = rlsimulation选项(据span style="color:#A020F0">'maxsteps'据/span>,maxsteps);体验= SIM(ENV,Agent,SimOptions);据/pre>
rlDDPGAgent据/code>
|据span itemscope itemtype="//www.tatmou.com/help/schema/MathWorksDocPage/SeeAlso" itemprop="seealso">火车据/code>