这个例子展示了如何使用twin-delayed深调整PI控制器决定性策略梯度(TD3)强化学习算法。调整控制器的性能与控制器的使用控制系统调谐器应用程序使用。控制系统调谐器在仿真软件应用程序调优控制器®™软件需要仿真软件控制设金宝app计。
相对简单的控制任务和少量的可调参数,基于模型调优技术可以得到好的结果与更快的优化过程相比,模范自由RL-based方法。然而,RL方法可以更适合高度非线性系统或自适应控制器调优。
为了便于控制器比较,这两种优化方法使用一个线性二次高斯(LQG)的目标函数。
这个示例使用强化学习(RL)代理的收益来计算PI控制器。例如,取代了PI控制器的神经网络控制器,明白了创建仿真软件环金宝app境和培训代理。
这个例子是一个水箱的环境模型模型。这个控制系统的目标是保持在一个水箱的水平相匹配的参考价值。
open_system (“watertankLQG”)
该模型包括过程噪声方差 。
保持水位同时最小化控制的努力u
,这个示例使用以下LQG控制器标准。
模拟控制器在这个模型中,您必须指定仿真时间特遣部队
和控制器样品时间Ts
在几秒钟内。
t = 0.1;Tf = 10;
关于水箱模型的更多信息,请参阅watertank仿金宝app真软件模型(金宝app仿真软件控制设计)。
在仿真软件使用优化控制器金宝app控制系统调谐器,您必须指定控制器块作为调谐块并定义目标优化过程。使用的更多信息控制系统调谐器,请参阅优化控制系统使用控制系统调谐器(金宝app仿真软件控制设计)。
对于这个示例,打开保存的会话ControlSystemTunerSession.mat
使用控制系统调谐器。该会话指定块的PID控制器watertankLQG
模型作为调谐块和包含一个LQG调优的目标。
controlSystemTuner (“ControlSystemTunerSession”)
调整控制器,在调优选项卡上,单击调优。
调整了比例和积分增益约9.8和1 e-6,分别。
Kp_CST = 9.80199999804512;Ki_CST = 1.00019996230706 e-06;
定义模型训练RL代理,使用以下步骤修改水箱模型。
删除PID控制器。
插入一个RL代理。
创建观测向量 在哪里 , 槽的高度, 是高度的引用。观察信号连接到RL代理块。
定义函数RL代理作为奖励负LQG成本, 。RL代理最大化这个奖励,从而最小化LQG成本。
由此产生的模型rlwatertankPIDTune.slx
。
mdl =“rlwatertankPIDTune”;open_system (mdl)
创建环境接口对象。为此,使用localCreatePIDEnv
函数定义的这个例子。
[env, obsInfo actInfo] = localCreatePIDEnv (mdl);
提取这个环境的观察和行动维度。
numObservations = obsInfo.Dimension (1);numActions = prod (actInfo.Dimension);
解决随机发生器再现性的种子。
rng (0)
鉴于观察,TD3代理决定使用哪个动作演员表示。创建演员,首先创建一个深层神经网络与观察输入和动作输出。有关更多信息,请参见rlDeterministicActorRepresentation
。
你可以模型作为神经网络PI控制器与一个全层与观测误差和误差积分。
在这里:
u
是演员神经网络的输出。
Kp
和Ki
神经网络权值的绝对值。
, 槽的高度, 是高度的引用。
梯度下降优化可以驱动权重负值。为了避免负权值,取代正常fullyConnectedLayer
与一个fullyConnectedPILayer
。这一层确保重量是积极通过实现这个函数
。这一层中定义fullyConnectedPILayer.m
。
initialGain =单([1 e - 3 2]);actorNetwork = [featureInputLayer numObservations,“归一化”,“没有”,“名字”,“状态”)fullyConnectedPILayer (initialGain“行动”));actorOptions = rlRepresentationOptions (“LearnRate”1 e - 3,“GradientThreshold”1);演员= rlDeterministicActorRepresentation (actorNetwork obsInfo actInfo,…“观察”,{“状态”},“行动”,{“行动”},actorOptions);
TD3代理接近长期奖励给观测和操作使用两个评论家值函数表示。创建批评,首先创建一个深和两个输入神经网络,观察和行动,和一个输出。更多信息创建一个深层神经网络价值函数表示,看到的创建政策和价值函数表示。
创建批评,使用localCreateCriticNetwork
函数定义的这个例子。评论家表示使用相同的网络结构。
criticNetwork = localCreateCriticNetwork (numObservations numActions);criticOpts = rlRepresentationOptions (“LearnRate”1 e - 3,“GradientThreshold”1);摘要= rlQValueRepresentation (criticNetwork obsInfo actInfo,…“观察”,“状态”,“行动”,“行动”,criticOpts);critic2 = rlQValueRepresentation (criticNetwork obsInfo actInfo,…“观察”,“状态”,“行动”,“行动”,criticOpts);评论家=[摘要critic2];
使用以下选项配置代理。
设置代理使用控制器样品时间Ts
。
mini-batch大小设置为128样本的经验。
设定经验缓冲区长度为1 e6。
设置探索模型和目标政策平滑模型使用高斯噪声方差为0.1。
使用指定TD3代理选项rlTD3AgentOptions
。
agentOpts = rlTD3AgentOptions (…“SampleTime”Ts,…“MiniBatchSize”,128,…“ExperienceBufferLength”1 e6);agentOpts.ExplorationModel。方差= 0.1;agentOpts.TargetPolicySmoothModel。方差= 0.1;
使用指定的演员表示,创建TD3代理评论家表示,和代理的选择。有关更多信息,请参见rlTD3AgentOptions
。
代理= rlTD3Agent(演员、评论家、agentOpts);
培训代理商,首先指定以下培训选项。
运行每个培训1000年
集,每集持久最多100
时间的步骤。
显示在事件管理器(设置培训进展情节
选项)和禁用命令行显示(设置详细的
选项)。
停止训练当代理接收到平均累积奖励大于-355连续超过100集。在这一点上,代理可以控制在水箱的水平。
有关更多信息,请参见rlTrainingOptions
。
maxepisodes = 1000;maxsteps =装天花板(Tf / Ts);trainOpts = rlTrainingOptions (…“MaxEpisodes”maxepisodes,…“MaxStepsPerEpisode”maxsteps,…“ScoreAveragingWindowLength”,100,…“详细”假的,…“阴谋”,“训练进步”,…“StopTrainingCriteria”,“AverageReward”,…“StopTrainingValue”,-355);
火车代理使用火车
函数。培训这个代理是一个计算密集型的过程需要几分钟才能完成。节省时间在运行这个例子中,加载一个pretrained代理设置doTraining
来假
。训练自己代理,集doTraining
来真正的
。
doTraining = false;如果doTraining%培训代理。trainingStats =火车(代理,env, trainOpts);其他的%负载pretrained代理的例子。负载(“WaterTankPIDtd3.mat”,“代理”)结束
验证了代理模型的仿真。
simOpts = rlSimulationOptions (“MaxSteps”,maxsteps);经验= sim (env,代理,simOpts);
PI控制器的积分和比例收益的绝对权重演员表示。获得权重,首先从演员中提取可学的参数。
演员= getActor(代理);参数= getLearnableParameters(演员);
获得控制器的收益。
Ki = abs(参数{1}(1))
Ki =单0.3958
Kp = abs(参数{1}(2))
Kp =单8.0822
申请获得的收益从RL代理原始比例积分控制器块并运行一个阶跃响应仿真。
mdlTest =“watertankLQG”;open_system (mdlTest);set_param ([mdlTest/ PID控制器的),“P”num2str (Kp) set_param ([mdlTest/ PID控制器的),“我”num2str (Ki) sim (mdlTest)
提取阶跃响应信息、LQG成本和稳定裕度的模拟。稳定裕度计算,使用localStabilityAnalysis
函数定义的这个例子。
rlStep = simout;rlCost =成本;rlStabilityMargin = localStabilityAnalysis (mdlTest);
应用使用获得的收益控制系统调谐器原比例积分控制器块并运行一个阶跃响应仿真。
set_param ([mdlTest/ PID控制器的),“P”num2str (Kp_CST) set_param ([mdlTest/ PID控制器的),“我”num2str (Ki_CST) sim (mdlTest) cstStep = simout;cstCost =成本;cstStabilityMargin = localStabilityAnalysis (mdlTest);
每个系统的阶跃响应。
图绘制(cstStep)在情节(rlStep)网格在传奇(控制系统调谐器的,“RL”,“位置”,“东南”)标题(的阶跃响应)
模拟分析了阶跃响应。
rlStepInfo = stepinfo (rlStep.Data rlStep.Time);cstStepInfo = stepinfo (cstStep.Data cstStep.Time);stepInfoTable = struct2table ([cstStepInfo rlStepInfo]);stepInfoTable = removevars (stepInfoTable, {…“SettlingMin”,“SettlingMax”,“脱靶”,“PeakTime”});stepInfoTable.Properties。RowNames = {控制系统调谐器的,“RL”};stepInfoTable
stepInfoTable =2×5表上升时间TransientTime SettlingTime超过峰值________ _________________ _______ _____ _____控制系统调谐器0.77737 1.3594 1.3278 0.98024 1.7408 1.7073 0.40451 10.077 0.33125 - 9.9023 RL
分析模拟的稳定性。
stabilityMarginTable = struct2table ([cstStabilityMargin rlStabilityMargin]);stabilityMarginTable = removevars (stabilityMarginTable, {…“GMFrequency”,“PMFrequency”,“DelayMargin”,“DMFrequency”});stabilityMarginTable.Properties。RowNames = {控制系统调谐器的,“RL”};stabilityMarginTable
stabilityMarginTable =2×3表GainMargin PhaseMargin稳定__________ ___________ ______控制系统调谐器8.1616 - 84.124真RL 9.9226 - 84.242真
比较两个控制器的累积LQG成本。RL-tuned控制器产生一个更优的解决方案。
rlCumulativeCost =总和(rlCost.Data)
rlCumulativeCost = -375.9135
cstCumulativeCost =总和(cstCost.Data)
cstCumulativeCost = -376.9373
两个控制器产生稳定的响应,控制器使用控制系统调谐器产生一个更快的响应。然而,RL调优方法产生一个更高的增益裕度和更优的解决方案。
函数来创建水箱RL环境。
函数[env, obsInfo actInfo] = localCreatePIDEnv (mdl)%定义观测规范obsInfo actInfo和行为规范。2 obsInfo = rlNumericSpec ([1]);obsInfo。Name =“观察”;obsInfo。描述=综合误差和错误;actInfo = rlNumericSpec ([1]);actInfo。Name =“PID输出”;%建立环境接口对象。(mdl env金宝app = rlSimulinkEnv (mdl,' / RL代理',obsInfo actInfo);%设置cutom复位函数,随机模型的参考价值。env。ResetFcn = @(在)localResetFcn (, mdl);结束
函数来随机的参考信号和初始高度水箱在每集的开始。
函数在= localResetFcn (mdl)%随机参考信号黑色= sprintf (mdl' /期望\ nWater水平']);hRef = 10 + 4 *(兰德- 0.5);在= setBlockParameter(黑色,“价值”num2str (hRef));%随机初始高度hInit = 0;黑色= [mdl“水箱系统/ H”];在= setBlockParameter(黑色,“InitialCondition”num2str (hInit));结束
函数线性化和计算输出水箱系统的稳定利润。
函数利润= localStabilityAnalysis (mdl) io (1) = linio ([mdl' / Sum1 '),1“输入”);io (2) = linio (mdl/水箱系统的),1“openoutput”);op = operpoint (mdl);op.Time = 5;linsys =线性化(mdl io, op);利润= allmargin (linsys);结束
函数来创建网络评论家。
函数criticNetwork = localCreateCriticNetwork (numObservations numActions) statePath = [featureInputLayer numObservations,“归一化”,“没有”,“名字”,“状态”)fullyConnectedLayer (32,“名字”,“fc1”));actionPath = [featureInputLayer numActions,“归一化”,“没有”,“名字”,“行动”)fullyConnectedLayer (32,“名字”,“取得”));commonPath = [concatenationLayer (1、2、“名字”,“concat”)reluLayer (“名字”,“reluBody1”)fullyConnectedLayer (32,“名字”,“fcBody”)reluLayer (“名字”,“reluBody2”)fullyConnectedLayer (1,“名字”,“qvalue”));criticNetwork = layerGraph ();criticNetwork = addLayers (criticNetwork statePath);criticNetwork = addLayers (criticNetwork actionPath);criticNetwork = addLayers (criticNetwork commonPath);criticNetwork = connectLayers (criticNetwork,“fc1”,“concat /三机一体”);criticNetwork = connectLayers (criticNetwork,“取得”,“concat / in2”);结束