模糊控制

模糊控制系统是基于模糊逻辑的控制系统。模糊逻辑将模拟输入分析为0, 1间连续取值的逻辑变量，不同于经典逻辑和数位逻辑只取离散值0、1（分别对应假、真）。该机制的输入是透过模糊化将原本0和1的资料变成0到1之间的数值，相对于原本的非零即一的二分法较接近人类的思维。在推论的过程中资料为模糊的，但透过解模糊化的步骤，可使得输出为精确值。

模糊逻辑在机器控制中有广泛应用。“模糊”是说所涉逻辑能处理不能简单表为“真”“假”，而只能表示为“部分真”。很多时候遗传算法、人工神经网络等方法的表现能与之媲美；不过模糊逻辑给出的解能表达为可理解的形式，这样已有的经验就能用在控制器设计中，使已有任务的机械化变得更容易。模糊控制常用于智能运算、建构专家系统、和类神经网络共同应用。

## 历史与应用

模糊逻辑由加州大学伯克利分校控制论专家卢特菲·泽德于1965年的论文中提出。他在1973年的论文中进一步阐述了这些思想，引入了“语言变量”概念，在论文中等于被定义为模糊集的变量。之后出现了更多研究。1974年英国的E.H.Mamdani成功地将模糊控制应用于锅炉和蒸汽机控制，1976年建于丹麦的水泥窑成为首个工业应用。

模糊系统最初在日本得到应用。

- 对模糊系统的兴趣始于1985年，日立的安信诚二和宫本壮司通过模拟证明模糊控制系统在仙台市地铁中应用的可行性。设想得到采纳，1987年仙台市地铁南北线开通时模糊系统用于控制加速、制动和停车。成为第一个成功应用模糊控制的大型工程。
- 1987年，山川健用一组简单的专用模糊逻辑芯片，用倒单摆实验展示了模糊控制的应用。这是一个经典控制问题，要求车通过前后移动保持顶部铰链安装的杆保持直立。山川健随后改进了实验，在摆的顶部放置了装水的酒杯，甚至一只活老鼠：系统都保持了稳定。山川健组建了自己的模糊系统研究实验室，以帮助利用他在该领域的专利。
- 日本工程师之后为工业和消费应用开发了各种模糊系统。1988年，日本成立了国际模糊工程研究所（Laboratory for International Fuzzy Engineering，简称LIFE），是由48家企业构成的合作机构，旨在推进模糊研究。福斯汽车是当中唯一的外企，派遣了一名研究院参与为期三年的研究。
- 日本消费品经常采用模糊系统。松下吸尘器用运行模糊算法的单片机检测灰尘传感器并调整吸力；日立洗衣机用模糊控制器感应负载重量、织物混合与污垢程度，并自动设置洗涤周期，以最佳方式利用电、水和洗涤剂。
- 佳能开发了自动对焦相机，使用电荷耦合元件 (CCD)测量视野中六个区域的清晰度，利用信息确定图像是否对焦。它还能跟踪对焦过程中镜头移动的变化率，并控制速度防止过冲。相机的模糊控制系统有12个输入，6个获取CCD的当前清晰度数据，6个测量镜头移动变化率；输出是镜头位置。模糊控制系统共有13条规则，需要1.1KB内存。
- 三菱设计的工业空调的加热规则和冷却规则各有25条。温度感测器提供输入，控制输出回馈给变频器、压缩机阀门和风扇电机。与前一代设计相比，模糊控制器的加热冷却速度快5倍，功耗减少24%，温度稳定性提高2倍，并使用更少的感测器。
- 其他研究或实现的应用：字符与手写识别；光学模糊系统；机器人；语音控制的机器人直升机（悬停是与倒单摆相似的“平衡行为”）；康复机器人，提供患者特定解决方案（如控制心率和血压）；控制粉末在芯片制造中的流动；电梯系统；等等。

北美和欧洲也在进行模糊系统研究，规模不如日本那么广泛。

- 美国环境保护局已开始研究用于节能电机的模糊控制，NASA研究了用于太空对接的模糊控制；模拟显示，模糊控制系统可以大大减少燃料消耗。
- 波音、通用汽车、艾伦-布拉德利、克莱斯勒集团、伊顿、惠而浦等公司已经开发模糊逻辑用于低功耗冰箱、改进的汽车变速器和节能电机。
- 1995年，美泰克（Maytag）推出了基于模糊控制器的“智能”洗碗机和“一站式感应模块”，结合了测温用的热敏电阻、测量洗涤剂含量的电导率传感器、通过散射和透射光衡量洗涤物污染程度的浊度传感器、读取转速的磁致伸缩传感器。系统能确定任何负载的最佳洗涤周期，以最少的电、洗涤剂和水量获得最佳效果。它甚至通过跟踪上次开门时间来调整干燥食物的清洗，根据开门次数估计盘子数量。
- Xiera开发了第一个模糊逻辑控制器知识库的自动调谐器——edeX。技术由莫哈克学院进行测试，能解决非线性2x2和3x3多输入多输出问题。

