【控制器】---模糊PI
1. 模糊控制的基础知识
1.1 模糊PI是干啥的
PI控制是根据误差进行调节,利用比例Kp与积分Ki实现反馈调节,这里的俩玩意是咋来的哩
- E误差较大时,增大Kp,来达到更快的调节,缩小调节时间;
- Ec误差变化率较大时,减小Ki,减小误差积分,使系统减少积分饱和
啥是积分饱和:PI控制器中,因积分项过度累计导致的非线性失控现象
误差变化率大,说明误差本身在迅速变化,可能是负载突变或输入电压波动~,如果这时候Ki还是这么大,那么积分项\(∫e(t)dt\)的累计速度会很快,那么会产生超调,振荡,动态性能变差等一系列问题。
所以引入模糊控制,来实时的控制改变Kp与Ki,
1.2 模糊控制基础理论
模糊控制器也称FC控制器(Fuzzy Control),如下图所示可按照输入的维数划分,分为如下三类:

- 一维FC控制器 输入变量x仅有偏差e, 对动态偏差调节品质较差
- 二维FC控制器 x有偏差e和偏差变化率ec两个分量。偏差变化率可以反应受控过程中输出变量的动态特性,采用较多
- 三维FC控制器 增加了变化率的变化率ecc分量。但即使到了三维,也不可消除静态误差,且由于维数高产生的模糊子集数要大大多于所实现的动态特性。只适用于一些特殊场合。
那么对于一个完整的二维FC模糊控制应该包括:模糊化,模糊推理,解模糊

