主要内容

生成奖励函数模型预测控制器的伺服电动机

这个例子展示了如何自动生成一个奖励函数从成本和约束规范中定义一个模型预测控制器对象。然后使用生成的回报函数训练强化学习代理。

介绍

您可以使用generateRewardFunction生成一个奖励函数强化学习,从成本和约束中指定一个模型预测控制器。得到的奖励信号是一笔费用(定义的目标函数)和约束违反处罚根据环境的当前状态。

这个例子是基于直流伺服电动机与约束在无边无际的输出(模型预测控制工具箱)例子,你设计一个模型预测控制器的直流电压和轴转矩约束下伺服机构。在这里,您将转换成本和约束规范中定义的货币政策委员会对象到一个奖励功能,用它来训练一个代理控制伺服电动机。

打开这个例子的仿真金宝app软件模型基于上述MPC但已经修改了强化学习的例子。

mdl =“rl_motor”;open_system (mdl);

创建模型预测控制器

创建电动机的开环动态模型中定义的植物和最大容许扭矩τ使用一个helper函数。

(植物、τ)= mpcmotormodel;

指定输入和输出信号类型MPC控制器。轴角位置,测量第一输出。第二个输出扭矩,是无法计量的。

工厂= setmpcsignals(植物、MV = 1,莫= 1,UO = 2);

在操纵变量指定约束,定义一个比例因子。

MV =结构(Min = -220, Max = 220, ScaleFactor = 440);

施加扭矩限制在前三个预测步骤,并指定比例因子轴位置和扭矩。

OV =结构(Min ={负无穷,τ,τ;τ;负)},Max ={正无穷,(τ;τ,τ;正无穷)},ScaleFactor ={2π* 2 *τ});

为二次成本函数指定权重来实现角位置跟踪。设置为零转矩的重量,从而让它浮在其约束。

重量=结构(MV = 0, MVRate = 0.1, OV = 0.1 [0]);

创建一个MPC控制器植物模型与样本的时间0.1年代,预测地平线10步骤和控制的地平线2步骤,使用前面定义的结构重量,操纵变量和输出变量。

mpcobj = mpc(植物,0.1,10、2、重量、MV, OV);

显示控制器的规格。

mpcobj
MPC对象(03 - mar - 2023上创建10:25:44):- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -采样时间:0.1(秒)预测地平线:10控制层:2植物模型:- - - - - - - - - - - - - - - - 1操纵变量(s) - - > | 4州| | | - - > 1测量输出(s) 0测量扰动(s) - - >输入| 1 | | | - - > 1无边无际的输出(s) 0无边无际的干扰(s) - - > | | 2输出- - - - - - - - - - - - - - - -指数:(输入向量)操纵变量:[1](输出向量)测量输出:[1]无边无际的输出:[2]干扰和噪声模型:输出扰动模型:默认(类型”getoutdist (mpcobj)”)测量噪声模型:默认(缩放后单位增益)重量:ManipulatedVariables: 0 ManipulatedVariablesRate: 0.1000 OutputVariables: 0.1000 [0] ECR: 10000状态估计:默认的卡尔曼滤波器类型(“getEstimator (mpcobj)”)约束:-220 < = 1/2 MV1 (V) < = 220, 1/2 MV1 /速度(V)是无约束,MO1 (rad)无约束-78.54 < = UO1 (Nm) (t + 1) < = 78.54 - -78.54 < = UO1 (Nm) (t + 2) < = 78.54 - -78.54 < = UO1 (Nm) (t + 3) < = 78.54 UO1 (Nm) (t + 4)是无约束使用内置的“激活集”与120年MaxIterations QP解算器。

控制器作用于植物4州,1输入(电压)和2输出信号(角和扭矩)和具有以下规格:

  • 成本函数为被控变量权重,被控变量率和输出变量是0,分别为0.1和0.1 [0]。

  • 被操纵的变量约束-220 v和220 v之间。

  • 被控变量率不受限制。

  • 第一个输出变量(角)是不受约束的,但第二个(转矩)是限制在-78.54和78.54 Nm之间在前三个预测时间在第四步步骤和无约束。

