主要内容

训练DDPG Agent控制飞行机器人

此示例显示如何训练深层确定性策略梯度(DDPG)代理,以生成Simulink®中建模的飞行机器人的轨迹。有关DDPG代理的更多信息,请参阅万博1manbetx深度确定性策略梯度代理.

飞行机器人模型

本例中的强化学习环境是一个飞行机器人,其初始条件围绕一个半径环随机化15m.机器人的方向也是随机的。机器人在身体的一侧安装了两个推进器,用来推动和控制机器人。训练目标是将机器人从初始状态驱动到面向东方的原点。

打开模型。

mdl =“rlFlyingRobotEnv”;开放式系统(mdl)

设置初始模型状态变量。

θ0=0;x0=-15;y0=0;

定义样本时间Ts以及模拟持续时间特遣部队.

t = 0.4;Tf = 30;

对于这个模型:

  • 目标定位是0rad(面向东方的机器人)。

  • 每个执行器的推力从-11.N

  • 从环境中观察到的是机器人的位置、方向(方向的正弦和余弦)、速度和角速度。

  • 奖赏 R T 在每次执行步骤时提供

R 1. = 10 ( ( x T 2. + Y T 2. + θ T 2. ) < 0 . 5. )

R 2. = - 100 ( | x T | 20. | | | Y T | 20. )

R 3. = - ( 0 . 2. ( R T - 1. + L T - 1. ) 2. + 0 . 3. ( R T - 1. - L T - 1. ) 2. + 0 . 03 x T 2. + 0 . 03 Y T 2. + 0 . 02 θ T 2. )

R T = R 1. + R 2. + R 3.

哪里:

  • x T 是机器人沿x轴的位置。

  • Y T 是机器人沿y轴的位置。

  • θ T 为机器人的方向。

  • L T - 1. 是来自左推进器的控制力。

  • R T - 1. 是右侧推进器的控制力。

  • R 1. 是机器人接近目标时的奖励。

  • R 2. 当机器人驾驶超出范围时,处罚是多少20.M在x或y方向上。当 R 2. < 0 .

  • R 3. 是QR惩罚,惩罚距离目标和控制努力的距离。

创建集成模型

培训一名代理飞行机器人模型,使用createIntegratedEnv函数自动生成与RL Agent块集成的模型,该模型已准备好进行训练。

集成MDL=“IntegratedFlyingRobot”;[~,agentBlk,observationInfo,actionInfo]=createIntegratedEnv(mdl,integratedMdl);

操作和观察

在创建环境对象之前,请指定观察和操作规范的名称,并绑定两者之间的推力操作-11..

这个环境的观测信号是 观察 = [ x Y x ˙ Y ˙ ( θ ) 余弦 ( θ ) θ ˙ ] T .

numObs=产品(观测信息尺寸);observationInfo.Name=“观察”;

这个环境的动作信号是 行动 = [ T R T L ] T .

numAct = prod (actionInfo.Dimension);actionInfo。LowerLimit = -ones(numAct,1); actionInfo.UpperLimit = ones(numAct,1); actionInfo.Name =“手臂”;

创建环境接口

使用集成模型为飞行机器人创建环境界面。

env = rl万博1manbetxSimulinkEnv (integratedMdl agentBlk、observationInfo actionInfo);

复位功能

创建一个自定义重置函数,使机器人沿半径环的初始位置随机化15m和初始方向。有关重置功能的详细信息,请参阅flyingRobotResetFcn.

env.ResetFcn=@(in)flyingRobotResetFcn(in);

修复随机生成器种子的再现性。

rng (0)

创建DDPG代理

DDPG代理通过使用批判价值函数表示来近似给定观察和行动的长期奖励。要创建批评家,首先要创建一个有两个输入(观察和行动)和一个输出的深度神经网络。有关创建神经网络值函数表示的更多信息,请参见创建策略和价值功能表示.

%指定隐藏层的输出数量。hiddenLayerSize = 100;observationPath = [featureInputLayer(numObs,“归一化”,“没有”,“姓名”,“观察”)完全连接层(隐藏层化,“姓名”,“fc1”)雷卢耶(“姓名”,“relu1”)完全连接层(隐藏层化,“姓名”,“fc2”)附加层(2,“姓名”,“添加”)雷卢耶(“姓名”,“relu2”)完全连接层(隐藏层化,“姓名”,“一个fc3”文件)雷卢耶(“姓名”,“relu3”) fullyConnectedLayer (1,“姓名”,“fc4”)];actionPath=[featureInputLayer(numAct,“归一化”,“没有”,“姓名”,“行动”)完全连接层(隐藏层化,“姓名”,“fc5”));%创建图层图。criticNetwork = layerGraph (observationPath);criticNetwork = addLayers (criticNetwork actionPath);%连接actionPath到observationPath。临界网络=连接层(临界网络,“fc5”,“添加/in2”);

