主要内容gydF4y2Ba

强化学习培训代理约束执行gydF4y2Ba

这个例子展示了如何训练强化学习(RL)代理行为限制使用约束执行块。该块计算修改控制行动接近动作输出的代理范围受到约束和行动。强化学习培训代理需要强化学习工具箱™软件。gydF4y2Ba

在本例中,代理的目的是将一个绿色的球尽可能接近目标位置的改变一个红色球[1]。gydF4y2Ba

绿球的动力学速度gydF4y2Ba vgydF4y2Ba 定位gydF4y2Ba xgydF4y2Ba 由牛顿定律与小阻尼系数gydF4y2Ba τgydF4y2Ba 。gydF4y2Ba

1gydF4y2Ba 年代gydF4y2Ba (gydF4y2Ba τgydF4y2Ba 年代gydF4y2Ba +gydF4y2Ba 1gydF4y2Ba )gydF4y2Ba 。gydF4y2Ba

球的可行域的位置gydF4y2Ba 0gydF4y2Ba ≤gydF4y2Ba xgydF4y2Ba ≤gydF4y2Ba 1gydF4y2Ba 和绿球的速度范围是有限的gydF4y2Ba (gydF4y2Ba - - - - - -gydF4y2Ba 1gydF4y2Ba ,gydF4y2Ba 1gydF4y2Ba ]gydF4y2Ba 。gydF4y2Ba

目标红球的位置均匀随机的整个范围gydF4y2Ba (gydF4y2Ba 0gydF4y2Ba ,gydF4y2Ba 1gydF4y2Ba ]gydF4y2Ba 。的代理只能观察噪声估计目标位置。gydF4y2Ba

设置随机种子和配置模型参数gydF4y2Ba

%设置随机种子gydF4y2Barng (gydF4y2Ba“默认”gydF4y2Ba)gydF4y2Ba%的参数gydF4y2Ba电视= 0.8;gydF4y2Ba%样本时间可视化工具gydF4y2Bat = 0.1;gydF4y2Ba%样本时间控制器gydF4y2Baτ= 0.01;gydF4y2Ba%绿色球阻尼常数gydF4y2BavelLimit = 1;gydF4y2Ba%绿色球最大速度gydF4y2Bas0 = 200;gydF4y2Ba%随机种子gydF4y2Bas1 = 100;gydF4y2Ba%随机种子gydF4y2Bax0 = 0.2;gydF4y2Ba%初始位置的球gydF4y2Ba

创建环境和代理收集数据gydF4y2Ba

在这个例子中,约束函数使用一个训练有素的深层神经网络表示。来训练网络,首先必须从环境中收集的训练数据。gydF4y2Ba

要做到这一点,首先创建一个RL环境使用gydF4y2BarlBallOneDimgydF4y2Ba模型。这个模型适用于随机的外部行动通过RL代理阻止环境。gydF4y2Ba

mdl =gydF4y2Ba“rlBallOneDim”gydF4y2Ba;open_system (mdl)gydF4y2Ba

环境子系统执行以下步骤。gydF4y2Ba

  • 输入速度适用于环境模型和生成输出结果观察gydF4y2Ba

  • 计算培训奖励gydF4y2Ba rgydF4y2Ba =gydF4y2Ba (gydF4y2Ba 1gydF4y2Ba - - - - - -gydF4y2Ba 10gydF4y2Ba (gydF4y2Ba xgydF4y2Ba - - - - - -gydF4y2Ba xgydF4y2Ba rgydF4y2Ba )gydF4y2Ba 2gydF4y2Ba ]gydF4y2Ba +gydF4y2Ba ,在那里gydF4y2Ba xgydF4y2Ba rgydF4y2Ba 表示红球的位置gydF4y2Ba

  • 设置终止信号gydF4y2Ba结束gydF4y2Ba来gydF4y2Ba真正的gydF4y2Ba如果球的位置违反约束gydF4y2Ba 0gydF4y2Ba ≤gydF4y2Ba xgydF4y2Ba ≤gydF4y2Ba 1gydF4y2Ba