注意,对于强化学习唯一的约束规范预测时间的第一步将使用自奖励计算一个时间步。

生成奖励函数

生成奖励函数代码的规范货币政策委员会对象使用generateRewardFunction。在MATLAB编辑器中显示的代码。

generateRewardFunction (mpcobj)

生成的奖励奖励设计函数是一个起点。您可以修改函数不同的罚函数的选择和调整权重。对于这个示例,对所生成的代码进行以下更改:

  • 规模的原始成本权重QyQmvrate的一个因素5010分别。

  • 规模的惩罚权重王寅,WmvWmvrate的一个因素1)依照,1 e - 31 e - 3分别。

  • 默认的外部罚函数方法一步。改变的方法二次

更改后,成本和惩罚规范应该如下:

Qy = 50 * 0.1 [0];Qmv = 0;Qmvrate = 10 * 0.1;王寅= 1依照* [1];Wmv = 1 e - 3;Wmvrate = 1 e - 3;Py =王寅* exteriorPenalty (y, ymin ymax,“二次”);Pmv = Wmv * exteriorPenalty (mv, mvmin mvmax,“二次”);Pmvrate = Wmvrate * exteriorPenalty (mv-lastmv、mvratemin mvratemax,“二次”);

对于这个示例,修改后的代码已经被保存在文件的MATLAB函数rewardFunctionMpc.m。显示生成的回报函数。

类型rewardFunctionMpc.m
函数奖励= rewardFunctionMpc (y, refy, mv, refmv lastmv) % rewardFunctionMpc从MPC规范产生回报。% % % %的描述输入参数:y:输出变量从植物k + 1% refy步:参考输出变量k + 1% mv步:被控变量在k % refmv步:参考被控变量在k % lastmv步:被控变量在k - 1步% %的局限性(MPC和NLMPC): % -奖励计算基于预测地平线的第一步。%因此,信号预览和控制层设置将被忽略。%,不支持在线更新成本和约束。金宝app% - - - - - -自定义不考虑成本和约束规范。%——时变不支持重量和成本约束。金宝app% -混合约束规范不考虑(MPC)。%强化学习工具箱% 02 - jun - 2021 16:05:41 % # codegen从MPC对象% % %规范标准线性范围规定‘州’,‘OutputVariables’,和%的ManipulatedVariables属性ymin =(负-78.5398163397448);ymax = 78.5398163397448[正];mvmin = -220; mvmax = 220; mvratemin = -Inf; mvratemax = Inf; % Scale factors as specified in 'States', 'OutputVariables', and % 'ManipulatedVariables' properties Sy = [6.28318530717959 157.07963267949]; Smv = 440; % Standard cost weights as specified in 'Weights' property Qy = 50 * [0.1 0]; Qmv = 0; Qmvrate = 10 * 0.1; %% Compute cost dy = (refy(:)-y(:)) ./ Sy'; dmv = (refmv(:)-mv(:)) ./ Smv'; dmvrate = (mv(:)-lastmv(:)) ./ Smv'; Jy = dy' * diag(Qy.^2) * dy; Jmv = dmv' * diag(Qmv.^2) * dmv; Jmvrate = dmvrate' * diag(Qmvrate.^2) * dmvrate; Cost = Jy + Jmv + Jmvrate; %% Penalty function weight (specify nonnegative) Wy = 1e-2 * [1 1]; Wmv = 1e-3; Wmvrate = 1e-3; %% Compute penalty % Penalty is computed for violation of linear bound constraints. % % To compute exterior bound penalty, use the exteriorPenalty function and % specify the penalty method as 'step' or 'quadratic'. % % Alternatively, use the hyperbolicPenalty or barrierPenalty function for % computing hyperbolic and barrier penalties. % % For more information, see help for these functions. % % Set Pmv value to 0 if the RL agent action specification has % appropriate 'LowerLimit' and 'UpperLimit' values. Py = Wy * exteriorPenalty(y,ymin,ymax,'quadratic'); Pmv = Wmv * exteriorPenalty(mv,mvmin,mvmax,'quadratic'); Pmvrate = Wmvrate * exteriorPenalty(mv-lastmv,mvratemin,mvratemax,'quadratic'); Penalty = Py + Pmv + Pmvrate; %% Compute reward reward = -(Cost + Penalty); end

