作者:王源
经常有人会问到control theory 和 optimization 有什么联系?它们之间的联系非常多,今天我们主要聚焦在模型预测控制。模型预测控制实际上是以优化方法来求解控制问题,或者说是以优化问题的求解来给出控制器的动作。所以说模型预测控制是外边套着一层控制的皮,内部包含着优化的思想。
其实讲模型预测控制有几个角度去讲,因为它本就是属于优化和控制两个领域的交叉。我比较习惯于从最优控制的角度去理解,这样的话对于自动化出身的童鞋是比较好理解的,但是其它领域的童鞋之前没有接触过最优控制的,就更加不好去理解模型预测控制了。所以本文从最最基本的一个动机开始讲起。
模型预测控制(model predictive control)顾名思义有三个主要部分构成,1模型;2预测;3控制(做决策),我们只要理解这三个部分和它们之间的关系即可。
1 模型,模型可以是机理模型,也可以是一个基于数据的模型(例如用神经网络training 一个model出来)
2 预测,建立模型的目的是什么呢?建立一个模型并不是放在那里拿来看的,多半是用来做预测用的。我们每天的生活中就在不停地做建模和预测的事情,例如你过马路的时候,会预测一下是否有车能撞到你,例如我们周末想出去旅游了,可能就会去看一下天气预报。在实际生产中也有很多类似的例子,淘宝会预测每件商品未来7天的购买量,物理学家会用牛顿三大定律预测小行星的运动轨迹。
3 控制(做出决策),控制就是我需要做出动作了,在前面的例子中对应起来就是,例如你过马路的时候,会预测一下是否有车能撞到你,如果没有你就赶快过马路(控制动作)。例如淘宝会预测商品未来7天的购买量,就要看如果说有一些商品缺货了的话就赶紧去调货或者生产(控制动作),例如物理学家用牛顿三大定律预测小行星运动轨迹,如果预测到小行星会撞击到地球的话,那就提前需要采取措施来避免小行星的撞击(控制动作)。
在上面的三个例子中,第一个例子你用的是你的大脑根据以往经验学到的模型来做预测,第二个例子中可能你会用神经网络,决策树啊等等机器学习学习到的模型(说到这里可能很多童鞋会比较激动,模型预测控制可以和现在很火的人工智能 深度学习结合在一起),第三个例子中物理学家们用到的是机理模型。总之各种各样的模型都可以做预测,我们身边天天都在做预测,而预测不单单是预测的准就完事了,预测的目的是为了让我们更好的去决策。
最优控制强调的是“最优”,一般最优控制需要在整个时间域上进行求优化(这样才能保证最优性)。最优控制常用的几类解法有 1变分法,2极大值原理,3动态规划。变分法和极大值原理一般来说只能处理线性的模型并且不能含有复杂一点的约束,而动态规划我们知道实际上在求解最优控制问题中是一种比较聪明的穷举法,其计算复杂度往往非常高。最优控制由于过于强调最优性,而暴露出两个问题 1是对于非线性的 包含复杂约束的情况难以求解;2是需要对系统的模型精确的知道。
模型预测控制退而求其次仅仅去考虑未来几个时间步,一定程度上牺牲了最优性。举个例子来说如下图所示,我们在开车,前面路口有一个弯道。如果想要平稳的过弯,我们就需要在进入弯道之前(考虑未来几个时间步)就开始控制车辆的方向和速度。与之相对的一种控制方式就是只看现在的情况,也就是贪婪的方法,那可以想象如果等到车辆行驶到弯道再做动作的话势必会晚了一些。
1 模型预测控制善于处理多输入多输出系统,对于如下图所示的多输入多输出系统,虽然也可以采用多个PID控制器进行控制,但是往往由于各个控制回路之间存在耦合关系,其PID参数的整定变得非常困难。与之相对的模型预测控制的优势就是非常方便的可以考虑多输入多输出系统,用一个MPC控制器就可以解决。
2 模型预测控制可以处理约束
现实世界中往往存在各种各样的约束条件,例如前面举得开车的例子中,对车速有约束(因为有交通法规限速),对加速度也有约束(因为发动机的负载是有限的)。由于模型预测控制是通过构建优化问题来求解控制器的动作的,所以可以非常自然的将这些约束建立在优化问题中以此来保证这些约束的满足。
3 模型预测控制是有向前考虑未来时间步的有限时域优化
这个在前面对比模型预测控制和最优控制的时候已经讲过了,这里就不多说了。实际上模型预测控制采用了一个折中的策略,既不是像最优控制那样考虑这个时域,也不是完全的贪婪控制仅仅考虑当前,而是考虑未来的有限时间域。
模型预测控制的实现是通过建立优化问题的模型,求解该优化问题来得到控制器的输出的。如下图所示:
从这里可以看到模型预测控制需要在每一个时间步通过反复的预测+优化来求解优化问题,当得到优化问题最优解后再讲这个解作为真正的控制器的输出作用给被控对象。那么关键就在于怎么定义这个优化问题了,下面简单的给出一种常见的优化问题的模型。
目标函数表示系统的状态 y(t+k) 和期望的状态 y_d(t+k) 在未来N个时间步都要尽量接近,约束(1)表示被控对象的动态特性,约束(2)和(3)分别表示控制量 u(t) 和状态量 y(t) 受到一个上下限的约束。由此就得到了MPC的优化问题,那么求解这个优化问题即可得到控制器的动作。当然这里仅仅是举例而已,实际上目标函数和约束条件要根据实际问题去定义。
很多MPC最后形成的优化问题是一个二次规划问题,那么可以借助丰富的运筹优化的理论来求解这个二次规划问题。所以MPC是外壳套着控制,内涵是一个优化方法。
从这里可以看到模型预测控制需要在每一个时间步迭代求解优化问题,而优化问题的求解往往是比较耗费时间的,而控制器的动作对实时性要求可能会比较强一些,这样就会产生一个矛盾,这也是目前模型预测控制的一个主要缺点。
推荐两个MPC相关的课程第一个是B站上的,这个课程的特点是非常基础,可以帮助初学者理清楚MPC的基本思路。本文的一部分图片也是来自这个视频。https://www.bilibili.com/video/av24625694?p=1第二个课程就比较专业了,供做学术的童鞋如果想深入研究的话,可以看第二个课程。http://cse.lab.imtlucca.it/~bemporad/mpc_course.html