对于这个模型,观察环境包括位置和速度的绿球和噪声测量的红球的位置。定义一个连续观测空间这三个值。gydF4y2Ba

obsInfo = rlNumericSpec (1 [3]);gydF4y2Ba

行动代理适用于绿色的球是它的速度。创建一个连续的行为空间和应用所需的速度限制。gydF4y2Ba

actInfo = rlNumericSpec ([1],gydF4y2Ba“LowerLimit”gydF4y2Ba-velLimit,gydF4y2Ba“UpperLimit”gydF4y2Ba,velLimit);gydF4y2Ba

创建一个RL环境这个模型。gydF4y2Ba

agentblk = [mdlgydF4y2Ba' / RL代理'gydF4y2Ba];env = rl金宝appSimulinkEnv (mdl agentblk、obsInfo actInfo);gydF4y2Ba

指定一个复位函数,随机初始化每个训练集或环境的模拟。gydF4y2Ba

env。ResetFcn = @(在)localResetFcn(的);gydF4y2Ba

接下来,创建一个DDPG强化学习代理,支持连续操作和观察,使用金宝appgydF4y2BacreateDDPGAgentBallgydF4y2Bahelper函数。这个函数创建评论家和演员表示基于行动和观测规范和使用表示创建一个DDPG代理。gydF4y2Ba

代理= createDDPGAgentBall (Ts、obsInfo actInfo);gydF4y2Ba

在gydF4y2BarlBallOneDimgydF4y2Ba模型,RL代理块不产生行动。相反,它被配置为通过一个随机的外部行为环境。使用数据收集模型的目的的RL代理块是确保环境模型,行动和观测信号配置,和模型重置函数中使用数据收集与后续代理培训期间使用。gydF4y2Ba

学习约束函数gydF4y2Ba

在这个例子中,球位置信号gydF4y2Ba xgydF4y2Ba kgydF4y2Ba +gydF4y2Ba 1gydF4y2Ba 必须满足gydF4y2Ba 0gydF4y2Ba ≤gydF4y2Ba xgydF4y2Ba kgydF4y2Ba +gydF4y2Ba 1gydF4y2Ba ≤gydF4y2Ba 1gydF4y2Ba 。允许一些松弛,约束集gydF4y2Ba 0gydF4y2Ba 。gydF4y2Ba 1gydF4y2Ba ≤gydF4y2Ba xgydF4y2Ba kgydF4y2Ba +gydF4y2Ba 1gydF4y2Ba ≤gydF4y2Ba 0gydF4y2Ba 。gydF4y2Ba 9gydF4y2Ba 。gydF4y2Ba 从速度动态模型的位置有一个很小的阻尼常数,因此可以近似gydF4y2Ba xgydF4y2Ba kgydF4y2Ba +gydF4y2Ba 1gydF4y2Ba ≈gydF4y2Ba xgydF4y2Ba kgydF4y2Ba +gydF4y2Ba hgydF4y2Ba (gydF4y2Ba xgydF4y2Ba kgydF4y2Ba )gydF4y2Ba ugydF4y2Ba kgydF4y2Ba 。因此,绿色球由以下给出的约束方程。gydF4y2Ba

(gydF4y2Ba xgydF4y2Ba kgydF4y2Ba - - - - - -gydF4y2Ba xgydF4y2Ba kgydF4y2Ba ]gydF4y2Ba +gydF4y2Ba (gydF4y2Ba hgydF4y2Ba (gydF4y2Ba xgydF4y2Ba kgydF4y2Ba )gydF4y2Ba - - - - - -gydF4y2Ba hgydF4y2Ba (gydF4y2Ba xgydF4y2Ba kgydF4y2Ba )gydF4y2Ba ]gydF4y2Ba ugydF4y2Ba kgydF4y2Ba ≤gydF4y2Ba (gydF4y2Ba 0gydF4y2Ba 。gydF4y2Ba 9gydF4y2Ba - - - - - -gydF4y2Ba 0gydF4y2Ba 。gydF4y2Ba 1gydF4y2Ba ]gydF4y2Ba

