模糊控制

模糊控制系统是基于模糊逻辑的控制系统。模糊逻辑将模拟输入分析为[0, 1]间连续取值的逻辑变量，不同于经典逻辑和数位逻辑只取离散值0、1（分别对应假、真）。该机制的输入是透过模糊化将原本0和1的资料变成0到1之间的数值，相对于原本的非零即一的二分法较接近人类的思维。在推论的过程中资料为模糊的，但透过解模糊化的步骤，可使得输出为精确值。
模糊逻辑在机器控制中有广泛应用。“模糊”是说所涉逻辑能处理不能简单表为“真”“假”，而只能表示为“部分真”。很多时候遗传算法、人工神经网络等方法的表现能与之媲美；不过模糊逻辑给出的解能表达为可理解的形式，这样已有的经验就能用在控制器设计中，使已有任务的机械化变得更容易。模糊控制常用于智能运算、建构专家系统、和类神经网路共同应用。
历史与应用.
模糊逻辑由加州大学伯克利分校控制论专家卢特菲·泽德于1965年的论文中提出。他在1973年的论文中进一步阐述了这些思想，引入了“语言变量”概念，在论文中等于被定义为模糊集的变量。之后出现了更多研究。1974年英国的E.H.Mamdani成功地将模糊控制应用于锅炉和蒸汽机控制，1976年建于丹麦的水泥窑成为首个工业应用。
模糊系统最初在日本得到应用。
北美和欧洲也在进行模糊系统研究，规模不如日本那么广泛。
对模糊应用的研究与开发仍在进行，特别是软件（而非固件）方面，包括模糊专家系统、模糊逻辑与神经网络和所谓自适应“遗传”软件系统的整合。最终目标是构建“自学习”模糊控制系统。这些系统可用于控制复杂的非线性动态系统，如人体。ref name = "sarabadani" /&gt;
模糊集.
模糊控制系统中的输入变量通常是模糊集。将精确输入值转化为模糊值的过程称作“模糊化”。基于模糊逻辑的方法设计两个模糊系统，用于航向角误差和速度控制。
控制系统也可能有各种开关，与模拟输入一同作为输入。其真值总等于1或0，但模糊控制可以将其视作模糊函数的特例。
给定输入变量道成员函数和真值的映射，单片机就能根据一组“规则”决定采取什么行动。规则的形式为
 IF brake temperature(制动温度) IS warm AND speed(速度) IS not very fast 
 THEN brake pressure(制动压力) IS slightly decreased(略微减少)
此例中，两个输入变量是“制动温度”和“速度”，值由模糊集定义。输出变量“制动压力”也由模糊集定义，可以有“静态”“略微增加”“略微减少”等值。
模糊控制详解.
模糊控制器在概念上很简单：包含1个输入段、1个处理段、1个输出段。输入段将来自传感器或开关、旋钮等的输入映射到适当的隶属函数和真值；处理段调用适当的规则、生成结果并组合起来；输出段将组合结果转换回特定的控制输出值。
隶属函数最常见的形状是三角形，也有应用使用梯形、钟形曲线，不过形状一般不如曲线的数量和位置重要。通常3到7条曲线足以覆盖输入值的所需范围，在模糊术语中这个范围称作“论域”。
如上所述，处理段基于一系列IF-THEN形式的逻辑规则，IF部分称作“前件”，THEN部分称作“后件”。典型模糊控制系统往往有数十条规则。
考虑恒温器的一条规则：
 IF (temperature is "cold") THEN turn (heater is "high")