一个基础的模糊控制器主要有三个功能
- 模糊化:把精确量(如误差e和误差变化率ec)转化为相应的模糊量(E,EC)
- 模糊推理:利用总结的语言规则(模糊控制表)进行模糊推理
- 解模糊:把推理结果从模糊量转化为可以用于实际控制的精确量
2. 拆分
2.1 量化因子与比例因子
这里我们使用偏差e跟ec作为输入实现控制系统参数调整,所以需要对e和ec进行模糊化,首先
量化因子:理解为归一化,
设计的模糊控制器输入限制在[-3,3],但是实际上的是【-300,300】,那么就需要实际输入/100作为标准输入,这里的1/100就是量化因子
\[ K_e=\frac{n}{x_{max}-x_{min}}\quad(n=6\text{对应}[-3,3]) \]
示例:温度控制误差范围±50℃ \[ K_e=6/(50-(-50))=0.06 \]
比例因子:解归一化
同样的,不能一直当小瘪三,如果我实际的输出是【-30,30】,那么这里就得再将标准输出×10作为实际输出,10就是比例因子
利用量化因子,我们就将输入量规划到论域范围了,然后呢~他还是精确量,然后需要进行模糊化
2.2 模糊化
模糊化的实质是计算输入对各模糊子集的归属程度
首先来理解一些这一步骤的意义
- 输入:精确量
- 比如说:当前温度28.6℃
- 输出:各模糊子集的隶属度值集合
- “低温”子集隶属度:0.0
- “舒适”子集隶属度:0.3
- “高温”子集隶属度:0.7
- 物理意义:当前温度更接近“高温”范畴,但仍有部分属于舒适区
在来看一下一些概念
- 模糊子集:将连续量离散化为可理解的语义单元(如NB/NM/NS/ZO)
- 意义:作为规则库中的条件判断单元
- 隶属度函数:描述元素对模糊集合归属程度的数学映射规则,是模糊集合的量化载体
- 意义:将
- 隶属度:量化归属程度
- 意义:决定各条模糊规则的贡献比例
2.2.1 模糊子集
模糊集合的表示方法:
当论域X为有限集,记\(x={x1,x2,....xn}\),此时有三种常见的表示形式
zadeh表示法
\[ A=\sum_{i=1}^n\frac{\mu_A(i)}{x_i}=\frac{\mu_A(x_1)}{x_1}+\frac{\mu_A(x_2)}{x_2}+\cdots+\frac{\mu_A(x_n)}{x_n} \]
- 注:∑跟+, 不是求和的意思,只是概括集合诸元的记号;\(\frac{\mu_A(x_i)}{x_i}\)不是分数,表示**点xi对模糊集A的隶属度是\(u_A(x_i)\).
序偶表示法
- \[ A=\{(x_1,\mu_A(x_1)),(x_2,\mu_A(x_2)),\cdots,(x_n,\mu_A(x_n))\} \]
向量表示法
- \[ A=(\mu_A(x_1),\mu_A(x_2),\cdots,\mu_A(x_n)) \]
当论域为无限集时,X上的模糊集A可以写成
\[ A=\int_{x\in X}\frac{\mu_A(x)}{x} \]
- 同样的,∫也不是积分的意思,里面那玩意也不是分数
模糊子集的划分
对于模糊输入变量e ,模糊子集通常可以划分为:
e ={负大, 负小, 零, 正小, 正大}={NB, NS, ZO, PS, PB} e ={负大, 负中, 负小, 零, 正小, 正中, 正大}={NB, NM, NS, ZO, PS, PM, PB} e ={负大, 负中, 负小, 零负, 零正, 正小, 正中, 正大}={NB, NM, NS, NZ, PZ, PS, PM, PB} (英文字头简记)
2.2.2 隶属度函数
6种典型的隶属度函数
高斯型隶属函数
高斯型隶属度函数有两个参数 σ 和 c 确定 \[ f(x,\sigma,c)=e^{-\frac{(x-c)^2}{2\sigma^2}} \] 其中参数σ通常为正,参数 c 用于确定曲线的中心,
1
gaussmf(x,[σ,c])
三角形隶属函数
三角形曲线的形状由三个参数a,b,c确定 \[ f\left(x,a,b,c\right)=\begin{cases}0&\quad x\leq a\\\frac{x-a}{b-a}&\quad a\leq x\leq b\\\frac{c-x}{c-b}&\quad b\leq x\leq c\\0&\quad x\geq c&\end{cases} \] 其中参数a,c确定三角形的“脚”, 而参数b确定三角形的“峰”
1
trimf(x,[a,b,c])
梯形隶属函数
梯形曲线可由四个参数a,b,c,d确定 \[ f\left(x,a,b,c,d\right)=\begin{cases}0&\quad x\leq a\\\frac{x-a}{b-a}&\quad a\leq x\leq b\\1&\quad b\leq x\leq c\\\frac{d-x}{d-c}&\quad c\leq x\leq d\\0&\quad x\geq d&\end{cases} \] 其中参数a,d确定梯形的脚,b和c确定梯形的肩膀
1
trapmf(x,[a,b,c,d])
S形隶属函数
S形函数由参数a和c决定 \[ f(x,a,c)=\frac{1}{1+e^{-a(x-c)}} \] 其中,参数a的正负符号决定了S形隶属函数的开口朝左还是右,用来表示“正大”或“负大”
这里的这个公式其实是个特殊形式,非通的~问题不大,有兴趣再看
1
sigmf(x,[a,c]
Z形隶属函数
因形似Z而得名,参数a,b确定形状
1
zmf(x,[a,b])
广义钟形隶属函数
广义钟形隶属函数由是三个参数a,b,c确定 \[ f(x,a,b,c)=\frac{1}{1+\left|\frac{x-c}{a}\right|^{2b}} \] 其中参数a,b通常为正,参数c 用于确定曲线的中心
1
gbellmf(x,[a,b,c])
2.3 模糊推理
2.3.1 知识库
知识库是由数据库和规则库两部分构成
- 数据库:
- 数据库存放的是所有输入,输出变量的全部模糊子集的隶属度矢量值(即经过论域等级离散化以后对应值的集合);
- 若论域为连续域则为隶属度函数,在规则推理的模糊关系方程求解过程中,向推理机提供数据。
- 规则库:
- 基于人的经验,是按人的直觉推理的一种语言表达形式
- 通常由一系列的关系词连接而成,比如if-then,else,also,end,or
2.3.2 模糊规则
原理:
当 误差e很大 时:
应增大Kp来快速减小误差。
为避免积分饱和,应减小Ki。
当 误差变化率ec很大 时:
- 表示误差变化迅速,为避免过冲和积分饱和,应减小Ki。
- 为快速响应误差变化,应适当增大Kp。
当 误差e较小 时:
- Kp应减小或保持,以免系统产生振荡。
- Ki可以适当增加,以提高稳态精度。
当 误差变化率ec较小时:
- 说明误差趋于稳定,Kp减小或保持,Ki适当增加,提高精度。
截取csdn上的两个规则表如下:

增大kp能减少稳态误差,而且可以加快上升时间,峰值时间——动态性能。但是kp过大会产生较大的超调量。甚至导致系统不稳定——>等幅振荡——>发散振荡。

积分调节规律主要用于消除静差,但是如果积分作用过大,引起积分饱和(一丢丢的误差会被放大),导致超调量增加,所以要选择好合适积分系数,得到合适的超调量和消除误差。 当然积分系数不大,会产生误差。
再补充一下这玩意应该长啥样,
if E = NB or NM and EC = NB or NM then U = PB
2.3.3 模糊推理
实质:根据模糊规则表求取输出值U的隶属度。即根据模糊控制规则进行模糊推理,并决策出模糊输出量
Mamdani推理(最常用)
计算每条规则前件的触发强度
以规则为例:
IF 温度 IS 高 AND 湿度 IS 中 THEN 风扇 IS 快
设:
- 温度为“高”的隶属度 = 0.7
- 湿度 IS 中的隶属度 = 0.5
则该规则的匹配度(或激发强度)为两者取最小值: $$
$$
根据触发强度对后件隶属函数进行裁剪(常用最小法或乘积法)
使用前件匹配度对后件的模糊集合进行截取(取最小值):
- 假设规则1的后件:“风扇速度 IS 快”,最大隶属度为1
- 应用匹配度后:风扇 IS 快 的最大隶属度被截取为 0.7
重复此步骤对所有规则进行推理
合成规则
将各规则裁剪后的隶属函数取最大值叠加(即“取大”操作) \[ μ输出(x)=max(μ规则1(x),μ规则2(x),… )\mu_{\text{输出}}(x) = \max(\mu_{\text{规则1}}(x), \mu_{\text{规则2}}(x), \dots)μ输出(x)=max(μ规则1(x),μ规则2(x),…) \] 此时得到一个合成后的模糊输出集合。
规则1输出“强”截断为0.3,规则2输出“中”截断为0.5,最终聚合输出为两个截断区域的叠加。
Sugeno 推理法(更常用于数据驱动模型)
2.4 解模糊
模糊推理的输出是一个模糊集合,但实际控制信号需要具体的数值,因此要进行解模糊。
方法很多,简单列举俩,用到再学
质心法
质心法通过计算模糊输出集合的质心来确定控制值。 \[ y_{defuzz}=\frac{\int_yy\cdot\mu_Y(y)dy}{\int_y\mu_Y(y)dy} \] 这里,\[y_{defuzz}\]是最终的控制值,\[\mu_{Y}(y)\]是模糊输出集合的隶属度函数。
最大隶属度法
最大隶属度法选择模糊输出集合中隶属度最大的值作为最终的控制值: \[ y_{defuzz}=\arg\max_y\mu_Y(y) \]