约束执行块接受约束的形式gydF4y2Ba fgydF4y2Ba xgydF4y2Ba +gydF4y2Ba ggydF4y2Ba xgydF4y2Ba ugydF4y2Ba ≤gydF4y2Ba cgydF4y2Ba 。上述方程,这个约束函数的系数如下。gydF4y2Ba

fgydF4y2Ba xgydF4y2Ba =gydF4y2Ba (gydF4y2Ba xgydF4y2Ba kgydF4y2Ba - - - - - -gydF4y2Ba xgydF4y2Ba kgydF4y2Ba ]gydF4y2Ba ,gydF4y2Ba ggydF4y2Ba xgydF4y2Ba =gydF4y2Ba (gydF4y2Ba hgydF4y2Ba (gydF4y2Ba xgydF4y2Ba kgydF4y2Ba )gydF4y2Ba - - - - - -gydF4y2Ba hgydF4y2Ba (gydF4y2Ba xgydF4y2Ba kgydF4y2Ba )gydF4y2Ba ]gydF4y2Ba ,gydF4y2Ba cgydF4y2Ba =gydF4y2Ba (gydF4y2Ba 0gydF4y2Ba 。gydF4y2Ba 9gydF4y2Ba - - - - - -gydF4y2Ba 0gydF4y2Ba 。gydF4y2Ba 1gydF4y2Ba ]gydF4y2Ba

这个函数gydF4y2Ba hgydF4y2Ba (gydF4y2Ba xgydF4y2Ba kgydF4y2Ba )gydF4y2Ba 由深近似所收集的数据训练神经网络模拟环境内的RL代理。学习未知函数gydF4y2Ba hgydF4y2Ba (gydF4y2Ba xgydF4y2Ba kgydF4y2Ba )gydF4y2Ba ,RL代理通过一个随机的外部环境行动中均匀分布的范围gydF4y2Ba (gydF4y2Ba - - - - - -gydF4y2Ba 1gydF4y2Ba ,gydF4y2Ba 1gydF4y2Ba ]gydF4y2Ba 。gydF4y2Ba

收集数据,使用gydF4y2BacollectDataBallgydF4y2Bahelper函数。这个函数模拟环境和代理和收集产生的输入和输出数据。由此产生的训练数据有三列:gydF4y2Ba xgydF4y2Ba kgydF4y2Ba ,gydF4y2Ba ugydF4y2Ba kgydF4y2Ba ,gydF4y2Ba xgydF4y2Ba kgydF4y2Ba +gydF4y2Ba 1gydF4y2Ba 。gydF4y2Ba

对于这个示例,负载precollected训练数据。自己收集数据,设置gydF4y2BacollectDatagydF4y2Ba来gydF4y2Ba真正的gydF4y2Ba。gydF4y2Ba

collectData = false;gydF4y2Ba如果gydF4y2BacollectData数= 1050;data = collectDataBall (env,代理,数);gydF4y2Ba其他的gydF4y2Ba负载gydF4y2BatrainingDataBallgydF4y2Ba数据gydF4y2Ba结束gydF4y2Ba

火车深神经网络近似约束函数使用gydF4y2BatrainConstraintBallgydF4y2Bahelper函数。这个函数格式的数据训练然后创建和火车深神经网络。训练一个深层神经网络需要深度学习工具箱™软件。gydF4y2Ba

对于这个示例,以确保再现性、负载pretrained网络。自己训练网络,集gydF4y2BatrainConstraintgydF4y2Ba来gydF4y2Ba真正的gydF4y2Ba。gydF4y2Ba

trainConstraint = false;gydF4y2Ba如果gydF4y2BatrainConstraint网络= trainConstraintBall(数据);gydF4y2Ba其他的gydF4y2Ba负载gydF4y2BatrainedNetworkBallgydF4y2Ba网络gydF4y2Ba结束gydF4y2Ba

下面的图显示了一个示例的培训进度。gydF4y2Ba

验证训练神经网络使用gydF4y2BavalidateNetworkBallgydF4y2Bahelper函数。这个函数处理输入使用训练有素的深层神经网络训练数据。然后比较了网络输出与训练输出并计算根均方误差(RMSE)。gydF4y2Ba

