关注作者了解更多
我的其他CSDN专栏
关注作者了解更多
资料来源于网络,如有侵权请联系编者
目录
[1. FIS编辑器:](#1. FIS编辑器:)
[2. 隶属函数编辑器](#2. 隶属函数编辑器)
[3. 模糊规则编辑器](#3. 模糊规则编辑器)
[4. 模糊规则观察器](#4. 模糊规则观察器)
[5. 输出曲面观测器](#5. 输出曲面观测器)
[1. 模糊集合及论域的定义](#1. 模糊集合及论域的定义)
[2. 模糊控制规则设计](#2. 模糊控制规则设计)
[3. 建立仿真模型](#3. 建立仿真模型)
基于MATLAB的模糊推理系统设计
模糊逻辑工具箱的介绍
模糊逻辑工具箱提供的图形用户界面(GUI)工具有五个:模糊推理系统(FIS)编辑器;隶属函数编辑器;模糊规则编辑器;模糊规则观察器;输出曲面观察器。
1. FIS编辑器:
Matlab的FIS界面如图1所示。FIS处理系统有多少个输入变量,输出变量,名称是什么,模糊算子"与"(min,prod乘积,custom自定义),"或"(max大,probor 概率统计方法,custom),推理方法(min,prod,custom),聚类方法(max,probor,sum,custom),解模糊的方法(centroid质心法,bisector中位线法,middle of maximum,largest of maximum,smallest of maximum)。
推理的类型有mamdani和sugeno 推理。
图1 模糊推理系统(FIS)界面
Mamdani推理:一种在模糊控制中普遍使用的方法,它本质上仍然是一种合成推理方法,只不过对模糊蕴涵关系取不同的形式而已。Mamdani型推理从每个规则的结果中得到的模糊集通过聚类运算后得到结果模糊集,被反模糊化后得到系统输出。
2. 隶属函数编辑器
确定各个变量的论域和显示范围(左下角编辑区内),如图2所示。定义每个变量的模糊集的名称和个数(Edit菜单中Add MFs),以及每个模糊变量的隶属函数类型和参数(点击变量的隶属函数曲线后在右下角编辑区内修改)。隶属函数的类型有:trimf,trapmf,gbellmf, gaussmf,gauss2mf,sigmf,dsigmf,psigmf,pimf,smf,zmf。
3. 模糊规则编辑器
完成了对变量的命名,隶属函数也有了适当的形状和名字,就可以编辑模糊规则。选择连接关系(and 或者or),权重,在编辑器左边选择一个输入变量,并选择它的语言值,然后在编辑器右边的输出变量中选择一个输出变量,并选中它的语言值,然后将这种联系添加到模糊规则中。
Options/Format 下可以选择模糊规则不同的格式,默认的是verbose(模糊规则的详细格式),还有symbolic(符号格式),indexed(高度压缩格式)
4. 模糊规则观察器
模糊规则观察器的功能是可以令用户观察模糊推理图,并观察模糊推理系统的行为是否与预期的一样。可以观察到输入变量(默认色是黄色)和输出变量(默认色是蓝色)如何应用在模糊规则中;反模糊化的数值是多少。
5. 输出曲面观测器
模糊规则观察器非常详细的显示了在某一个时刻的计算。如果看到模糊推理系统的全部输出曲面,即与整个输入区间相对应的输出区间,就要打开输出曲面观测器。View/view surface
(二)小费模糊推理系统设计
-
在MATLAB的命令窗口输入fuzzy命令,打开模糊逻辑工具箱的图形用户界面窗口,新建一个Madmdani模糊推理系统
-
增加一个输入变量,在弹出的窗口中选择Edit→Add Variable→input;在name中更改input1为"service",input2为"food",output为"tip",建立了一个两输入单输出模糊推理系统框架。
- 双击变量图标进行模糊化模块设计:
(1)打开Membership Function Editor窗口,在Range和Display Range中设置隶属函数图的取值范围,将两个输入变量的论域均设为[0,10],输出论域为[0,30]。
(2)选择Edit→Add MFs→numbers of MFs 中选择模糊集个数
通过增加隶属度函数来进行模糊空间划分。
输入变量service划分为三个模糊集:更改mf1~mf3的参数,分别命名为poor、good和excellent,隶属度函数均为高斯函数( 'gaussmf'),参数分别为[1.5 0]、[1.5 5]和[1.5 10]。
输入变量food划分为两个模糊集:rancid和delicious,隶属度函数均为梯形函数('trapmf '),参数分别为[0 0 1 3]和[7 9 10 10]。
输出变量tip划分为三个模糊集:cheap、average和generous,隶属度函数均为三角形函数('trimf'),参数分别为[0 5 10]、[10 15 20]和[20 25 30]。
- 设置模糊规则:打开Rule Editor窗口,通过选择添加三条模糊规则:
① if (service is poor) or (food is rancid) then (tip is cheap)
② if (service is good) then (tip is average)
③ if (service is excellent) or (food is delicious) then (tip is generous)
三条规则的权重均为1。
- 模糊推理参数均使用默认值,通过曲面观察器(View→Surface)查看小费模糊推理的输入输出关系曲面。通过规则观察器(View→Rules)查看对具体输入的模糊推理及输出情况,输入各种不同的数据,查看模糊推理情况及输出数据。
- 增加规则,查看曲面的变化、推理输出的变化。
(三)水箱液位模糊控制系统设计
-
打开模糊工具箱的图形用户界面窗口,新建一个Madmdani模糊推理系统。
-
增加一个输入变量,将输入变量命名为level、rate,输出变量为valve,这样建立了一个两输入单输出模糊推理系统,保存为tank.fis。
-
设计模糊化模块:将输入变量rate的论域设为[-0.1,0.1],另外两个变量采用论域[-1,1]。
通过增加隶属度函数来进行模糊空间划分。
输入变量level划分为三个模糊集:high、okay和low,隶属度函数均为高斯函数,参数分别为[0.3 -1]、[0.3 0]和[0.3 1];
输入变量rate划分为三个模糊集:negative、none和positive,隶属度函数均为高斯函数,参数分别为[0.03 -0.1]、[0.03 0]和[0.03 0.1];
输出变量valve划分为五个模糊集:close_fast、close_slow、no_change、open_slow和open_fast,隶属度函数均为三角形函数,参数分别为[-1 -0.9 -0.8]、[-0.6 -0.5 -0.4]、 [-0.1 0 0.1]、[0.2 0.3 0.4]和[0.8 0.9 1]。
- 设置模糊规则:打开Rule Editor窗口,通过选择添加三条模糊规则:
①if (level is okay) then (valve is no_change)
②if (level is low) then (valve is open_fast)
③if (level is high) then (valve is close_fast)
④if (level is okay) and (rate is positive) then (valve is close_slow)
⑤if (level is okay) and (rate is negative) then (valve is poen_slow)
五条的权重均为1。
- 通过曲面观察器(Surface Viewer)查看水箱液位模糊推理的输入输出关系曲面。通过规则观察器(Rule Viewer)查看对具体输入的模糊推理及输出情况。
模糊控制系统设计
(一)模糊控制器设计
1. 模糊集合及论域的定义
选定误差E和误差变化EC作为模糊控制器的输入(二维模糊控制器),控制量U作为模糊控制器的输出。E、EC及U的模糊集定义如下:
E、EC和U的模糊集均为{NB, NM, NS, O, PS, PM, PB}
E和EC的论域为{-6、-5、-4、-3、-2、-1、0、1、2、3、4、5、6}
U的论域为{-7、-6、-5、-4、-3、-2、-1、0、1、2、3、4、5、6、7}
上述3个模糊集合都选取了7个元素,主要目的是着眼于提高稳态精度。E、EC和U的隶属度函数图形如图所示:
2. 模糊控制规则设计
表1 模糊控制规则
|--------|----|----|----|----|----|----|----|
| U E EC | NB | NM | NS | 0 | PS | PM | PB |
| NB | PS | PS | PS | PS | PM | PB | PB |
| NM | NS | PS | PS | PS | PM | PM | PB |
| NS | NM | NS | 0 | 0 | PS | PM | PM |
| 0 | NB | NM | NS | 0 | PS | PM | PM |
| PS | NB | NM | NS | 0 | 0 | PS | PM |
| PM | NB | NB | NM | NS | NS | PS | PS |
| PB | NB | NB | NM | NS | NS | NS | PS |
(要输入49条,真心心累)
进行模糊控制仿真时,首先要将FIS发送到Matlab工作空间(workspace)中,用FIS窗口下File/Export/to workspace实现,用户建立一个工作空间变量名(例如fuzzy control),这个变量将FIS系统作为Matlab的一个结构进行工作。仿真时,打开fuzzy logic controller,输入FIS变量名,就可以进行仿真了。
3. 建立仿真模型
在MATLAB的simulink仿真环境中建立模糊控制系统的方框图,如图4所示。系统所选用的参数Saturation、Saturation1、Saturation2的范围分别为[-6 6]、[-6 6]、[-7 7],Transport Delay=2s。
通过调试得到PID模糊控制的参数:Gain1=0.6,Gain=2.1,Gain2=0.11。
(手动在simulink上搭建)
- 仿真结果
系统的阶跃响应曲线如图5所示,其中上方的曲线代表系统的阶跃响应,下方的曲线是系统的模糊控制量的变化。
(停止时间设100s就行)
(二)分析模糊控制隶属度函数对控制效果的影响
如下图所示改变模糊控制器中的隶属度函数为梯形隶属函数。
图6 E的隶属度函数
图7 EC的隶属度函数
图8 U的隶属度函数
记录此时系统的阶跃响应曲线,分析梯形隶属度函数和三角形隶属度函数对控制效果的影响,撰写实验报告。
(三)系统参数对控制效果的影响
改变系统参数进行仿真,记录系统的阶跃响应曲线,依次分析以下三种情况对控制效果的影响,撰写实验报告。
K=25
K=30
K=35