‘壹’ MPC——理论知识(1)
模型闭穗预测控制重构了追踪轨迹作为优化问题的任务。优化问题的解决方案是最佳的轨迹。模型预测控制涉及模拟不同的执行器输入,预测最终的轨迹并以最小的成本选择该轨迹。当前状态和参考轨迹是已知的。在每个时间步骤中,制动器输入被优化以便最小化预测轨迹的成本。一旦找到最低成本的轨迹,执行第一组致动器命令,其余部分被丢弃,并且在计算新的最佳轨迹时在每个时间步重复。
(1)预测模型:预测模型是模型预测控制的基础。主要功能是根据对象的历史信息和未来输入,预测系统未来的输出。对于模型预测的形式没有严格的限定,状态方程、传递函数这类传统的模型都可以作为预测模型。对于线性稳定系统,阶跃响应、脉冲响应这类非参数模型,也可以直接作为预测模型使用。
(2)滚动优化:预测模型控制通过某一性能指标的最优来确定控制作用,但优化不是一次离线进行,而是反复在线进行的。这就是滚动优化的含义,也是模型预测控制区别于传统最优控制的根本点。
(3)反馈校正:在新的采样时刻,首先检测对象的实际输出,并利用这一实时信息对基于模型的预测结果进行修正,然后进行新的优化。
控制过程中始终存在一条期望轨迹。以时刻k作为当前时刻(坐标系纵轴所在的位置),控制器结合当前的测量值和预测模型,预测系统未来一段时域内 (也被称为预测时域)系统的输出,如曲线2所示。通过求解满足目标函数的以及各种约束的优化问题,得到控制时域 内一系列的控制序列,如图中矩形波4所示(从坐标系纵轴开始),并将该控制序列的第一个元素作为受控对象的实际控制量。当下一个时刻k+1时,重复上述过程,如此滚动地完成一个个带约束的优化问题,以实现对被控对象的持续控制。
根据所采用模型的不同,模型预测控制主要包括动态矩阵控制(DMC)、模型算法控制(MAC)、广义预测控制(GPC)等。同时,在现代控制理论中广泛使用的状态空间模型,同样可以应用于模型预测控制中。
(1)预测方程
首先考虑以下的离散线性化模型:
设定
可以得到一个新的状态空间表达式:
其中
所以
可得:
为了进一步简化计算,做出如下假设:
如果系统预测时域为 ,控制时域为 ,那么预测时域内的状态量和系统输出量可以用以下算式计算:
为了使整个关系更加明确,将系统未来时刻的输出以矩阵的形式表达:
式中:
通过上式可以清楚看到,在预测时域内的状态量和输出量都可以通过系统当前的状态量 和控制时域内的控制增量 计算得到。这也就是模型预测控制算法中“预测”功能的实现。
(2)优化求解
实际上,系统的控制增量是未知的搏仿,只有通过设定合适的优化目标,并对其进行求解,才能得到控制时域内的控制序列。
可以把控制增量作为目标函数的状态量,优化目标函数如下形式:
其中,第一项反映了系统对参考轨线的跟随能力,第二项反映了对控制量平稳变化的要求。Q和R为权重矩阵,整个表达式的功能是使系统能够尽快且平稳地跟踪上期基态纤望的轨迹。同时,在实际控制系统中,往往需要满足系统状态量以及控制量的一些约束,一般如下:
控制量约束:
控制量约束:
输出约束:
上面三个公式,形成了一个完整的优化目标表达式。通过求解这个带约束条件的优化目标,就能得到未来一段时间的控制序列。然而,由于系统的模型是实时改变的,并不能保证每个时刻该优化目标都能得到可行解。因此,有必要对优化目标进行相应的处理。比普遍并且证明有效的方式是在优化目标中加入松弛因子,如下所示:
式中, 为权重系数, 为松弛因子。
将系统输出的状态空间表达式代入优化目标式,并且将预测时域内的输出量偏差表示为:
经过相应的矩阵计算, 可以将优化目标调整为:
式中:
在式中, 为常量,因此模型预测控制在每一步的带约束优化求解问题都等价于求解如下的二次规划问题:
(3)反馈机制
在每个控制周期内完成对上式的求解后,得到了控制时域内的一系列控制输入增量:
根据模型预测控制的基本原理,将该控制序列中的第一个元素作为实际的控制输入增量作用于系统,即:
系统执行这一控制量直到下一时刻。在新的时刻,系统根据状态信息重新预测下一段时域的输出,通过优化过程得到一个新的控制增量序列。如此循环,直到系统完成控制过程。
‘贰’ 数学建模算法有哪些
1. 蒙特卡罗算法。 该算法又称随机性模拟算法,是通过计算机仿真来解决问题的算法,同时可以通过模拟来检验自己模型的正确性,几乎是比赛时必用的方法。
2. 数据拟合、参数估计、插值等数据处理算法。 比赛中通常会遇到大量的数据需要处理,而处理数据的关键就在于这些算法,通常使用MATLAB 作为工具。
3. 线性规划、整数规划、多元规划、二次规划等规划类算法。 建模竞赛大多数问题属于最优化问题,很多时候这些问题可以用数学规划算法来描述,通常使用Lindo、Lingo 软件求解。
4. 图论算法。 这类算法可以分为很多种,包括最短路、网络流、二分图等算法,涉及到图论的问题可以用这些方法解决,需要认真准备。
5. 动态规划、回溯搜索、分治算法、分支定界等计算机算法。 这些算法是算法设计中比较常用的方法,竞赛中很多场合会用到。
6. 最优化理论的三大非经典算法:模拟退火算法、神经网络算法、遗传算法。 这些问题是用来解决一些较困难的最优化问题的,对于有些问题非常有帮助,但是算法的实现比较困难,需慎重使用。
7. 网格算法和穷举法。 两者都是暴力搜索最优点的算法,在很多竞赛题中有应用,当重点讨论模型本身而轻视算法的时候,可以使用这种暴力方案,最好使用一些高级语言作为编程工具。
8. 一些连续数据离散化方法。 很多问题都是实际来的,数据可以是连续的,而计算机只能处理离散的数据,因此将其离散化后进行差分代替微分、求和代替积分等思想是非常重要的。
9. 数值分析算法。 如果在比赛中采用高级语言进行编程的话,那些数值分析中常用的算法比如方程组求解、矩阵运算、函数积分等算法就需要额外编写库函数进行调用。
10. 图象处理算法。 赛题中有一类问题与图形有关,即使问题与图形无关,论文中也会需要图片来说明问题,这些图形如何展示以及如何处理就是需要解决的问题,通常使用MATLAB 进行处理。
以下将结合历年的竞赛题,对这十类算法进行详细地说明。
以下将结合历年的竞赛题,对这十类算法进行详细地说明。
2 十类算法的详细说明
2.1 蒙特卡罗算法
大多数建模赛题中都离不开计算机仿真,随机性模拟是非常常见的算法之一。
举个例子就是97 年的A 题,每个零件都有自己的标定值,也都有自己的容差等级,而求解最优的组合方案将要面对着的是一个极其复杂的公式和108 种容差选取方案,根本不可能去求解析解,那如何去找到最优的方案呢?随机性模拟搜索最优方案就是其中的一种方法,在每个零件可行的区间中按照正态分布随机的选取一个标定值和选取一个容差值作为一种方案,然后通过蒙特卡罗算法仿真出大量的方案,从中选取一个最佳的。另一个例子就是去年的彩票第二问,要求设计一种更好的方案,首先方案的优劣取决于很多复杂的因素,同样不可能刻画出一个模型进行求解,只能靠随机仿真模拟。
2.2 数据拟合、参数估计、插值等算法
数据拟合在很多赛题中有应用,与图形处理有关的问题很多与拟合有关系,一个例子就是98 年美国赛A 题,生物组织切片的三维插值处理,94 年A 题逢山开路,山体海拔高度的插值计算,还有吵的沸沸扬扬可能会考的“非典”问题也要用到数据拟合算法,观察数据的走向进行处理。此类问题在MATLAB中有很多现成的函数可以调用,熟悉MATLAB,这些方法都能游刃有余的用好。
2.3 规划类问题算法
竞赛中很多问题都和数学规划有关,可以说不少的模型都可以归结为一组不等式作为约束条件、几个函数表达式作为目标函数的问题,遇到这类问题,求解就是关键了,比如98年B 题,用很多不等式完全可以把问题刻画清楚,因此列举出规划后用Lindo、Lingo 等软件来进行解决比较方便,所以还需要熟悉这两个软件。
2.4 图论问题
98 年B 题、00 年B 题、95 年锁具装箱等问题体现了图论问题的重要性,这类问题算法有很多,包括:Dijkstra、Floyd、Prim、Bellman-Ford,最大流,二分匹配等问题。每一个算法都应该实现一遍,否则到比赛时再写就晚了。
2.5 计算机算法设计中的问题
计算机算法设计包括很多内容:动态规划、回溯搜索、分治算法、分支定界。比如92 年B 题用分枝定界法,97 年B 题是典型的动态规划问题,此外98 年B 题体现了分治算法。这方面问题和ACM 程序设计竞赛中的问题类似,推荐看一下《计算机算法设计与分析》(电子工业出版社)等与计算机算法有关的书。
2.6 最优化理论的三大非经典算法
这十几年来最优化理论有了飞速发展,模拟退火法、神经网络、遗传算法这三类算法发展很快。近几年的赛题越来越复杂,很多问题没有什么很好的模型可以借鉴,于是这三类算法很多时候可以派上用场,比如:97 年A 题的模拟退火算法,00 年B 题的神经网络分类算法,象01 年B 题这种难题也可以使用神经网络,还有美国竞赛89 年A 题也和BP 算法有关系,当时是86 年刚提出BP 算法,89 年就考了,说明赛题可能是当今前沿科技的抽象体现。03 年B 题伽马刀问题也是目前研究的课题,目前算法最佳的是遗传算法。
2.7 网格算法和穷举算法
网格算法和穷举法一样,只是网格法是连续问题的穷举。比如要求在N 个变量情况下的最优化问题,那么对这些变量可取的空间进行采点,比如在[a; b] 区间内取M +1 个点,就是a; a+(b-a)/M; a+2 (b-a)/M; …… ; b 那么这样循环就需要进行(M + 1)N 次运算,所以计算量很大。比如97 年A 题、99 年B 题都可以用网格法搜索,这种方法最好在运算速度较快
的计算机中进行,还有要用高级语言来做,最好不要用MATLAB 做网格,否则会算很久的。穷举法大家都熟悉,就不说了。
2.8 一些连续数据离散化的方法
大部分物理问题的编程解决,都和这种方法有一定的联系。物理问题是反映我们生活在一个连续的世界中,计算机只能处理离散的量,所以需要对连续量进行离散处理。这种方法应用很广,而且和上面的很多算法有关。事实上,网格算法、蒙特卡罗算法、模拟退火都用了这个思想。
2.9 数值分析算法
这类算法是针对高级语言而专门设的,如果你用的是MATLAB、Mathematica,大可不必准备,因为象数值分析中有很多函数一般的数学软件是具备的。
2.10 图象处理算法
01 年A 题中需要你会读BMP 图象、美国赛98 年A 题需要你知道三维插值计算,03 年B 题要求更高,不但需要编程计算还要进行处理,而数模论文中也有很多图片需要展示,因此图象处理就是关键。做好这类问题,重要的是把MATLAB 学好,特别是图象处理的部分。
‘叁’ 模型预测控制的方法
模型预测控制是一种基于模型的闭环优化控制策略,其算法的核心是:可预测未来的动态模型,在线反复优化计算并滚动实施的控制作用和模型误差的反馈校正。模型预测控制具有控制效果好、鲁棒性强等优点,可有效地克服过程的不确定性、非线性和并联性,并能方便的处理过程被控变量和操纵变量中的各种约束。从模型预测控制的基本原理出发,常见的有三种预测控制算法:
1)基于非参数模型的模型预测控制
代表性算法有模型算法(MAC)和动态矩阵控制(DMC)。这类算法分别采用脉冲响应模型和有限阶跃响应模型作为过程预测模型,无需考虑模型结构和阶次,可将过程时滞自然纳入模型中,尤其适合表示动态响应不规则的对象特性,适合处理开环稳定多变量过程约束问题的控制。
2)基于ARMA或CARIMA等输入输出参数化模型的预测控制算法。
这类算法有经典自适应控制发展而来,融合了自校正控制和预测控制的优点。其反馈校正通过模型的在线辨识和控制率的在线修正以自校正的方式实现,其中最具代表性的是广义预测算法,它可应用于时变时滞较难控制的对象,并对系统的时滞和阶次不确定有良好的鲁棒性,但对于多变量系统,算法实施较困难。
3)滚动时域控制。由LQ和LQG算法发展而来
对于状态空间模型,用有限时域二次性能指标再加终端约束的滚动时域控制算法来保证系统稳定性。它已拓展到跟踪控制和输出反馈控制。各类模型预测控制算法虽然在模型、控制和性能上存在许多差异,但其核心都是基于滚动时域原理,算法中包含了预测模型、滚动优化和反馈校正三个基本原理。