主要内容

用总线信号训练DDPG代理摆起和平衡摆

本示例展示了如何将一个简单的无摩擦摆Simulink®模型转换为强化学习环境接口,并在该环境中训练深度确定性策略梯度(DDPG)代万博1manbetx理。

有关DDPG代理的更多信息,请参见深度确定性政策梯度代理。有关如何在MATLAB®中培训DDPG代理的示例,请参阅训练DDPG代理控制双集成商系统

带总线的摆起模型

本例的启动模型是一个简单的无摩擦摆。训练目标是用最小的控制努力使钟摆直立而不跌倒。

打开模型。

mdl =“rlSimplePendulumModelBus”;open_system (mdl)

对于这个模型:

  • 向上的平衡摆位置为0弧度,向下悬挂的位置是PI.弧度。

  • 从药剂到环境的扭矩作用信号为-2到2 N·m。

  • 从环境中观察到的是摆角的正弦,摆角的余弦,以及摆角的导数。

  • 观测信号和动作信号都是Simulink总线。万博1manbetx

  • 奖励 r t ,每次步骤都提供了

r t = - ( θ. t 2 + 0 1 θ. t ˙ 2 + 0 001 u t - 1 2 )

在这里:

  • θ. t 是垂直位置的位移角。

  • θ. t ˙ 是位移角度的衍生物。

  • u t - 1 来自前一个时间步骤的控制工作。

本例中使用的模型类似于中描述的单摆模型加载预定义的Simulink环境万博1manbetx。不同之处在于,本例中的模型使用Simulink总线来处理动作和观察信号。万博1manbetx

使用总线创建环境接口

来自Simulink模型的环境接口使用万博1manbetxrl万博1manbetxSimulinkEnv,这需要Simulink模型的名称、agent块的路径以及观察和动万博1manbetx作强化学习数据规范。对于使用总线信号进行操作或观察的模型,您可以使用bus2RLSpec函数。

指定代理块的路径。

agentBlk =“rlSimplePendulumModelBus / RL代理”;

创建一个观察公共汽车目的。

obsBus = 万博1manbetxSimulink.Bus ();奥林匹克广播服务公万博1manbetx司(1)= Simulink.BusElement;奥林匹克广播服务公司(1)。Name =“sin_theta”;奥林匹克广播服务公万博1manbetx司(2)= Simulink.BusElement;奥林匹克广播服务公司(2)。Name =“cos_theta”;奥林匹克广播服务公万博1manbetx司(3)= Simulink.BusElement;奥林匹克广播服务公司(3)。Name ='dtheta';obsBus。元素=奥林匹克广播服务公司;

创建动作公共汽车目的。

actBus = 万博1manbetxSimulink.Bus ();行为(1)= Si万博1manbetxmulink.BusElement;(1)行动。Name =“τ”;(1)行动。Min = 2;(1)行动。Max = 2;actBus。元素=行为;

使用Simulink总线创建动作和观察规范对象。万博1manbetx

obsInfo = bus2RLSpec (“obsBus”,'模型'、mdl);actInfo = bus2RLSpec (“actBus”,'模型'、mdl);

为摆模型创建强化学习环境。

env = rl万博1manbetxSimulinkEnv (mdl agentBlk、obsInfo actInfo);

若要定义钟摆的初始条件为向下悬挂,请使用匿名函数句柄指定一个环境重置函数。这个重置函数设置模型工作空间变量theta0PI.

env。ResetFcn = @(在)setVariable (,'theta0',pi,“工作区”、mdl);

指定模拟时间特遣部队和代理采样时间Ts在几秒钟内。

t = 0.05;Tf = 20;

修复了可重复性的随机生成器种子。

rng (0)

创建DDPG代理

给定观察结果,DDPG代理使用参与者表示来决定采取何种行动。要创建参与者,首先要创建一个具有三个输入(观察)和一个输出(动作)的深度神经网络。这三种观测结果可以用aconcationlayer.

有关创建深度神经网络值函数表示的更多信息,请参见创建策略和值函数表示

sinThetaInput = featureInputLayer (1,“归一化”,“没有”,“名字”,“sin_theta”);cosThetaInput = featureInputLayer (1,“归一化”,“没有”,“名字”,“cos_theta”);dThetaInput = featureInputLayer (1,“归一化”,“没有”,“名字”,'dtheta');commonPath = [concatenationLayer(1,3,“名字”,“concat”)全连接列(400,“名字”,“ActorFC1”) reluLayer (“名字”,'ACTORRELU1') fullyConnectedLayer (300,“名字”,“ActorFC2”) reluLayer (“名字”,'ACTORRELU2') fullyConnectedLayer (1,“名字”,“ActorFC3”)Tanhlayer(“名字”,“ActorTanh1”) scalingLayer (“名字”,'Actorscaling1',“规模”马克斯(actInfo.UpperLimit)));actorNetwork = layerGraph (sinThetaInput);actorNetwork = addLayers (actorNetwork cosThetaInput);actorNetwork = addLayers (actorNetwork dThetaInput);actorNetwork = addLayers (actorNetwork commonPath);actorNetwork = connectLayers (actorNetwork,“sin_theta”,“concat /三机一体”);actorNetwork = connectLayers (actorNetwork,“cos_theta”,“concat / in2”);actorNetwork = connectLayers (actorNetwork,'dtheta',“concat / in3”);