集成这个奖励功能,打开MATLAB仿真软件模型中的功能块。金宝app

open_system (“rl_motor /奖励函数”)

附加功能使用以下代码并保存模型。

r = rewardFunctionMpc (y, refy, mv, refmv lastmv);

MATLAB功能块将执行rewardFunctionMpc.m在模拟。

对于这个示例,MATLAB功能块已经修改并保存。

创造一个强化学习环境

环境动力学建模伺服机构子系统。对于这个环境,

  • 参考信号的观测(角和扭矩),输出变量(角和扭矩),和他们的积分时间从过去的3步骤。角度和扭矩信号归一化乘以增益(0.1 - 1 /τ)

  • 行动是电压 V 应用于伺服电动机。动作之间的价值是有限的-220年220年

  • 样品时间是 T 年代 = 0 1 年代

  • 仿真时间 T f = 20. 年代

指定仿真总时间和样品时间。

Tf = 20;t = 0.1;

对环境创建的观察和操作规范。

numObs = 24;numAct = 1;oinfo = rlNumericSpec ([numObs 1]);ainfo = rlNumericSpec (numAct [1],LowerLimit = -220,UpperLimit = 220);

创建使用强化学习环境rl金宝appSimulinkEnv函数。

黑色=“rl_motor / RL代理”;env = rl金宝appSimulinkEnv (mdl,黑色,oinfo ainfo);

创建一个强化学习代理

修复再现性的随机种子。

rng (0)

在这个例子中使用的代理是twin-delayed深决定性策略梯度(TD3)代理。TD3代理使用两个参数化核反应能量函数近似者估计价值(即预期的长期累积奖励)的政策。模型中的参数化核反应能量函数都批评,使用两个输入神经网络(观察和行动)和一个输出(政策的价值当采取特定行动的状态对应于给定的观察)。TD3代理的更多信息,请参阅Twin-Delayed深确定性(TD3)政策梯度代理

定义每个网络路径层对象数组。将名称分配给每条路径的输入和输出层。这些名字让你连接路径,然后明确关联网络的输入和输出通道层与适当的环境。

mainPath = [featureInputLayer (numObs) fullyConnectedLayer (128) concatenationLayer(1、2、名称=“concat”)reluLayer fullyConnectedLayer (64) reluLayer fullyConnectedLayer (1)];actionPath = [featureInputLayer numAct fullyConnectedLayer (Name =“fc_act”));%创建layerGraph对象并添加层criticNet = layerGraph (mainPath);criticNet = addLayers (criticNet actionPath);%连接层criticNet = connectLayers (criticNet,“fc_act”,“concat / in2”);

评论家网络结构。

情节(criticNet);

图包含一个坐标轴对象。坐标轴graphplot类型的对象包含一个对象。

使用创建评论家函数对象rlQValueFunction。评论家函数对象封装了批评家通过环绕评论家深刻的神经网络。确保批评人士有不同的初始权重,显式初始化每个网络之前使用它们来创建批评。

%将神经网络转换成一个dlnetwork对象没有初始化网络criticdlNet = dlnetwork (criticNet,初始化= false);%为TD3代理创建两个评论家函数摘要= rlQValueFunction(初始化(criticdlNet), oinfo ainfo);critic2 = rlQValueFunction(初始化(criticdlNet), oinfo ainfo);