对模糊应用的研究与开发仍在进行，特别是软件（而非固件）方面，包括模糊专家系统、模糊逻辑与神经网络和所谓自适应“遗传”软件系统的整合。最终目标是构建“自学习”模糊控制系统。这些系统可用于控制复杂的非线性动态系统，如人体。ref />

## 模糊集

模糊控制系统中的输入变量通常是模糊集。将精确输入值转化为模糊值的过程称作“模糊化”。基于模糊逻辑的方法设计两个模糊系统，用于航向角误差和速度控制。

控制系统也可能有各种开关，与模拟输入一同作为输入。其真值总等于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是“真值”的标准模糊逻辑命名：

<image>

注意每条规则如何为输出的隶属函数提供结果作为真值。重心法去模糊化中使用OR运算（取最大值，而非相加），然后用重心计算组合结果。

模糊控制系统设计基于经验方法，基本上是一种规范化的试错法，一般过程如下：

- 记录系统的操作规格、输入和输出。
- 记录输入的模糊集。
- 记录规则集。
- 确定去模糊化方法。
- 运行测试、验证系统，根据需要调整细节。
- 完成文档并发布到生产环境。

考虑为蒸汽涡轮机设计的模糊控制器作为一般例子。输入和输出变量映射到以下模糊集：

<image>

—当中

```
  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：

<image>

<image>

两个输出通过重心法去模糊化：

```
   __________________________________________________________________

                                       |          Z      P2
                                    1 -+          *       *
                                       |         * *     * *
                                       |        *   *   *   *
                                       |       *     * *     *
                                       |      *       222222222
                                       |     *       22222222222
                                       |    333333332222222222222
                                       +---33333333222222222222222--&gt;
                                                        ^ 
                                                      +150 
   __________________________________________________________________
```

输出值会调节风门的开合，之后下一个控制循环生成下一个值。

### 构建模糊控制器

考虑用微控制器芯片实现一个简单的反馈控制器：

<image>

为输入变量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
```

- 当中

- mu(1): 规则 1的结果隶属函数的真值（隶属度），质心计算中可以看做离散结果的“质量”
- output(1): 结果隶属函数 (ZE) 在输出变量模糊集范围内达到最大值的位置。质心计算中，相当于单个结果的“质心”位置。这个值与mu值无关，它仅仅标示了ZE在输出范围上的位置

其他规则的计算结果：

```
  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
```

质心计算法得到

```
  <math> \frac{mu(1) \cdot output(1)+mu(2) \cdot output(2)+mu(3) \cdot output(3)+mu(4) \cdot output(4)}{mu(1)+mu(2)+mu(3)+mu(4)} </math>
  <math>=\frac{(0.3 \cdot 0)+(0.7 \cdot-0.5)+(0 \cdot 1) +(0.3 \cdot-1)}{0.3+0.7+0+0.3} </math>
  <math>=-0.5</math>—即最终控制输出。这很简单，困难在于得到能在实践中正确工作的规则。
```

若不理解质心方程，只要记住质心的定义：围绕重心的所有力矩为0。所以，记重心为$X_0$，记每个质量位置为$X_i$，每个质量大小为$M_i$，有

```
  <math>0 = ( X_1 - X_0 ) \cdot M_1 + ( X_2 - X_0 ) \cdot M_2 + \ldots + ( X_n - X_0 ) \cdot M_n</math>
  <math>0 = ( X_1 \cdot M_1 + X_2 \cdot M_2 + \ldots + X_n \cdot M_n ) - X_0 \cdot ( M_1 + M_2 + \ldots + M_n ) </math>
  <math> X_0 \cdot ( M_1 + M_2 + \ldots + M_n ) =  X_1 \cdot M_1 + X_2 \cdot M_2 + \ldots + X_n \cdot M_n </math>
  <math> X_0 = \frac{ X_1 \cdot M_1 + X_2 \cdot M_2 + \ldots + X_n \cdot M_n }{ M_1 + M_2 + \ldots + M_n }</math>
```

我们的例子中，mu的值对应质量值，X的值对应质量的位置（不过只有当所有输出函数的初始“质量”都相同或等效时，才能说mu“对应于质量”。如果不相同，比方说一些是窄三角形、另一些是宽梯形，就必须先得到输出函数的质量或面积，再用mu缩放这个质量，最后乘以其位置X_i）。

