此示例显示如何培训深度确定性策略梯度(DDPG)代理以摆动并平衡在Simulink®中建模的摆锤。万博1manbetx
有关DDPG代理商的更多信息,请参阅深度确定性政策梯度代理。有关在MATLAB®中训练DDPG代理的示例,请参见训练DDPG代理控制双集成商系统。
用于该示例的增强学习环境是一个简单的无摩擦摆锤,其最初悬挂在向下位置。培训目标是使摆锤直立,而不会使用最小的控制工作。
打开模型。
mdl ='rlsimplepeneylummodel';open_system (mdl)
对于此模型:
向上的平衡摆位置为0.
弧度,向下悬挂的位置是PI.
弧度。
来自代理到环境的扭矩动作信号来自-2至2 n·m。
来自环境的观察是摆角的正弦,摆角的余弦和摆角衍生物。
奖励 ,在每个时间步中提供,为
这里:
是从直立位置的位移角度。
是位移角度的衍生物。
来自前一个时间步骤的控制工作。
有关此模型的更多信息,请参见加载预定义的Simulink环境万博1manbetx。
为钟摆创建一个预定义的环境接口。
Env = Rlpredefinedenv('SimpleDepulummodel连续')
env = 万博1manbetxSimulinkEnvWithAgent with properties: Model: rlSimplePendulumModel AgentBlock: rlSimplePendulumModel/RL Agent ResetFcn: [] UseFastRestart: on . env = SimulinkEnvWithAgent with properties: Model: rlSimplePendulumModel AgentBlock: rlSimplePendulumModel/RL Agent ResetFcn: [] UseFastRestart: on
该接口具有连续的动作空间,其中代理可以将-2至2 n·m之间的扭矩值施加到摆型。
将环境的观察设置为摆角,摆角的余弦和摆角衍生物的正弦。
numobs = 3;set_param('rlsimplepentulummodel / create观察'那“ThetaObservationHandling”那'sincos');
若要定义钟摆的初始条件为向下悬挂,请使用匿名函数句柄指定一个环境重置函数。这个重置函数设置模型工作空间变量Theta0.
至PI.
。
env.resetfcn = @(in)setVariable(在,“theta0”π,“工作区”、mdl);
指定模拟时间TF.
和试剂取样时间TS.
马上。
ts = 0.05;tf = 20;
修复了可重复性的随机生成器种子。
RNG(0)
DDPG代理使用批评价值函数表示来估计长期奖励,给定观察和行动。要创建评论家,首先创建一个具有两个输入(状态和动作)和一个输出的深神经网络。有关创建深度神经网络值函数表示的更多信息,请参阅创建策略和值函数表示。
statepath = [featureInputLayer(numobs,“归一化”那'没有任何'那'名称'那“观察”) fullyConnectedLayer (400,'名称'那“CriticStateFC1”)剥离('名称'那'rictrelu1') fullyConnectedLayer (300,'名称'那“CriticStateFC2”));actionPath = [featureInputLayer(1,“归一化”那'没有任何'那'名称'那'行动') fullyConnectedLayer (300,'名称'那“CriticActionFC1”那'biaslearnratefactor', 0)];commonPath = [addtionlayer (2,'名称'那'添加')剥离('名称'那“CriticCommonRelu”)全康连接层(1,'名称'那'批评'));criticNetwork = layerGraph ();criticNetwork = addLayers (criticNetwork statePath);criticNetwork = addLayers (criticNetwork actionPath);criticNetwork = addLayers (criticNetwork commonPath);criticNetwork = connectLayers (criticNetwork,“CriticStateFC2”那“添加/三机一体”);criticNetwork = connectLayers (criticNetwork,“CriticActionFC1”那'添加/ in2');
查看批评批评网络配置。
图绘制(criticNetwork)
指定使用批评者的选项rlrepresentationOptions.
。
criticOpts = rlRepresentationOptions ('学习',1e-03,“GradientThreshold”1);
使用指定的深度神经网络和选项创建评论表示。您还必须为评论家指定操作和观察信息,这些信息可以从环境接口获得。有关更多信息,请参阅rlqvalueerepresentation
。
obsInfo = getObservationInfo (env);actInfo = getActionInfo (env);评论家= rlQValueRepresentation (criticNetwork obsInfo actInfo,'观察', {“观察”},“行动”, {'行动'}, criticOpts);
DDPG代理决定使用演员表示获取观察的行动。要创建演员,首先创建一个输入的深度神经网络,一个输入,观察和一个输出,动作。
以类似于评论家的方式构建演员。有关更多信息,请参阅RLDETerminyActorRepresentation
。
ActorNetWork = [FeatureInputLayer(numobs,“归一化”那'没有任何'那'名称'那“观察”) fullyConnectedLayer (400,'名称'那'actorfc1')剥离('名称'那“ActorRelu1”) fullyConnectedLayer (300,'名称'那'Actorfc2')剥离('名称'那“ActorRelu2”)全康连接层(1,'名称'那'Actorfc3') tanhLayer ('名称'那“ActorTanh”) scalingLayer ('名称'那“ActorScaling”那“规模”,max(actinfo.upperlimit))];Actoropts = RlRepresentationOptions('学习',1e-04,“GradientThreshold”1);演员= rlDeterministicActorRepresentation (actorNetwork obsInfo actInfo,'观察', {“观察”},“行动”, {“ActorScaling”},actoropts);
要创建DDPG代理,首先使用指定DDPG代理选项rlddpgagentoptions.
。
agentOpts = rlDDPGAgentOptions (......“SampleTime”Ts,......“TargetSmoothFactor”,1e-3,......'经验BufferLength',1e6,......“DiscountFactor”,0.99,......'minibatchsize',128);代理.NoiseOptions.StandardDeviation = 0.6;代理.NoiseOptions.StandardDeviationdecayrate = 1E-5;
然后使用指定的Actor表示,批评者表示和代理选项创建DDPG代理。有关更多信息,请参阅rlddpgagent.
。
代理= rlddpgagent(演员,批评者,代理商);
要训练代理,首先指定训练选项。对于本例,使用以下选项。
训练最多50000集,每集最多持续CEIL(TF / TS)
时间步骤。
在Episode Manager对话框中显示培训进度(设置情节
选项),并禁用命令行显示(设置详细的
选择错误的
)。
当代理在连续五次发作超过-740的平均累积奖励时停止培训。此时,代理商可以使用最小的控制工作快速平衡摆锤的摆锤。
在累积奖励大于-740的每一集保存一份代理人的副本。
有关更多信息,请参阅rlTrainingOptions
。
maxepisodes = 5000;maxsteps = ceil(tf / ts);训练= rltrainingOptions(......“MaxEpisodes”,maxepisodes,......“MaxStepsPerEpisode”maxsteps,......'scoreaveragingwindowlength'5,......“详细”假的,......'plots'那'培训 - 进步'那......'stoptrinaincriteria'那“AverageReward”那......“StopTrainingValue”, -740,......'SaveAgentCriteria'那'EpisodeReward'那......'SaveagentValue',-740);
训练特工使用火车
函数。训练这个代理是一个需要数小时才能完成的计算密集型过程。为了节省运行这个示例时的时间,可以通过设置加载一个预先训练过的代理用圆形
至错误的
。亲自训练探员,预备用圆形
至真正的
。
doTraining = false;如果用圆形%训练代理人。trainingStats =火车(代理,env, trainOpts);其他的%为示例加载预训练的代理。加载('万博1manbetxsimulinkpendulumddpg.mat'那'代理人')结尾
要验证培训的代理的性能,请在摆内环境中模拟它。有关代理模拟的更多信息,请参阅rlSimulationOptions
和SIM
。
simOptions = rlSimulationOptions (“MaxSteps”,500);体验= SIM(ENV,Agent,SimOptions);
rlddpgagent.
|Rl万博1manbetxsimulinkenv.
|火车