主要内容

创建Simul万博1manbetxink环境并训练Agent

此示例显示了如何在此处转换PI控制器水箱万博1manbetxSimulink®模型到强化学习深度确定性策略梯度(DDPG)代理。有关在MATLAB®中训练DDPG代理的示例,请参阅培训DDPG代理控制双积分系统.

水箱模型

本例的原始模型是水箱模型。目标是控制水箱中的水位。有关水箱模型的更多信息,请参阅水箱Simulink万博1manbetx模型(万博1manbetxSimulink控制设计).

通过以下更改修改原始模型:

  1. 删除PID控制器。

  2. 插入RL代理块。

  3. 连接观察向量 [ E dt E H ] T , 在哪里 H 是坦克的高度, E = R - H R 是参考高度。

  4. 奖励 报酬 = 10. ( | E | < 0 . 1. ) - 1. ( | E | 0 . 1. ) - 100. ( H ≤. 0 | | H 20. ) .

  5. 配置终端信号,使得模拟停止如果 H ≤. 0 或者 H 20. .

由此产生的模型是rlwatertank.slx.有关此模型和更改的更多信息,请参阅创建Simul万博1manbetxink强化学习环境.

Open_System(“水箱”)

创建环境界面

创建环境模型包括定义以下内容:

定义观察规范obsInfo和动作规范Actinfo..

ObsInfo = rlnumericspec([3 1],......'lowerimit',[ -  inf-inf 0]'',......“上限”,[inf inf inf]');ObsInfo.name =.'观察';Obsinfo.description =.'集成错误,错误和测量高度';numobservations = Obsinfo.dimension(1);Actinfo = rlnumericspec([1 1]);Actinfo.name =.“流动”;数量= Actinfo.dimension(1);

构建环境界面对象。

ent = rl万博1manbetxsimulinkenv(“水箱”,'rlwatertank / rl代理',......obsInfo、actInfo);

设置自定义重置函数,使模型的参考值随机化。

env.ResetFcn=@(in)localResetFcn(in);

指定模拟时间TF.和代理采样时间TS.几秒钟之内。

Ts=1.0;Tf=200;

修复随机发生器种子以进行再现性。

RNG(0)

创建DDPG代理

鉴于观察和动作,DDPG代理使用批评值函数表示来估计长期奖励。要创建评论家,首先创建一个具有两个输入,观察和动作的深度神经网络,以及一个输出。有关创建深度神经网络值函数表示的更多信息,请参阅创建策略和值函数表示.

statePath=[featureInputLayer(numObservations,'正常化',“没有”,“姓名”,'状态')完全连接层(50,“姓名”,“CriticStateFC1”)雷卢耶(“姓名”,'rictrelu1')全康校长(25,“姓名”,“CriticStateFC2”)]; actionPath=[featureInputLayer(numActions,'正常化',“没有”,“姓名”,'行动')全康校长(25,“姓名”,'批评FC1')]; commonPath=[additionLayer(2,“姓名”,'添加')雷卢耶(“姓名”,“CriticCommonRelu”)全康连接层(1,“姓名”,'批评')];criticNetwork=layerGraph();criticNetwork=addLayers(criticNetwork,statePath);criticNetwork=addLayers(criticNetwork,actionPath);criticNetwork=addLayers(criticNetwork,commonPath);criticNetwork=connectLayers(criticNetwork,“CriticStateFC2”,“添加/in1”);临界网络=连接层(临界网络,'批评FC1','添加/ in2');

查看网络配置。

图表(关键网络)

图包含轴对象。轴对象包含Type Graphplot的对象。

使用指定批评家表示的选项rlRepresentationOptions.

criticOpts=rlRepresentationOptions(“LearnRate”,1e-03,“梯度阈值”,1);

使用指定的深度神经网络和选项创建批读表示。您还必须指定从环境界面获取的批评者的操作和观察规范。有关更多信息,请参阅rlqvalueerepresentation.

critic=rlQValueRepresentation(关键网络、obsInfo、actInfo、,'观察',{'状态'},'行动',{'行动'},批判者);

在给定的观察结果中,DDPG代理使用参与者表示来决定要执行的操作。要创建参与者,首先创建一个包含一个输入(观察结果)和一个输出(操作)的深层神经网络。

以与批评家相似的方式构造演员。有关更多信息,请参阅RLDETerminyActorRepresentation.

ActorNetWork = [FeatureInputLayer(NumObServations,'正常化',“没有”,“姓名”,'状态')全康连接层(3,“姓名”,'Actorfc')Tanhlayer(“姓名”,“阿克托坦”)全连接列(数量,“姓名”,'行动')];ACTOROPTIONS = RLREPRESENTATIONOPTIONS(“LearnRate”,1e-04,“梯度阈值”,1);actor=rlDeterministicActorRepresentation(actorNetwork、obsInfo、actInfo、,'观察',{'状态'},'行动',{'行动'},ActorOptions);

要创建DDPG代理,请首先使用指定DDPG代理选项rlDDPGAgentOptions.

代理= rlddpgagentoptions(......'采样时间',Ts,......“目标平滑因子”,1e-3,......“折扣演员”,1.0,......'minibatchsize',64,......“经验缓冲长度”,1e6);agentOpts.NoiseOptions.Variance=0.3;agentOpts.NoiseOptions.VarianceDecayRate=1e-5;

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

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

列车员

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

  • 最多运行每个培训5000剧集。指定每个剧集最多持续ceil(Tf/Ts)(那是200)时间步骤。

  • 在Episode Manager对话框中显示培训进度(设置绘图选项)并禁用命令行显示(设置冗长的选择错误的).

  • 当代理收到的平均累积奖励大于时,停止培训800结束20.连续事件。此时,代理可以控制水箱中的水位。

有关更多信息,请参阅RL培训选项.

maxepisodes = 5000;maxsteps = ceil(tf / ts);训练= rltrainingOptions(......'maxepisodes',maxepisodes,......'maxstepperepisode',maxsteps,......“ScoreAveragingWindowLength”20,......'verbose'错误的......“情节”,'培训 - 进步',......“停止培训标准”,'AverageReward',......“停止训练值”,800);

使用该代理商培训火车功能。培训是一个计算密集的过程,需要几分钟才能完成。要在运行此示例的同时节省时间,请通过设置加载预制代理溺爱错误的.要亲自培训特工,请设置溺爱符合事实的.

doTraining=false;如果溺爱%训练代理人。Trainstats =火车(代理,env,训练);其他的%加载预磨料的代理。加载('watertankddpg.mat','代理人')终止

验证培训的代理

通过仿真验证学习代理针对模型。

simOpts=rlSimulationOptions('maxsteps',maxsteps,'stoponerror',“开”);经验=sim(环境、代理、simOpts);

本地功能

作用在= localresetfcn(in)%随机参考信号blk = sprintf('rlwatertank / labled \ nwater等级');h = 3 * randn + 10;虽然H <= 0 ||h> = 20 h = 3 * randn + 10;终止在= setBlockParameter(IN,BLK,“价值”,num2str(h));%随机化初始高度h = 3 * randn + 10;虽然H <= 0 ||h> = 20 h = 3 * randn + 10;终止黑色='rlwatertank /水箱系统/ h';in=参数(in,blk,'初始条件',num2str(h));终止

另见

相关话题