validateNetworkBall(数据、网络)gydF4y2Ba
测试数据RMSE = 9.996700 e-02gydF4y2Ba

小RMSE值表示网络成功地学会了约束函数。gydF4y2Ba

火车与约束执行代理gydF4y2Ba

训练与约束执行代理,使用gydF4y2BarlBallOneDimWithConstraintgydF4y2Ba模型。这个模型约束代理人的行为然后将其应用到环境。gydF4y2Ba

mdl =gydF4y2Ba“rlBallOneDimWithConstraint”gydF4y2Ba;open_system (mdl)gydF4y2Ba

查看约束实现,打开约束子系统。在这里,训练神经网络近似gydF4y2Ba hgydF4y2Ba (gydF4y2Ba xgydF4y2Ba kgydF4y2Ba )gydF4y2Ba ,约束执行块强制约束函数和速度。gydF4y2Ba

对于这个示例如下约束执行块参数设置。gydF4y2Ba

  • 数量的限制gydF4y2Ba- - - - - -gydF4y2Ba2gydF4y2Ba

  • 数量的行为gydF4y2Ba- - - - - -gydF4y2Ba1gydF4y2Ba

  • 约束绑定gydF4y2Ba- - - - - -gydF4y2Ba[0.9,-0.1]gydF4y2Ba

使用这个模型创建一个RL环境。观察和操作规范与用于前面的数据收集的环境。gydF4y2Ba

agentblk = [mdlgydF4y2Ba' / RL代理'gydF4y2Ba];env = rl金宝appSimulinkEnv (mdl agentblk、obsInfo actInfo);env。ResetFcn = @(在)localResetFcn(的);gydF4y2Ba

为培训代理指定选项。火车RL代理300集,每集300步。gydF4y2Ba

trainOpts = rlTrainingOptions (gydF4y2Ba…gydF4y2Ba“MaxEpisodes”gydF4y2Ba,300,gydF4y2Ba…gydF4y2Ba“MaxStepsPerEpisode”gydF4y2Ba,300,gydF4y2Ba…gydF4y2Ba“详细”gydF4y2Ba假的,gydF4y2Ba…gydF4y2Ba“阴谋”gydF4y2Ba,gydF4y2Ba“训练进步”gydF4y2Ba);gydF4y2Ba

培训代理。培训是一个耗时的过程。对于这个示例,加载一个pretrained代理使用gydF4y2BaloadAgentParamsgydF4y2Bahelper函数。训练自己代理,集gydF4y2BatrainAgentgydF4y2Ba来gydF4y2Ba真正的gydF4y2Ba。gydF4y2Ba

trainAgent = false;gydF4y2Ba如果gydF4y2BatrainAgent trainingStats =火车(代理,env, trainOpts);gydF4y2Ba其他的gydF4y2BaloadAgentParams(代理,gydF4y2Ba“rlAgentBallParams”gydF4y2Ba)gydF4y2Ba结束gydF4y2Ba

下图显示了训练的结果。培训过程收敛于一个好的代理在20集。gydF4y2Ba

自gydF4y2Ba总数量的步骤gydF4y2Ba=的产物gydF4y2Ba集数量gydF4y2Ba和gydF4y2Ba集的步骤gydF4y2Ba,每一个训练集运行到最后没有提前终止。因此,约束执行块确保球的位置gydF4y2Ba xgydF4y2Ba 从不违背约束gydF4y2Ba 0gydF4y2Ba ≤gydF4y2Ba xgydF4y2Ba ≤gydF4y2Ba 1gydF4y2Ba 。gydF4y2Ba

模拟训练的代理使用gydF4y2BasimWithTrainedAgentBallgydF4y2Bahelper函数。gydF4y2Ba

simWithTrainedAgentBall (env、代理)gydF4y2Ba

图球一个昏暗的包含一个坐标轴对象。坐标轴对象包含3线类型的对象,长方形。gydF4y2Ba

图包含2轴对象。坐标轴对象1包含2线类型的对象。坐标轴对象与时间序列图标题2:结束包含一个楼梯类型的对象。gydF4y2Ba

成功代理跟踪红球的位置。gydF4y2Ba