查看参与者的网络配置。

图情节(Actornetwork)

图中包含一个轴。这些轴包含一个graphplot类型的对象。

使用rlRepresentationOptions

ACTOROPTIONS = RLREPRESENTATIONOPTIONS(“LearnRate”1的军医,“GradientThreshold”1);

使用指定的深度神经网络和选项创建参与者表示。您还必须指定参与者的操作和观察信息,这是您从环境接口获得的。有关更多信息,请参见rlDeterministicActorRepresentation

演员= rlDeterministicActorRepresentation (actorNetwork obsInfo actInfo,“观察”,{“sin_theta”,“cos_theta”,'dtheta'},'行动',{'Actorscaling1'},ActorOptions);

DDPG代理使用评价值函数表示来近似给定的观察和行动的长期奖励。要创建批评者,首先要创建一个深度神经网络,有两个输入,观察和行动,和一个输出,状态行动值。

以类似于演员的方式建构评论家。有关更多信息,请参见rlQValueRepresentation

statePath = [concatenationLayer(1,3,“名字”,“concat”)全连接列(400,“名字”,'批评福尔福克') reluLayer (“名字”,'rictrelu1') fullyConnectedLayer (300,“名字”,“CriticStateFC2”));actionPath = [featureInputLayer(1,“归一化”,“没有”,“名字”,“行动”) fullyConnectedLayer (300,“名字”,“CriticActionFC1”,“BiasLearnRateFactor”, 0)];commonPath = [addtionlayer (2,“名字”,“添加”) reluLayer (“名字”,“CriticCommonRelu”) fullyConnectedLayer (1,“名字”,'批评'));criticNetwork = layerGraph (sinThetaInput);criticNetwork = addLayers (criticNetwork cosThetaInput);criticNetwork = addLayers (criticNetwork dThetaInput);criticNetwork = addLayers (criticNetwork actionPath);criticNetwork = addLayers (criticNetwork statePath);criticNetwork = addLayers (criticNetwork commonPath);criticNetwork = connectLayers (criticNetwork,“sin_theta”,“concat /三机一体”);criticNetwork = connectLayers (criticNetwork,“cos_theta”,“concat / in2”);criticNetwork = connectLayers (criticNetwork,'dtheta',“concat / in3”);criticNetwork = connectLayers (criticNetwork,“CriticStateFC2”,'添加/ in1');criticNetwork = connectLayers (criticNetwork,“CriticActionFC1”,'添加/ in2');criticOpts = rlRepresentationOptions (“LearnRate”1 e 03“GradientThreshold”1);评论家= rlQValueRepresentation (criticNetwork obsInfo actInfo,“观察”,{“sin_theta”,“cos_theta”,'dtheta'},'行动',{“行动”},批评);

要创建DDPG代理,首先使用DDPG代理选项使用rlDDPGAgentOptions

代理= rlddpgagentoptions(“SampleTime”,ts,'targetsmoothfactor'1 e - 3,“ExperienceBufferLength”1 e6,“DiscountFactor”, 0.99,“MiniBatchSize”, 128);agentOpts.NoiseOptions.StandardDeviation = 0.6;agentOpts.NoiseOptions.StandardDeviationDecayRate = 1 e-5;

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

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

火车代理

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

  • 每次训练最多50000集,每集最多持续装天花板(Tf / Ts)时间的步骤。

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

  • 当特工连续5次获得的平均累积奖励超过-740时,停止训练。在这一点上,代理可以快速平衡摆在直立位置使用最小的控制努力。

  • 在累积奖励大于-740的每一集保存一份代理人的副本。

有关更多信息,请参见rlTrainingOptions

maxepisodes = 5000;maxsteps =装天花板(Tf / Ts);trainOpts = rlTrainingOptions (“MaxEpisodes”maxepisodes,'maxstepperepisode'maxsteps,“ScoreAveragingWindowLength”,5,“详细”,错误的,“阴谋”,“训练进步”,“StopTrainingCriteria”,“AverageReward”,“StopTrainingValue”,-740);

使用该代理商培训火车函数。培训此代理是一个计算密集型进程,需要几个小时才能完成。要在运行此示例的同时节省时间,请通过设置加载预制代理doTraining。训练代理人,套装doTraining真的

dotraining = false;如果doTraining%训练特工。trainingStats =火车(代理,env, trainOpts);其他的%为示例加载预训练的代理。负载(“万博1manbetxSimulinkPendBusDDPG.mat”,“代理”)结束

模拟DDPG代理

为了验证训练过的代理的性能,在钟摆环境中模拟它。有关代理模拟的更多信息,请参见RlsimulationOptions.sim卡

simoptions = rlsimulation选项('maxsteps', 500);经验= sim (env,代理,simOptions);

图单摆可视化器包含一个轴。坐标轴包含两个类型为line和rectangle的对象。

另请参阅

|||

相关话题