火车定制等方面代理
这个例子展示了如何培养一个定制的线性二次调节等)代理控制离散时间线性系统建模在MATLAB®。
建立线性系统环境
这个例子的强化学习环境是一个离散时间线性系统。动态的系统
反馈控制律
成本控制的目标是减少二次: 。
在这个例子中,系统矩阵
= (1.05,0.05,0.05,0.05,1.05,0.05,0,0.05,1.05);B = [0.1, 0, 0.2, 0.1, 0.5, 0, 0, 0, 0.5);
二次成本矩阵:
Q = [10 3 1; 3、5、4、1、4、9];R = 0.5 *眼(3);
这种环境下,奖励时间 是由 ,这是负的二次成本。因此,回报最大化最小化成本。初始条件设置随机的复位功能。
创建这个线性系统的MATLAB环境接口和奖励。的myDiscreteEnv
通过定义定制函数创建一个环境一步
和重置
功能。创建这样一个自定义环境的更多信息,见创建MATLAB环境中使用自定义函数。
env = myDiscreteEnv (A, B, Q, R);
解决随机发生器再现性的种子。
rng (0)
创建自定义等代理
等方面的问题,Q-function对于一个给定的控制增益 可以被定义为 ,在那里 是一个对称正定矩阵。
最大限度的控制律 是 ,反馈增益 。
矩阵 包含 不同的元素值, 是州的数量的总和和输入的数量。表示 向量对应于这些 元素,非对角元素的地方 乘以2。
代表的Q-function ,在那里 包含参数才能学到。
,在那里 二次函数的基础吗 和 。
等代理始于一个稳定控制器 。得到一个初始稳定控制器,闭环系统的极点 在单位圆。
K0 =地方(A, B, [0.4, 0.8, 0.5]);
创建一个自定义代理,您必须创建一个子类rl.agent.CustomAgent
抽象类。定制等代理的定义自定义子类LQRCustomAgent
。有关更多信息,请参见创建自定义强化学习代理。创建自定义等代理使用
,
,
。代理不需要信息系统矩阵
和
。
代理= LQRCustomAgent (Q, R, K0);
对于这个示例,设置代理贴现因子。使用贴现未来的奖励,将折现系数设置为小于1的值。
代理。γ= 1;
由于线性系统有三种状态和三个输入,可学的参数的数量 。以确保代理的令人满意的性能,参数估计的数量 大于两倍的数量可学的参数。在本例中,值 。
代理。EstimateNum = 45;
得到良好的估计结果 ,你必须持续兴奋的探索模式应用于系统。在这个例子中,鼓励探索通过添加白噪声模型控制器输出: 。一般来说,探索模型依赖于系统模型。
火车代理
培训代理商,首先指定培训选项。对于这个示例,使用以下选项。
运行每个训练集
10
集,每集持久的最多50
时间的步骤。显示命令行显示(设置
详细的
选项)和禁用培训进展(设置在事件管理器对话框情节
选项)。
有关更多信息,请参见rlTrainingOptions
。
trainingOpts = rlTrainingOptions (…“MaxEpisodes”10…“MaxStepsPerEpisode”,50岁,…“详细”,真的,…“阴谋”,“没有”);
火车代理使用火车
函数。
trainingStats =火车(代理,env, trainingOpts);
插曲:1/10 |集奖励:-51.67 |集步骤:50 |平均奖励:-51.67 |步骤数:50集:2/10 |集奖赏:-30.29 |集步骤:50 |平均奖励:-40.98 |步骤数:100集:3/10 |集奖赏:-24.49 |集步骤:50 |平均奖励:-35.48 |步骤数:150集:4/10 |集奖赏:-18.92 |集步骤:50 |平均奖励:-31.34 |步骤数:200集:5/10 |集奖赏:-5.92 |集步骤:50 |平均奖励:-26.26 |步骤数:250集:6/10 |集奖赏:-33.73 |集步骤:50 |平均奖励:-22.67 |步骤数:300集:7/10 |集奖赏:-11.93 |集步骤:50 |平均奖励:-19.00 |步骤数:350集:8/10 |集奖赏:-29.12 |集步骤:50 |平均奖励:-19.93 |步骤数:400集:9/10 |集奖赏:-20.91 |集步骤:50 |平均奖励:-20.32 |步骤数:450集:10/10 |集奖赏:-9.52 |集步骤:50 |平均奖励:-21.04 |步骤数:500
模拟剂,与最优解进行比较
验证的性能训练有素的特工,在MATLAB环境中模拟它。代理模拟更多的信息,请参阅rlSimulationOptions
和sim卡
。
simOptions = rlSimulationOptions (“MaxSteps”,20);经验= sim (env,代理,simOptions);totalReward =总和(experience.Reward)
totalReward = -30.6482
你可以计算出最优解的使用等方面的问题dlqr
函数。
[Koptimal P] = dlqr (A, B, Q, R);
给出了最优奖励 。
x0 = experience.Observation.obs1.getdatasamples (1);Joptimal = x0 ' * P * x0;
计算误差之间的奖励训练等方面代理和优化等方面的解决方案。
rewardError = totalReward - Joptimal
rewardError = 5.0439 e-07
视图的历史错误的2-norm训练之间的收益等方面代理和优化等方面的解决方案。
%的数量获得更新len = agent.KUpdate;呃= 0 (len, 1);为我= 1:兰%获得规范的错误犯错(i) =规范(agent.KBuffer{我}-Koptimal);结束情节(呃,“b * - - - - - -”)
计算最终的标准误差反馈增益。
gainError =规范(代理。K - Koptimal)
gainError = 2.0161 e-11
总的来说,训练有素的特工发现等方面解决方案接近真正的优化等方面的解决方案。