目录
前言
以前写过一篇模糊PID及其MATLAB仿真的blog,反响比较多,问题也比较多。这段时间也发现确实有些细节需要补充,尤其是在理论上的,现加上这篇,以方便大家对模糊PID理解深一些,这样在设计仿真的时候也容易自定义功能和修改出错的仿真结果。以下,分为三个部分:数据预处理、PID参数整定和模糊控制。
1、数据的预处理
这里提到数据的预处理问题其实十分的重要,很多人的仿真控制算法时也是这里最容易出错。自己明明按照别人的搭建起来了,但是结果就是不对,带进去自己的数据就报错或者结果很难看。
网上看到的很多控制系统都是做了标准化的处理,你也可以理解为归一化处理完之后的。一般为了能够适应不同的输入输出条件,常设计控制系统内部的数据为 [-1,1] 之间或者 [0,1] 范围内。这样,控制系统的输入和输出只要做一下线性变换,变换到对应的范围内,即可直接套用已经设计好的控制系统。
例:某恒温箱,要求温度从20℃室温尽快调节到40℃。且已经给你了一个黑盒子,这个黑盒子就是网上那种例程,里面是个已经设计好的模糊控制器,给了你一个输入,一个输出。那么请问,你要直接把一个初值20,终值40的阶跃信号给这个系统吗?其实不少数人都是这么做的。
给定的黑盒子要求的输入输出实际上是[-1,1],你给人家弄个20输入,人家最大只能给你输出个1,能不出问题吗?
所以说,不要拿来个例程就套自己的数据,看看内部是怎么定义的。
2、PID 参数整定问题
现在我们假设,你的数据全部都已经规范化处理了。
PID的详细方程就不做介绍了,这里说一下这三个参数,某度搜一下“PID三个参数的作用”,上面有很多。
之前那篇模糊PID算法只讲了使用模糊控制在线整定PID的三个参数,其本质上还是个PID控制器,所以仍然需要你的系统模型(这里不明白的去百度一下“模糊控制与传统控制的区别”,关注对模型的需求)。不同的模型,PID的参数范围是不同的,PID参数整定的方法大家最好找到相关文献,比如Ziegler-Nichols 方法,然后根据你的传递函数模型,求出来各个参数范围,这些参数的范围将作为模糊控制的论域,所以非常重要。
3、模糊控制
假设你的PID参数的论域也准备好了,那么才进入你的模糊控制内容,这里我根据查到的资料详细讲一下,包括模糊控制中的理论基础。坐好车,我们出发。
在MATLAB里面,模糊控制已经集成为了工具箱,如下图:
图中,红色的两个圈表示为E,EC,分别为模糊控制系统中要求的输入误差和误差变化率,误差和误差变化率要求要在你的系统会产生的误差和误差变化率论域里面,别再随便看人家写的[-6,6],你就写这个范围了。
黑色圈的为模糊控制的输出,其各自的论域取决于之前确定的结果,你对那个已经确定的结果进行模糊子集的划分,就可以了。
接下来我们讲最有意思的模糊规则。
3.1 模糊控制规则的静态特性——完备性
完备性要求对于所有模糊控制输入的误差和误差变化率都对应一个与之对应的控制量。
完备性实际上就是你在设计模糊规则的时候,考虑到所有的误差可能性,对于所有的误差都需要有个对应的输出,对于模糊PID控制来说,就是给定了任意处于论域内的E和EC,都能够得到一组对应的PID三个参数。
如果现在给定E=-1,其对应的模糊语言为NL,EC=1其对应的模糊语言为PL,那么,模糊规则里面不包含这个组合的输出,那模糊系统就可能输出错误的值,进而导致控制性能的恶化。一般这种情况很少出现,因为对于7*7的模糊规则库来说,完全可以通过穷举的方式找到每个误差和误差变化率的输出,直观的说,就是你把那个7*7的表格填满就行了。
3.2 模糊控制规则的静态特性——相容性
模糊规则的相容性对于控制器的性能影响比较大,这条是在控制系统的设计过程中最容易出现问题的地方。相容性要求你的模糊规则不要有相互矛盾的输出,或者在输入相差较小的情况下输出不同。
举一个书上的例子,对一个反应釜系统,有如下两个模糊规则:
R1: 如果反应温度较高,则减少进料流量,降低反应槽内温度;
R2:如果反应转化率较大,则增大进料量,升高反应槽内温度。
这里似乎两条规则的钱体不同,因此采用了不同的控制方案,但通常反应釜内的温度越高,反应的转化率也越高,而控制方向却是相反的。这会导致控制系统出现问题。
之前有个朋友问我他模糊控制怎么不出来结果,我看了半天,原来就是他自己设计这个模糊规则,出现了这种相容性问题。
3.3 模糊控制规则的静态特性——干涉性
模糊控制规则的干涉性不太好理解,其大致意思是如果模糊规则相互干涉,那么模糊输出得到的控制量就不再等于你之前设定的那个东西了。干涉性来源于控制器的逻辑结构,如果用一个模糊关系的矩阵来表示模糊控制器,则不会存在这个干涉性问题。
简单且直观地说,就是你在设计那个模糊隶属度的函数时,两个或多个的函数曲线别重叠的太过分。
如果你不是写模糊控制方面的论文,那么以上说的静态特性那些概念没什么用,别在意,专心设计你的模糊规则库就行了,如果实在不会设计,就找一篇SCI“抄一下”吧。