TD3代理学习参数化确定性政策连续动作空间,由一个连续的学习确定的演员。这个演员需要当前观测作为输入并返回输出一个观察的行动是一个确定性的函数。

模型中的参数化政策的演员,使用一个输入神经网络层(接收环境观察频道的内容,按照obsInfo)和一个输出层(返回行动对环境行动通道,是指定的ainfo)。

层的网络定义为一个数组对象。

actorNet = [featureInputLayer (numObs) fullyConnectedLayer (128) reluLayer fullyConnectedLayer (64) reluLayer fullyConnectedLayer (numAct)];

情节演员网络。

情节(layerGraph (actorNet));

图包含一个坐标轴对象。坐标轴graphplot类型的对象包含一个对象。

创建一个确定的演员函数负责代理的建模策略。有关更多信息,请参见rlContinuousDeterministicActor

actordlNet = dlnetwork (actorNet);演员= rlContinuousDeterministicActor (actordlNet oinfo ainfo);

使用指定代理选项rlTD3AgentOptions。代理列车从一种体验缓冲区的最大容量1 e6通过随机选择mini-batches的大小256年。折现系数0.995有利于长期的回报。

agentOpts = rlTD3AgentOptions (SampleTime = Ts,DiscountFactor = 0.995,ExperienceBufferLength = 1 e6,MiniBatchSize = 256);

指定优化器选择演员和批判功能。对于这个示例,您将选择一个学习的速度1 e - 3和一个梯度阈值1演员和批评。

%评论家优化器选择idx = 1:2 agentOpts.CriticOptimizerOptions (idx)。LearnRate = 1 e - 3;agentOpts.CriticOptimizerOptions (idx)。GradientThreshold = 1;结束%的演员优化器选择agentOpts.ActorOptimizerOptions。LearnRate = 1 e - 3;agentOpts.ActorOptimizerOptions。GradientThreshold = 1;

在培训过程中,代理探索行动空间使用高斯行动噪声模型。设置噪声的标准差和衰变率使用ExplorationModel财产。噪声有一个初始的标准差One hundred.指数衰减的速度1 e-5,直到达到最低限度的价值1 e - 3这有利于勘探向开始后期的培训与开发。

agentOpts.ExplorationModel。StandardDeviationMin = 1 e - 3;agentOpts.ExplorationModel。StandardDeviation = 100;agentOpts.ExplorationModel。StandardDeviationDecayRate = 1 e-5;

创建TD3代理使用演员和评论家表示。TD3代理的更多信息,请参阅rlTD3Agent

代理= rlTD3Agent(演员,[摘要,critic2], agentOpts);

火车代理

培训代理商,首先使用指定培训选项rlTrainingOptions。对于这个示例,使用以下选项:

  • 运行每个培训5000年集,每集持久的最多装天花板(Tf / Ts)时间的步骤。

  • 停止训练当代理接收到平均累积奖励大于720.连续集。在这一点上,代理可以跟踪参考信号。

trainOpts = rlTrainingOptions (MaxEpisodes = 5000,MaxStepsPerEpisode =装天花板(Tf / Ts),StopTrainingCriteria =“AverageReward”,StopTrainingValue = 7,ScoreAveragingWindowLength = 20);

火车代理使用火车函数。培训这个代理是一个计算密集型的过程可能需要几分钟才能完成。节省时间在运行这个例子中,加载一个pretrained代理设置doTraining。训练自己代理,集doTraining真正的

doTraining = false;如果doTraining trainResult =火车(代理,env, trainOpts);其他的负载(“rlDCServomotorTD3Agent.mat”)结束

培训的快照进步是如下图所示。你可以期待不同的结果由于训练过程中固有的随机性。

验证控制器响应

验证培训代理的性能,模拟模型和视图的响应范围块。强化学习代理能够跟踪参考角而满足约束力矩和电压。

sim (mdl);

版权2021 - 2023 MathWorks公司. .

另请参阅

功能

对象

相关的例子

更多关于