我们来举个例子好了。
如果用计算机控制一辆汽车的油门和刹车,从而控制车速的话。普通的PID控制会面临两个问题。
第一,这是一个一阶系统,意味着,当控制误差达到0的时候,我们的系统输入量还必须保持在一定的位置,而不能回到零。这首先就使得,我们要么着重使用I分量,要么必须在控制器后面加一个积分器。
第二,这个系统延迟非常大。如果你希望系统能够及时刹车的话,主控系统控制频率应不低于10Hz,下位控制系统控制频率越高越好,至少也要在100Hz的水平。然而,汽车加速相对很慢,百公里加速时间一般不低于10秒。这意味大幅度的速度调整,如果不使用非常激进的控制策略的话,就需要经历5-10秒甚至更长时间才能完成。
一个比较容易想到的控制策略是使用控制系统控制加速度。加速度比速度要敏捷,但加速度的响应时间往往也在0.5到1秒的样子(如果不使用刹车),而且加速度响应的非线性度比速度响应要大得多,建模更加困难。
这两个特性结合在一起,就会发现,你的系统面临着巨大的系统延迟。即便以加速度控制而言,也常常要经历5-10个上位机周期或者50-100个下位机周期才能生效。
如此恐怖的延迟,应对方案一般只有两个。
第一,采用保守的控制算法,将控制增益设定的比较小。只要整个系统的自然周期显著大于延迟,就能够极大地压制系统延迟带来的震荡。但是,它的弱点十分明显,就是系统的控制效率很低,响应速度慢。
第二,采用模型预测控制,根据预测的一段时间以后的系统响应来合理地计算控制量。
那么,模型预测控制是如何做到这一点的呢?首先你要有一个不错的数学模型(最好是线性模型)能够至少在短时间内很好地预测系统状态的变化(在给定控制量的情况下)。然后根据数学模型,通过最优化算法或其他的方法来做出一套能够在未来一定时间内达到某种控制效果的控制方案。所谓控制方案,也就是一组控制量而已,就是从当前开始到未来一定时间点为止,每个控制周期应该使用的控制量。这个计算不必非常精确,尤其是离当前时间点越远,越不必精确,这有很多简化方法。通过这种方法得到控制方案,主要是要计算出当前所应该采取的控制量。每个周期一般都要重新计算控制方案,重新选取当前最合适的控制量。
有一种特殊的模型预测控制是这样的。就是当系统的反馈频率远低于和控制频率时(亦即,传感器反馈两次数据之间可以进行多次控制),可以计算一次控制方案,并在下一次反馈之前一直使用这一方案而不必每个控制周期都更新——原因很简单,既然全都是依赖于同一次的反馈计算而成,更新和不更新都是一样的。
模型预测控制在过程控制里面用的比较多。因为化学反应的延迟非常大,而且反应速度测量的噪声比较大,而同时环境约束比较容易严格控制,模型也可以建的比较准确。