使用指定批评家的选项rlRepresentationOptions.

临界点=rlRepresentationOptions(“LearnRate”1 e 03“梯度阈值”1);

使用指定的神经网络和选项创建批评家表示。还必须指定批评家的操作和观察规范。有关更多信息,请参阅rlQValueRepresentation.

critic=rlQValueRepresentation(关键网络、观测信息、动作信息、,...“观察”,{“观察”},“行动”,{“行动”}, criticOptions);

DDPG代理通过使用参与者表示来决定执行给定观察的动作。要创建参与者,首先创建一个具有一个输入(观察)和一个输出(动作)的深度神经网络。

以类似于批评家的方式构造参与者。有关更多信息,请参阅rlDeterministicActorRepresentation.

actorNetwork=[featureInputLayer(numObs,“归一化”,“没有”,“姓名”,“观察”)完全连接层(隐藏层化,“姓名”,“fc1”)雷卢耶(“姓名”,“relu1”)完全连接层(隐藏层化,“姓名”,“fc2”)雷卢耶(“姓名”,“relu2”)完全连接层(隐藏层化,“姓名”,“一个fc3”文件)雷卢耶(“姓名”,“relu3”)完全连接层(numAct,“姓名”,“fc4”) tanhLayer (“姓名”,“tanh1”));actorOptions = rlRepresentationOptions (“LearnRate”,1e-04,“梯度阈值”1);演员= rlDeterministicActorRepresentation (actorNetwork observationInfo actionInfo,...“观察”,{“观察”},“行动”,{“tanh1”}, actorOptions);

要创建DDPG代理,请首先使用指定DDPG代理选项rlDDPGAgentOptions.

agentOptions=rlDDPGAgentOptions(...“SampleTime”,Ts,...“目标平滑因子”1 e - 3,...“经验缓冲长度”1 e6,...“折扣演员”,0.99,...“MiniBatchSize”,256);agentOptions.NoiseOptions.Variance=1e-1;agentOptions.NoiseOptions.VarianceDecayRate=1e-6;

然后,使用指定的参与者表示、评论家表示和代理选项创建代理。有关更多信息,请参阅rlDDPGAgent.

代理= rlDDPGAgent(演员、评论家、agentOptions);

列车员

要培训代理,首先指定培训选项。对于本例,使用以下选项:

  • 每次训练最多跑一次20000每集最多持续一集ceil(Tf/Ts)时间步长。

  • 在“插曲管理器”对话框中显示培训进度(设置情节选项)并禁用命令行显示(设置冗长的选项错误的).

  • 当代理收到的平均累积奖励大于时,停止培训415连续10集以上。此时agent可以驱动飞行机器人到达目标位置。

  • 为累积奖励大于的每集保存一份代理副本415.

有关更多信息,请参见RL培训选项.

最大事件数=20000;最大步骤数=ceil(Tf/Ts);培训选项数=RL培训选项数(...“MaxEpisodes”maxepisodes,...“MaxStepsPerEpisode”,maxsteps,...“StopOnError”,“上”,...“详细”错误的...“情节”,“训练进步”,...“停止培训标准”,“平均向上”,...“停止训练值”, 415,...“ScoreAveragingWindowLength”10...“SaveAgentCriteria”,“情节奖励”,...“SaveAgentValue”,415);

训练代理人使用火车函数。培训是一个计算密集型的过程,需要几个小时才能完成。为了节省运行此示例的时间,请通过设置加载预先训练过的代理溺爱错误的.要亲自培训特工,请设置溺爱符合事实的.

doTraining=false;如果溺爱培训代理商。trainingStats =火车(代理,env, trainingOptions);其他的%加载示例的预训练代理。负载(“FlyingRobotDDPG.mat”,“代理”)终止

模拟DDPG代理

为了验证经过训练的代理的性能,可以在环境中模拟该代理。有关代理模拟的更多信息,请参见rlSimulationOptions模拟.

simOptions = rlSimulationOptions (“MaxSteps”,maxsteps);体验=sim(环境、代理、simOptions);

图飞行机器人可视化器包含一个轴对象。轴对象包含三种类型的对象颤抖,补丁,线。

另见

|

相关话题