训练DDPG药剂控制飞行机器人

这个例子演示了如何训练一个深度确定性策略梯度(DDPG)代理来生成Simulink®中模拟的飞行机器人的轨迹。万博1manbetx有关DDPG代理的更多信息,请参见深度确定性策略梯度代理.

飞行机器人模型

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

打开模型并设置初始模型变量。

mdl =“rlFlyingRobotEnv”;open_system (mdl)初始模型状态变量theta0 = 0;x0 = -15;y0 = 0;%样品时间t = 0.4;%仿真长度Tf = 30;

对于这个模型:

  • 目标定位是0弧度(机器人面朝东)。

  • 来自每个驱动器的推力是有界的11N

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

  • 奖励 r t ,在每个时刻的步长为:

r 1 = 10 ( ( x t 2 + y t 2 + θ t 2 ) < 0 . 5 )

r 2 = - One hundred. ( | 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惩罚。

创建集成模型

培训代理人FlyingRobotEnv模型,使用createIntegratedEnv功能自动生成与RL代理块集成的模型,该模型可用于培训。

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

操作和观察

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

该环境的观测信号为 观察 = ( x y x y ( θ ) 因为 ( θ ) θ ] T .

numObs = prod (observationInfo.Dimension);observationInfo。Name =“观察”;

这种环境的动作信号是 行动 = ( T R T l ] T .

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

创建环境接口

为飞行机器人创建一个环境接口rl万博1manbetxSimulinkEnv使用生成的模型。

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

重置功能

创建一个自定义重置函数,该函数沿着一个半径为1的环随机化机器人的初始位置15m和初始方向。看到flyingRobotResetFcn查看重置函数的详细信息。

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

修正随机产生的种子的可重复性。

rng (0)

创建DDPG代理

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

指定隐藏层的输出数量。hiddenLayerSize = 100;observationPath = [imageInputLayer([numObs 11 1]),“归一化”,“没有”,“名字”,“观察”)fullyConnectedLayer (hiddenLayerSize“名字”,“fc1”)reluLayer (“名字”,“relu1”)fullyConnectedLayer (hiddenLayerSize“名字”,“取得”)additionLayer (2“名字”,“添加”)reluLayer (“名字”,“relu2”)fullyConnectedLayer (hiddenLayerSize“名字”,“一个fc3”文件)reluLayer (“名字”,“relu3”)fullyConnectedLayer (1,“名字”,“fc4”));actionPath = [imageInputLayer([numAct 11]),“归一化”,“没有”,“名字”,“行动”)fullyConnectedLayer (hiddenLayerSize“名字”,“fc5”));创建层图criticNetwork = layerGraph (observationPath);criticNetwork = addLayers (criticNetwork actionPath);%连接actionPath到obervationPathcriticNetwork = connectLayers (criticNetwork,“fc5”,“添加/ in2”);

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

criticOptions = rlRepresentationOptions (“LearnRate”1 e 03“GradientThreshold”1);

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

评论家= rlQValueRepresentation (criticNetwork observationInfo actionInfo,“观察”,{“观察”},“行动”,{“行动”},criticOptions);

DDPG代理使用一个参与者表示来决定采取哪个动作。要创建actor,首先创建一个深度神经网络,其中有一个输入(观察)和一个输出(动作)。

用与批评家相似的方式构造这个演员。有关更多信息,请参见rlDeterministicActorRepresentation.

actorNetwork = [imageInputLayer([numObs 11 1]),“归一化”,“没有”,“名字”,“观察”)fullyConnectedLayer (hiddenLayerSize“名字”,“fc1”)reluLayer (“名字”,“relu1”)fullyConnectedLayer (hiddenLayerSize“名字”,“取得”)reluLayer (“名字”,“relu2”)fullyConnectedLayer (hiddenLayerSize“名字”,“一个fc3”文件)reluLayer (“名字”,“relu3”)fullyConnectedLayer (numAct“名字”,“fc4”)tanhLayer (“名字”,“tanh1”));actorOptions = rlRepresentationOptions (“LearnRate”1 e-04“GradientThreshold”1);演员= rlDeterministicActorRepresentation (actorNetwork observationInfo actionInfo,“观察”,{“观察”},“行动”,{“tanh1”},actorOptions);

要创建DDPG代理,首先使用以下命令指定DDPG代理选项rlDDPGAgentOptions.

agentOptions = rlDDPGAgentOptions (“SampleTime”Ts,“TargetSmoothFactor”1 e - 3,“ExperienceBufferLength”1 e6,“DiscountFactor”,0.99,“MiniBatchSize”,256);agentOptions.NoiseOptions。方差= 1 e 1;agentOptions.NoiseOptions。VarianceDecayRate = 1 e-6;

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

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

火车代理

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

  • 每次训练最多进行2次0000每一集最多持续一集装天花板(Tf / Ts)时间的步骤。

  • 在“事件管理器”对话框中显示培训进度情节选项)和禁用命令行显示(设置详细的选项)。

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

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

有关更多信息,请参见rlTrainingOptions.

maxepisodes = 20000;maxsteps =装天花板(Tf / Ts);trainingOptions = rlTrainingOptions (“MaxEpisodes”maxepisodes,“MaxStepsPerEpisode”maxsteps,“StopOnError”,“上”,“详细”假的,“阴谋”,“训练进步”,“StopTrainingCriteria”,“AverageReward”,“StopTrainingValue”,415,“ScoreAveragingWindowLength”10“SaveAgentCriteria”,“EpisodeReward”,“SaveAgentValue”,415);

使用。训练代理火车函数。这是一个计算密集型的过程,需要几个小时才能完成。要在运行此示例时节省时间,请通过设置加载预训练的代理doTraining.自己训练特工,开始doTraining真正的.

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

模拟DDPG代理

为了验证训练后的代理的性能,可以在单摆环境中进行仿真。有关代理模拟的更多信息,请参见rlSimulationOptionssim卡.

simOptions = rlSimulationOptions (“MaxSteps”,maxsteps);经验= sim (env,代理,simOptions);

另请参阅

|

相关的话题