此规则用输入“温度”的真值（即“冷”的某个真值）为输出“加热器”生成在模糊集中的结果（“高”的某个值），与其他规则一同生成最后的明确输出。对这一条规则而言，显然“冷”的真值越大“高”的真值也越高，不过与其他规则综合的最终输出不一定是“高”。有时隶属函数可被相当于副词的“限制语（hedge）”修饰，常见的有“大约”“近于”“非常”“略微”“有些”等等。它们可以有精确的定义，但往往不统一。例如“非常（very）”可以是将隶属函数平方，由于隶属函数不大于1，这样会缩窄隶属函数；“极其（extremely）”可以是将隶属函数立方，缩窄得更多；“有些（somewhat）”可以是取平方根，拓宽了隶属函数。
实践中，模糊规则集常常有多个前件，用模糊算子AND、OR、NOT相组合，其定义也不是统一的。比较流行的定义中，AND是取所有前件的最小值，OR则是取最大值，NOT是1减隶属函数，得到“补”函数。
定义规则的结果有好几种方法，最常见、最简单的是“最大-最小”推理法，输出隶属函数被赋予由条件生成的真值。
规则可在硬件中并行求解，也可在软件中顺序求解。所有已触发规则的结果通过“去模糊化”转换为明确值，理论上有几十种方法，各有优缺点。最常用的是“重心法（centroid）”，结果的“重心”提供明确值，偏向输出面积最大的规则。“高度法”也很常用，即取最大贡献者的值，偏向输出值最大的规则。
下图展示了一个系统的最大-最小推理和重心法去模糊化，具有输入变量x、y、z和输出变量n。注意mu是“真值”的标准模糊逻辑命名：
注意每条规则如何为输出的隶属函数提供结果作为真值。重心法去模糊化中使用OR运算（取最大值，而非相加），然后用重心计算组合结果。
模糊控制系统设计基于经验方法，基本上是一种规范化的试错法，一般过程如下：
考虑为蒸汽涡轮机设计的模糊控制器作为一般例子。输入和输出变量映射到以下模糊集：
—当中
 N3: 大负值
 N2: 中负值
 N1: 小负值
 Z: 零
 P1: 小正值
 P2: 中正值
 P3: 大正值
规则集有以下规则：
 规则1: IF temperature IS cool AND pressure IS weak, 
 THEN throttle is P3.
 规则2: IF temperature IS cool AND pressure IS low, 
 THEN throttle is P2.
 规则3: IF temperature IS cool AND pressure IS ok, 
 THEN throttle is Z.
 规则4: IF temperature IS cool AND pressure IS strong,
 THEN throttle is N2.
实践中，控制器将输入映射到隶属函数和真值，然后将映射输入规则。若规则规定两输入变量的映射间是AND关系（如上例）则以较小值为组合真值；若是OR关系则选取较大值。选择适当的输出状态，并在前提的真值水平上分配隶属度。最后对真值去模糊化。
例如，假设温度在“凉爽”态，压力在“低”和“正常”态，则压力值只会触发规则2、3：
两个输出通过重心法去模糊化：
输出值会调节风门的开合，之后下一个控制循环生成下一个值。
构建模糊控制器.
考虑用微控制器芯片实现一个简单的反馈控制器：
为输入变量e、误差变化率delta、输出output定义一个模糊集，如下：
 LP: 大正 (large positive)
 SP: 小正 (small positive)
 ZE: 零 (zero)
 SN: 小负 (small negative)
 LN: 大负 (large negative)
若误差范围是[-1, +1]，所用的模数转换器分辨率为0.25，则输入变量的模糊集（这里也适用于输出变量）可以总结成一张表，顶行的误差 / 变化率 / 输出值对应下面各行隶属函数的真值（隶属度）：
 _______________________________________________________________________
 -1 -0.75 -0.5 -0.25 0 0.25 0.5 0.75 1
 _______________________________________________________________________
 mu(LP) 0 0 0 0 0 0 0.3 0.7 1
 mu(SP) 0 0 0 0 0.3 0.7 1 0.7 0.3
 mu(ZE) 0 0 0.3 0.7 1 0.7 0.3 0 0
 mu(SN) 0.3 0.7 1 0.7 0.3 0 0 0 0
 mu(LN) 1 0.7 0.3 0 0 0 0 0 0
 _______________________________________________________________________ —以图形形式表示（每个“X”代表0.1的值）：
 LN SN ZE SP LP
 | |
 -1.0 | XXXXXXXXXX XXX : : : |
 -0.75 | XXXXXXX XXXXXXX : : : |
 -0.5 | XXX XXXXXXXXXX XXX : : |
 -0.25 | : XXXXXXX XXXXXXX : : |
 0.0 | : XXX XXXXXXXXXX XXX : |
 0.25 | : : XXXXXXX XXXXXXX : |
 0.5 | : : XXX XXXXXXXXXX XXX |
 0.75 | : : : XXXXXXX XXXXXXX |
 1.0 | : : : XXX XXXXXXXXXX |
 +------------------------------------------------------------------+
