此示例显示了如何在此处转换PI控制器水箱
万博1manbetxSimulink®模型到强化学习深度确定性策略梯度(DDPG)代理。有关在MATLAB®中训练DDPG代理的示例,请参阅培训DDPG代理控制双积分系统.
本例的原始模型是水箱模型。目标是控制水箱中的水位。有关水箱模型的更多信息,请参阅水箱Simulink万博1manbetx模型(万博1manbetxSimulink控制设计).
通过以下更改修改原始模型:
删除PID控制器。
插入RL代理块。
连接观察向量 , 在哪里 是坦克的高度, 和 是参考高度。
奖励 .
配置终端信号,使得模拟停止如果 或者 .
由此产生的模型是rlwatertank.slx
.有关此模型和更改的更多信息,请参阅创建Simul万博1manbetxink强化学习环境.
Open_System(“水箱”)
创建环境模型包括定义以下内容:
操作和观察信号表示代理用于与环境交互。有关更多信息,请参阅rlNumericSpec
和rlfinitesetspec.
.
奖励信号代理用于衡量其成功。有关更多信息,请参阅定义奖励信号.
定义观察规范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代理使用批评值函数表示来估计长期奖励。要创建评论家,首先创建一个具有两个输入,观察和动作的深度神经网络,以及一个输出。有关创建深度神经网络值函数表示的更多信息,请参阅创建策略和值函数表示.
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');
查看网络配置。
图表(关键网络)
使用指定批评家表示的选项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));终止