训练DDPG代理控制飞行机器人
这个例子展示了如何训练一个深度确定性策略梯度(DDPG)代理来为在Simulink®中建模的飞行机器人生成轨迹。有关DDPG代理的更多信息,请参见深度确定性策略梯度(DDPG)代理.
飞行机器人模型
本例中的强化学习环境是一个飞行机器人,其初始条件围绕一个半径环随机化15
m.机器人的方向也是随机化的。机器人有两个推进器安装在身体的一侧,用于推动和操纵机器人。训练目标是将机器人从初始状态驱动到面向东的原点。
打开模型。
mdl =“rlFlyingRobotEnv”;open_system (mdl)
设置初始模型状态变量。
theta0 = 0;x0 = -15;y0 = 0;
定义样本时间Ts
以及模拟持续时间特遣部队
.
t = 0.4;Tf = 30;
对于这个模型:
目标取向是
0
Rad(面向东方的机器人)。每个执行器的推力是由
-1
来1
N从环境中观察到的是机器人的位置、方向(方向的正弦和余弦)、速度和角速度。
奖励 每个时间步长为
地点:
是机器人在x轴上的位置。
是机器人沿y轴的位置。
是机器人的方向。
是左边推进器的控制力。
是右侧推进器的控制力。
是机器人接近目标时的奖励。
当机器人开车超车时是惩罚吗
20.
M在x或y方向上。时,模拟终止 .是QR惩罚,惩罚距离球门的距离和控制力度。
创建集成模型
训练一名特工FlyingRobotEnv
模型,使用createIntegratedEnv
功能自动生成一个集成模型与RL代理块,准备好训练。
integratedMdl =“IntegratedFlyingRobot”;[~, agentBlk observationInfo actionInfo] = createIntegratedEnv (mdl integratedMdl);
操作和观察
在创建环境对象之前,请为观察和操作规范指定名称,并在两者之间绑定推力操作-1
而且1
.
这个环境的观测信号是 .
numObs = prod (observationInfo.Dimension);observationInfo。Name =“观察”;
这个环境的行动信号是 .
numAct = prod (actionInfo.Dimension);actionInfo。lowerLimit = -ones(numAct,1); actionInfo.UpperLimit = ones(numAct,1); actionInfo.Name =“手臂”;
创建环境接口
利用集成模型为飞行机器人创建环境界面。
env = rlSimulinkEnv (integratedMdl agentBlk、observationInfo actionInfo);
重置功能
创建一个自定义重置函数,该函数将机器人沿半径环的初始位置随机化15
M和初始方向。关于复位功能的详细信息,请参见flyingRobotResetFcn
.
env。ResetFcn = @(in) flyingRobotResetFcn(in);
固定随机生成器种子的再现性。
rng (0)
创建DDPG代理
DDPG代理通过使用临界价值函数表示来近似观察和行动给予的长期奖励。要创建批评家,首先创建一个具有两个输入(观察和动作)和一个输出的深度神经网络。有关创建神经网络值函数表示的更多信息,请参见创建政策和价值功能.
指定隐藏层的输出数量。hiddenLayerSize = 100;observationPath = [featureInputLayer(numObs,“归一化”,“没有”,“名字”,“观察”) fullyConnectedLayer (hiddenLayerSize“名字”,“fc1”) reluLayer (“名字”,“relu1”) fullyConnectedLayer (hiddenLayerSize“名字”,“取得”) additionLayer (2“名字”,“添加”) reluLayer (“名字”,“relu2”) fullyConnectedLayer (hiddenLayerSize“名字”,“一个fc3”文件) reluLayer (“名字”,“relu3”) fullyConnectedLayer (1,“名字”,“fc4”));actionPath = [featureInputLayer(numAct,“归一化”,“没有”,“名字”,“行动”) fullyConnectedLayer (hiddenLayerSize“名字”,“fc5”));创建图层图。criticNetwork = layerGraph (observationPath);criticNetwork = addLayers (criticNetwork actionPath);连接actionPath到observationPath。criticNetwork = connectLayers (criticNetwork,“fc5”,“添加/ in2”);%从图层图创建dlnetworkcriticNetwork = dlnetwork (criticNetwork);
为正在使用的批评家指定选项rlOptimizerOptions
.
criticOptions = rlOptimizerOptions (“LearnRate”1 e 03“GradientThreshold”1);
使用指定的神经网络和选项创建批评家表示。您还必须为批评家指定操作和观察规范。有关更多信息,请参见rlQValueFunction
.
评论家= rlQValueFunction (criticNetwork observationInfo actionInfo,...“ObservationInputNames”,“观察”,“ActionInputNames”,“行动”);
DDPG代理通过使用参与者表示来决定执行给定的观察结果。要创建参与者,首先创建一个具有一个输入(观察)和一个输出(动作)的深度神经网络。
把演员比作评论家。有关更多信息,请参见rlContinuousDeterministicActor
.
actorNetwork = [featureInputLayer(numObs,“归一化”,“没有”,“名字”,“观察”) fullyConnectedLayer (hiddenLayerSize“名字”,“fc1”) reluLayer (“名字”,“relu1”) fullyConnectedLayer (hiddenLayerSize“名字”,“取得”) reluLayer (“名字”,“relu2”) fullyConnectedLayer (hiddenLayerSize“名字”,“一个fc3”文件) reluLayer (“名字”,“relu3”) fullyConnectedLayer (numAct“名字”,“fc4”) tanhLayer (“名字”,“tanh1”));actorNetwork = dlnetwork (actorNetwork);actorOptions = rlOptimizerOptions (“LearnRate”1 e-04“GradientThreshold”1);演员= rlContinuousDeterministicActor (actorNetwork observationInfo actionInfo);
要创建DDPG代理,首先使用指定DDPG代理选项rlDDPGAgentOptions
.
agentOptions = rlDDPGAgentOptions (...“SampleTime”Ts,...“ActorOptimizerOptions”actorOptions,...“CriticOptimizerOptions”criticOptions,...“ExperienceBufferLength”1 e6,...“MiniBatchSize”, 256);agentOptions.NoiseOptions.Variance = 1 e 1;agentOptions.NoiseOptions.VarianceDecayRate = 1 e-6;
然后,使用指定的参与者表示、评论家表示和代理选项创建代理。有关更多信息,请参见rlDDPGAgent
.
代理= rlDDPGAgent(演员、评论家、agentOptions);
火车代理
要培训代理,首先要指定培训选项。对于本例,使用以下选项:
每次训练最多跑一次
20000
每集最多持续一集装天花板(Tf / Ts)
时间的步骤。在“集训管理器”对话框中显示训练进度
情节
选项)并禁用命令行显示(设置详细的
选项假
).当代理收到的平均累积奖励大于时停止训练
415
连续10集以上。此时,代理可以驾驶飞行机器人到达目标位置。为每一集累积奖励大于
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代理
要验证经过训练的代理的性能,请在环境中模拟代理。有关代理模拟的更多信息,请参见rlSimulationOptions
而且sim卡
.
simOptions = rlSimulationOptions (“MaxSteps”, maxsteps);经验= sim (env,代理,simOptions);