Ari Biswas,Mathworks
探索如何使用强化学习来解决复杂动态系统(如冗余机器人机械手)中的控制任务。该任务的目标是设计一个控制器,该控制器可以在连接到操纵器末端执行器的平面上平衡乒乓球。基于模型的控制理论,如模型预测控制(MPC)或其他方法,可以通过创建电厂的数学模型来解决此类任务。然而,当对象模型变得复杂时,设计此类控制器可能会变得困难。在这种情况下,无模型强化学习是另一种选择。请参阅有关使用强化学习工具箱的教程™ 创建和培训能够执行球平衡任务的代理,同时对环境中的变化保持鲁棒性。在本教程的最后,您将学习如何创建环境,通过神经网络表示代理,并训练网络达到令人满意的性能。
在本实践课程中,您将学习如何控制机器人操纵器,使用强化学习在平板上平衡球。您将逐步介绍从在Simulink中构建机器人模型到创建和培训强化学习代理的过程。最后,我们将探索几种方法,通过选择不同的算法和训练选项来定制RL代理。万博1manbetx
首先,让我们来看看我们的机械手系统的不同组件。本例中的机器人是Kinova机械臂,它是一个7自由度的机械手,带有夹持器。此图显示了整个系统的建模。该设计是在Simulink中使用Simscape multi-body blocks创建的,专门用于建模和模拟高保真机械系统。该系统的主要结构部件包括Kinova机器人、连接到机器人末端执行器的平面或平板以及可在平板上弹跳或滚动的乒乓球。球的运动是使用六挡关节建模的,但只要有接触,运动也会受到板的限制。球和板之间的接触力使用一个特殊的接触力块来建模,该接触力块的行为基本上类似于弹簧和质量回火系统。万博1manbetx
现在我们可以深入研究每个子系统来更好地理解它们。在项目文件夹中,您可以在模型文件夹中找到Simulink模型。万博1manbetx您可以打开模型,一旦模型打开,您就可以在这些子系统下导航,并查看它们的更多细节。
在机器人子系统中,我们看到机器人手臂的不同部分,但连杆和关节是由一些跳跃多体块表示的。这些组件是通过使用SM导入命令导入CAD几何图形或步骤文件创建的。我们不会详细介绍导入工作流,但在本教程的最后,您会找到更多相关信息。
转动关节——旋转关节块负责连杆之间的运动,在向旋转关节注入扭矩信号后计算运动。对于这个例子,我们让它变得简单只驱动最后两个关节,也就是这里的R6和R7关节。其他关节在某些预定的关节角度保持静止。这些角度是在初始化脚本中指定的,可以在这里找到。可以打开脚本查看系统的不同参数,并在这里自由更改任何您喜欢的内容。
在熟悉了模型之后,让我们来看看控制问题。在这个例子中,任务是使一个乒乓球在盘子上保持平衡。在我们的模拟开始时,球可以从板内的任何位置开始,控制算法应该计算必要的顶部信号,将球推向中心并在那里保持平衡。
可以使用像MPC或其他最优控制方法等流行的控制算法来解决此任务。然而,由于我们需要该算法的工厂的数学模型,例如,当系统复杂时,设计控制器可能变得困难,例如,如果您通过执行所有接头设计整个系统的MPC控制器,则需要计算Jacobians或者为动态写入可能是繁琐过程的转换功能。这是加强学习可以提供用于设计控制器的替代方法的地方。
下面是一些关键概念和强化学习的快速概述。我们将重点关注强化学习的部分,即无模型强化学习。顾名思义,该算法不需要植物的模型,而是通过与植物的重复交互来学习所需的行为。这个图显示了强化学习设置中的标准数据流。设置中的控制器是RL代理。而系统的其余部分,包括机器人板,球,以及它们的驱动和传感组件,被称为环境。
代理通过提供一组由a表示的动作信号与环境进行交互。环境使用这些信号进入下一个状态S,该状态S向下呈现给代理。代理还从环境中接收到另一个称为奖励的信号R,这是一个反馈,说明选择的行动是否适合控制测试。
学习算法的目标是通过代理和环境的重复交互,随着时间的推移使这种回报最大化。在本教程中,我们将使用深度神经网络表示代理。您可以在MATLAB文档中找到有关设计神经网络的更多信息。但是现在,让我们看看如何使用强化学习工具箱来解决这个问题。
当您回到MATLAB窗口时,从这里的项目文件夹中打开实时脚本。该脚本包含用于强化学习的标准命令行工作流。我们首先运行一个启动脚本,它将必要的文件添加到MATLAB文件中,并在基本工作区中创建必要的变量。要运行脚本,您可以单击这里的run部分按钮,这也会打开Simulink模型。万博1manbetx
在这个模型的顶层,您将看到强化学习设置,我们在前面讨论了代理与环境交换数据。让我们导航到环境中并打开观测子系统以查看信号。观测是一组22个信号,代表系统在任何给定时间的状态。这包括驱动关节的位置和速度、球的位置和速度、板四元数和导数的位置和速度、前一时间步的顶部输入,以及球的一些物理参数(如质量和半径)。代理将使用这些观察值计算每个时间步的操作。由于这些信号具有不同的单位,因此其中一些信号与这些比例因子相乘,以便它们与其他信号保持大致相同的范围。这一点很重要,因为这些信号将被输入到神经网络中,而高幅值的信号可能会导致网络的一部分主导并破坏其他信号的影响。如果以某种方式对观测值进行标准化或缩放,网络将训练得更好。
我们还占据方向的正弦和余弦而不是直接使用它们,以避免角度加或减去的不连续5.因为观察空间中的不连续可能导致学习算法会聚得不好。
来自环境的其他信号是奖励信号。让我们花几个小时来了解奖励信号更好。随时步骤的奖励由这里显示的关系给出。由于我们希望代理将球移动到板的中心,因此当球移动到中心时,我们应该提供积极的奖励。这种奖励可能是任何特定状态的最远值,但我们可以通过提供非线性函数形式的形状来提高奖励。
在这种情况下,当球的x和y距离变为0时,我们使用高斯函数奖励代理。在您对代理进行几次培训后,您会发现形状良好的奖励有助于提高培训的收敛性。
除了将球移到中心,我们还希望避免太多的板的方向,这将违反直觉的平衡球。由于这个原因,我们为高板取向角提供了惩罚。当代理使用过多的控制努力时,我们还会给它另一个惩罚。
最后,我们每次步骤都会获得标量奖励的奖励和处罚。这里的说明也很重要,即每个终止奖励函数已经乘以缩放因子,以指定对整体奖励的相对重要性。
来自环境的最后一组信号是关闭信号,并决定应该在什么时候终止模拟。终止可能意味着系统已经达到一个坏的状态,它没有意义进一步模拟。在这种情况下,我们通过比较xy坐标和板块边界来终止模拟,球从板块上掉下来。
让我们回到实时脚本,从Simulink模型创建一个强化学习环境。万博1manbetx首先,您需要为输入和输出创建规范。在我们的例子中,观察和操作空间是连续的,因此可以使用RL数值规范函数来创建如下所示的规范。
创建规范后,可以使用RL Simulink env函数创建环境对象,如下所示。您需要指定Simulink模型名称、通过RL agent块的块路径以及我们之前创建的观察和操作规范。万博1manbetx
训练RL代理的一个重要方面是域随机化。您可以在每一次培训开始时随机设置Simulink环境,方法是提供一个函数,按此处所述重置环境。这种随机化可以帮助代理学习对环境中的变化具有鲁棒性的万博1manbetx策略。
向下滚动到脚本的末尾,查看reset函数。这里有一些参数对随机化很重要比如球的物理参数初始关节角和初始扭矩。你可以随心所欲地在这些参数中引入随机性。但现在,让我们专注于随机化初始版本的球,然后保持其他参数不变。
创建环境后,下一步是在MATLAB中创建强化学习代理。强化学习工具箱中有许多算法可供选择。这些算法适用于离散或连续动作空间,或者两者都适用。在本教程中,您将使用支持连续动作空间的Soft Actor批评家代理。万博1manbetx
下面是对软参与者批评算法的高级解释。蓝色指南代表代理的主要组件。有经验的缓冲区用于存储来自agent环境交互的经验,agent通过使用该缓冲区中的样本数据进行学习。该智能体的学习算法遵循一个参与者和两个批评者的主动批评方法,每个参与者和两个批评者由神经网络表示。
参与者查看环境状态,并根据网络输出的平均值和方差选择行动,如图所示。这种平均不变性定义了行为人的随机策略,并用于计算行为人的行动。在训练过程中,参与者网络的权值通过期望奖励和策略熵之间的权衡来更新。
评论家们坐在演员身后,批评演员的行为,不管他们是好是坏。它们的费率也会定期更新。该算法使用多个批评者来减少Q函数的高估。在本教程的末尾,您可以找到更多关于软演员评论家算法的信息。但是现在,你需要做的就是在MATLAB中创建这个神经网络。其他一切都将由工具箱处理。
现在我们又回到了台词脚本。您可以通过运行本节中的代码来创建神经网络。如图所示,评论家网络由几个完全连接的层和relulayer之间组成。这个网络的输入是agent的观察和动作。输出是Q函数的值。您可以使用同一个评论家网络来创建两个评论家。
演员也以类似的方式建模。它将观察结果作为输入并输出策略分布的平均值和方差。创建演员和批评后,您可以使用RLSacagent功能创建代理,如此所示。如此所示,代理的大多数参数都保持为默认值。所以你不必太担心改变本教程。有关参数类型的完整列表,您可以单击此链接,将带您到MATLAB文档。
一旦创建了代理,最后一步是使用train命令训练算法。您可以指定一些培训选项,例如该代理将接受多长时间的培训,以及培训的股票价值。例如,您可以设置此处显示的最大训练集数量,然后设置训练集的最大步骤。
另一个重要参数是停止训练标准。在本例中,当过去100集的平均奖励达到675或更多时,我们停止了培训。该值是在分析代理在几个训练迭代中的性能后获得的。
要开始训练,可以将这个蓝色训练标志设置为true并执行该节中的代码。软件将花费几秒钟来设置培训,我们将启动一个插曲经理图来跟踪培训进度。
一旦人物启动,你可以从情节中查看训练进度,也可以在机制资源管理器窗口中查看动画。你可以看到代理人试图平衡球,但大部分时间都失败了。这是意料之中的,因为这是训练的开始阶段,代理还没有学到很多东西。
我们还可以从情节中看到,经纪人每集并没有得到太多的奖励。蓝线代表的是每集的奖励,红线代表的是100集窗口内的平均奖励。黄线表示预期的长期奖励。
当代理从经验中学习时,您将看到奖励将增加并收敛到某个值。此时,您可以停止培训并查看代理的性能。要停止训练,您只需单击此处的停止训练按钮。为了时间的利益,让我们停止训练,继续现场脚本。
下图显示了一个完整的培训课程的快照。这将让你对我们在培训过程中的期望有一个概念。在这个特殊的训练中,经纪人在大约3300集之后达到675的平均奖励。大约花了20个小时才完成。
根据您的系统规格,培训可能需要更少或更长时间。此外,由于过程中存在随机性,因此您的实际结果可能与此处所示的不同。让我们现在加载预先训练的代理以查看此性能。您可以将Dotraining Flag返回为FALSE,以加载保存在MAT文件中的代理。您可以再次运行该部分以加载该文件。
加载代理之后,向下滚动到模拟部分。在这里,您可以根据自己的喜好设置球的初始位置,并使用训练过的代理来模拟这个模型。在这里初始的x和y位置被设为一些非零的值。让我们运行这个部分。现在你可以在动画中看到代理能够成功地使球居中。你可以尝试用不同的初始条件模拟几次。
返回Simulink模型,您可以通过万博1manbetx这些代码块查看球的轨迹和控制输入。如这里所见,X和Y轨迹融合到零或接近零值。我们可以认为这对本教程令人满意。另一方面,行动看起来很嘈杂。为实际目的,我们可能需要考虑行动是否可以处理这些信号。我们可以将其视为未来的分析代理表现的增强。它与我们的奖励功能一致。
以下是一些可用于微调代理商的性能的选项。您可以在环境中随机化其他参数,如球质量和初始速度进行培训。您还可以更改参数和奖励函数,或更改代理超级参数。另一种选择是使用不同的代理算法进行此测试。我们不会在此视频中覆盖这些,但您可以自己尝试并发现更多关于强化学习。
视频到此结束。我们介绍了很多概念,希望这能让您深入了解RL以及如何使用强化学习工具箱解决控制问题。最后,这里有一些资源供您进一步阅读。
你也可以从以下列表中选择一个网站:
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家/地区网站未针对您所在地的访问进行优化。