假设本模糊系统有控制应用中的典型规则库：
 规则1: IF e = ZE AND delta = ZE THEN output = ZE
 规则 2: IF e = ZE AND delta = SP THEN output = SN
 规则 3: IF e = SN AND delta = SN THEN output = LP
 规则 4: IF e = LP OR delta = LP THEN output = LN
前件是误差、误差变化率信号的逻辑组合，后件是控制指令输出。规则的输出可以通过离散质心计算法解模糊化：
 SUM( I = 1 TO 4 OF ( mu(I) * output(I) ) ) / SUM( I = 1 TO 4 OF mu(I) )
假设在给定时间有
 e = 0.25
 delta = 0.5
则会得出
 ________________________
 e delta
 ________________________
 mu(LP) 0 0.3
 mu(SP) 0.7 1
 mu(ZE) 0.7 0.3
 mu(SN) 0 0
 mu(LN) 0 0
 ________________________
带入规则 1：
 规则 1: IF e = ZE AND delta = ZE THEN output = ZE
 mu(1) = MIN( 0.7, 0.3 ) = 0.3
 output(1) = 0
-- 当中
其他规则的计算结果：
 rule 2: IF e = ZE AND delta = SP THEN output = SN
 mu(2) = MIN( 0.7, 1 ) = 0.7 
 output(2) = -0.5
 rule 3: IF e = SN AND delta = SN THEN output = LP
 mu(3) = MIN( 0.0, 0.0 ) = 0
 output(3) = 1
 rule 4: IF e = LP OR delta = LP THEN output = LN
 mu(4) = MAX( 0.0, 0.3 ) = 0.3
 output(4) = -1
质心计算法得到
 formula_1
 formula_2
 formula_3—即最终控制输出。这很简单，困难在于得到能在实践中正确工作的规则。
若不理解质心方程，只要记住质心的定义：围绕重心的所有力矩为0。所以，记重心为formula_4，记每个质量位置为formula_5，每个质量大小为formula_6，有
 formula_7
 formula_8
 formula_9
 formula_10
我们的例子中，mu的值对应质量值，X的值对应质量的位置（不过只有当所有输出函数的初始“质量”都相同或等效时，才能说mu“对应于质量”。如果不相同，比方说一些是窄三角形、另一些是宽梯形，就必须先得到输出函数的质量或面积，再用mu缩放这个质量，最后乘以其位置X_i）。
此系统能在标准的微处理器上实现，现在也有专门的模糊芯片。例如加利福尼亚圣何塞的Adaptive Logic INC公司有一款模糊芯片AL220，能接收4个模拟输入并产生4个模拟输出。框图如下所示：
经典模糊控制器.
利用模糊集合理论将专家知识或操作人员经验形成的语言规则直接转化为自动控制策略。通常使用模糊规则查询表，用语言知识模型来设计和修正控制算法。
模糊控制器主要分为mamdani和TSK两类。mamdani系统的输入输出均为语言值，输出需要非模糊化得到数字量。TSK系统输入为语言值，输出为数字量。
设计模糊控制器一般方法.
1.定义输入及输出变数。
通常，模糊控制的输入变数可以是撷取自受控系统的观测量。也可以是推导出来的资料；而模糊控制的输出变数则为操控受控系统的操作量。设计模糊控制时，要利用一些方法去选择适当的输出入变数，并加以定义。
2.决定模糊化（fuzzification）的策略。
输入到模糊控制的资料可能是代表观测量的确定数值（crisp value），也可能是带有模糊性质的干扰（disturbance）杂讯。设计模糊控制时必须考虑输入信号的各种可能形式，选择适当的模糊化方式，以便将系统的状态转换成语言变数。
3.定义各语言变数资料库。
4.设计控制规则库。
5.设计fuzzy推论机构。
6.选择解模糊化（defuzzification）的方式。
应用.
模糊控制系统适用于高度复杂、包含不确定和非线性行为、无精确数学模型的过程。成功的应用遍布世界各地，集中在1980年代以来的日本。
文献中报告的部分应用：