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