此系统能在标准的微处理器上实现，现在也有专门的模糊芯片。例如加利福尼亚圣何塞的Adaptive Logic INC公司有一款模糊芯片AL220，能接收4个模拟输入并产生4个模拟输出。框图如下所示：

```
              +---------+                              +-------+
模拟输入--4--&gt;| 模拟多路  |                              | 多路复用器 / +--4--&gt; 模拟输出
              |   复用器   |                            |  SH   |        
              +----+----+                              +-------+
                   |                                       ^
                   V                                       |
            +-------------+                             +--+--+
            | ADC / 锁存器 |                             | DAC |
            +------+------+                             +-----+
                   |                                       ^
                   |                                       |
                   8         +-----------------------------+
                   |         |                             |
                   |         V                             |
                   |   +-----------+      +-------------+  |
                   +--&gt;| 模糊化器   |     |  解模糊器    +--+
                       +-----+-----+      +-------------+
                             |                   ^
                             |  +-------------+  |
                             |  |    规则     |  |
                             +-&gt;|   处理器      +--+
                                |   (50条)    |
                                +------+------+
                                       |
                                +------+------+
                                |     参数    |
                                |    存储器    |
                                |   256 x 8   |
                                +-------------+

    ADC:  模数转换器
    DAC:  数模转换器
    SH:   采样/保持器
```

## 特点

- 简化系统设计的复杂性，特别适用于非线性、时变、模型不完全的系统上。
- 利用控制法则来描述系统变数间的关系。
- 不用数值而用语言式的模糊变数来描述系统，模糊控制器不必对被控制对象建立完整的数学模式。
- 模糊控制器是一语言控制器，使得操作人员易于使用自然语言进行人机对话。
- 模糊控制器是一种容易控制、掌握的较理想的非线性控制器，具有较佳的适应性及强健性（Robustness）、容错（Fault Tolerance）效果较佳。

## 经典模糊控制器

利用模糊集合理论将专家知识或操作人员经验形成的语言规则直接转化为自动控制策略。通常使用模糊规则查询表，用语言知识模型来设计和修正控制算法。

模糊控制器主要分为mamdani和TSK两类。mamdani系统的输入输出均为语言值，输出需要非模糊化得到数字量。TSK系统输入为语言值，输出为数字量。

## 模糊控制器结构

- 模糊控制器是时变参数PID控制器
- 模糊控制器的极限结构理论

## 设计模糊控制器一般方法

1.定义输入及输出变数。

通常，模糊控制的输入变数可以是撷取自受控系统的观测量。也可以是推导出来的资料；而模糊控制的输出变数则为操控受控系统的操作量。设计模糊控制时，要利用一些方法去选择适当的输出入变数，并加以定义。

2.决定模糊化（fuzzification）的策略。

输入到模糊控制的资料可能是代表观测量的确定数值（crisp value），也可能是带有模糊性质的干扰（disturbance）噪声。设计模糊控制时必须考虑输入信号的各种可能形式，选择适当的模糊化方式，以便将系统的状态转换成语言变数。

3.定义各语言变数数据库。

4.设计控制规则库。

5.设计fuzzy推论机构。

6.选择解模糊化（defuzzification）的方式。

## 应用

模糊控制系统适用于高度复杂、包含不确定和非线性行为、无精确数学模型的过程。成功的应用遍布世界各地，集中在1980年代以来的日本。

文献中报告的部分应用：

- 空调
- 相机中的自动对焦系统
- 家具（冰箱、洗衣机等）
- 工业过程和系统的控制与优化
- 文字识别
- 引擎燃料效率
- 环境
- 专家系统
- 决策树
- 机器人
- 自动驾驶汽车

## 阅读更多

- Kevin M. Passino and Stephen Yurkovich, Fuzzy Control, Addison Wesley Longman, Menlo Park, CA, 1998 (522 pages)
- Cox, E. (Oct. 1992). Fuzzy fundamentals. IEEE Spectrum, 29:10. pp. 58–61.
- Cox, E. (Feb. 1993) Adaptive fuzzy systems. IEEE Spectrum, 30:2. pp. 7–31.
- Jan Jantzen, "Tuning Of Fuzzy PID Controllers", Technical University of Denmark, report 98-H 871, September 30, 1998.
- Jan Jantzen, Foundations of Fuzzy Control. Wiley, 2007 (209 pages) (Table of contents)
- Computational Intelligence: A Methodological Introduction by Kruse, Borgelt, Klawonn, Moewes, Steinbrecher, Held, 2013, Springer,

## 外部链接

- Introduction to Fuzzy Control
- Fuzzy Logic in Embedded Microcomputers and Control Systems
- IEC 1131-7 CD1 IEC 1131-7 CD1 PDF
- Online interactive demonstration of a system with 3 fuzzy rules
- Data driven fuzzy systems