火车代理没有约束执行gydF4y2Ba

看到训练的好处与约束执行代理,你可以训练代理没有约束和比较训练结果约束执行情况。gydF4y2Ba

培训代理商没有约束,使用gydF4y2BarlBallOneDimWithoutConstraintgydF4y2Ba模型。这个模型适用于直接从代理的操作环境。gydF4y2Ba

mdl =gydF4y2Ba“rlBallOneDimWithoutConstraint”gydF4y2Ba;open_system (mdl)gydF4y2Ba

使用这个模型创建一个RL环境。gydF4y2Ba

agentblk = [mdlgydF4y2Ba' / RL代理'gydF4y2Ba];env = rl金宝appSimulinkEnv (mdl agentblk、obsInfo actInfo);env。ResetFcn = @(在)localResetFcn(的);gydF4y2Ba

创建一个新的DDPG代理培训。这个代理有相同的配置中使用的代理之前的训练。gydF4y2Ba

代理= createDDPGAgentBall (Ts、obsInfo actInfo);gydF4y2Ba

火车代理使用相同的训练选项约束执法情况。对于这个示例,与之前的训练,加载一个pretrained代理。训练自己代理,集gydF4y2BatrainAgentgydF4y2Ba为true。gydF4y2Ba

trainAgent = false;gydF4y2Ba如果gydF4y2BatrainAgent trainingStats2 =火车(代理,env, trainOpts);gydF4y2Ba其他的gydF4y2BaloadAgentParams(代理,gydF4y2Ba“rlAgentBallCompParams”gydF4y2Ba)gydF4y2Ba结束gydF4y2Ba

下图显示了训练的结果。培训过程收敛于一个好代理后50集。这一点之后,代理一些情节表现不佳,例如在140年和230年。gydF4y2Ba

自gydF4y2Ba总数量的步骤gydF4y2Ba小于产品的gydF4y2Ba集数量gydF4y2Ba和gydF4y2Ba集的步骤gydF4y2Ba培训包括事件,提前终止由于约束违反。gydF4y2Ba

模拟训练的代理。gydF4y2Ba

simWithTrainedAgentBall (env、代理)gydF4y2Ba

图球一个昏暗的包含一个坐标轴对象。坐标轴对象包含3线类型的对象,长方形。gydF4y2Ba

图包含2轴对象。坐标轴对象1包含2线类型的对象。坐标轴对象与时间序列图标题2:结束包含一个楼梯类型的对象。gydF4y2Ba

代理成功跟踪红球的位置与稳态抵消比代理培训与约束。gydF4y2Ba

结论gydF4y2Ba

在这个例子中,训练的RL代理约束执行块确保行动应用环境不产生约束违反。因此,培训过程快速收敛于一个好的代理商。训练同一代理没有约束产生的慢收敛性和性能降低。gydF4y2Ba

bdclose (gydF4y2Ba“rlBallOneDim”gydF4y2Ba)bdclose (gydF4y2Ba“rlBallOneDimWithConstraint”gydF4y2Ba)bdclose (gydF4y2Ba“rlBallOneDimWithoutConstraint”gydF4y2Ba)关闭(gydF4y2Ba球一个昏暗的gydF4y2Ba)gydF4y2Ba

当地的重置功能gydF4y2Ba

函数gydF4y2Ba= localResetFcn(中)gydF4y2Ba%重置功能gydF4y2Ba= setVariable (,gydF4y2Ba“x0”gydF4y2Ba,兰德);= setVariable (,gydF4y2Ba“s0”gydF4y2Ba兰迪(5000));= setVariable (,gydF4y2Ba“s1 'gydF4y2Ba兰迪(5000));gydF4y2Ba结束gydF4y2Ba

引用gydF4y2Ba

[1]Dalal、加萨•Dvijotham,梅Vecerik,托德•海丝特Cosmin Paduraru,和Yuval Tassa。“安全探索在连续行动空间。”Preprint, submitted January 26, 2018.https://arxiv.org/abs/1801.08757gydF4y2Ba

另请参阅gydF4y2Ba

块gydF4y2Ba

相关的话题gydF4y2Ba