这个例子展示了如何训练深决定性策略梯度(DDPG)代理生成轨迹的飞行机器人建模仿真软件®。万博1manbetxDDPG代理的更多信息,请参阅深决定性策略梯度代理。
这个例子的强化学习环境是一个飞行机器人的初始条件随机环半径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 = rl万博1manbetxSimulinkEnv (integratedMdl agentBlk、observationInfo actionInfo);
创建一个定制的复位函数,随机排列机器人的初始位置沿环半径15
m和初始取向。重置功能的详细信息,请参见flyingRobotResetFcn
。
env。ResetFcn = @(in) flyingRobotResetFcn(in);
解决随机发生器再现性的种子。
rng (0)
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”);
使用指定选项评论家rlRepresentationOptions
。
criticOptions = rlRepresentationOptions (“LearnRate”1 e 03“GradientThreshold”1);
创建一个使用指定的评论家表示神经网络和选项。您还必须指定的行动和观测规范评论家。有关更多信息,请参见rlQValueRepresentation
。
评论家= rlQValueRepresentation (criticNetwork observationInfo actionInfo,…“观察”,{“观察”},“行动”,{“行动”},criticOptions);
DDPG代理决定哪些操作通过使用演员表示给定的观测。创建演员,首先创建一个深层神经网络与一个输入(观察)和一个输出(行动)。
构建演员同样的评论家。有关更多信息,请参见rlDeterministicActorRepresentation
。
actorNetwork = [featureInputLayer numObs,“归一化”,“没有”,“名字”,“观察”)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;
然后,创建代理使用指定的演员表示,评论家表示,和代理的选择。有关更多信息,请参见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);
火车代理使用火车
函数。培训是一个计算密集型的过程需要几个小时才能完成。节省时间在运行这个例子中,加载一个pretrained代理设置doTraining
来假
。训练自己代理,集doTraining
来真正的
。
doTraining = false;如果doTraining%培训代理。trainingStats =火车(代理,env, trainingOptions);其他的%加载pretrained代理的例子。负载(“FlyingRobotDDPG.mat”,“代理”)结束
验证培训代理的性能,模拟环境中的代理。代理模拟更多的信息,请参阅rlSimulationOptions
和sim卡
。
simOptions = rlSimulationOptions (“MaxSteps”,maxsteps);经验= sim (env,代理,simOptions);