当前位置:文档之家› 模糊控制

模糊控制

模糊控制
模糊控制

1、

由于s12xs没有了模糊指令,使单片机运用模糊控制增加了不少难度,但经过研究发现,还是可以通过matlab接口来实现的,本人也在努力中,希望有更多的人来共同研究~

对于实际模糊控制系统,由于在高级语言中模糊控制程序的实现比较复杂,因

此引入模糊控制存在一定的困难,程序代码的过于复杂也会严重影响模糊控制系

统的开发周期。而Matlab 系统及其工具箱中提供了一些能够独立完成某些Matlab

功能的C/C++库函数,这些库函数可以直接应用到C/C++平台中,脱离系统完成

Matlab 某些功能,极大的方便了实际应用。Matlab Fuzzy Logic 工具箱的独立C

代码就是一个这样的C 语言库[1]。

独立的C 代码模糊推理引擎函数库fis.c 位于Matlab 目录下的

toolbox\fuzzy\fuzzy 目录中,它包含了在C 语言环境下调用Matlab Fuzzy Logic

工具箱建立的模糊推理系统的数据文件(*.fis)进行模糊逻辑推理的一系列C 函

数,其基本原理是利用C 代码实现Matlab 中的模糊推理系统(FIS)功能。该目录

下还有一个C 代码程序fismain.c,它实际上是利用fis.c 库函数来实现模糊推理系

统的一个实例。

正确地熟悉了fis.c 库函数中的函数定义,在应用程序中正确调用,即可实

现模糊推理系统功能。例如,从Matlab 的模糊推理系统文件(*.fis)读入系统数据,

可用下面的语句:fisMatrix=returnFismatrix(fis_file,&fis_row_n,&fis_col_n);建立基于C 代码的模糊推理系统,可用下面的语句:

fisBuildFisNode(fis,fisMatrix,fis_col_n,MF_POINT_N)。

但是需要说明的是,在独立C代码函数库fis.c 中只定义了Matlab Fuzzy Logic

工具箱的11 种隶属函数以及AND、OR、IMP 和AGG 四种逻辑操作函数。所以

在利用Matlab 的模糊逻辑工具箱建立用于独立C 代码引擎的模糊推理系统时,

不允许采用自定义的隶属度函数和逻辑操作函数来设计系统,除非修改fis.c 函

数库[2]。

设计基于独立的C 代码模糊推理引擎的模糊控制程序主要有以下两个步骤:

(1) 利用Matlab 的模糊逻辑工具箱建立一个模糊推理系统,并将系统存

为扩展名为fis 的数据文件。注意只能使用Matlab 定义的隶属度函数

和逻辑操作函数,

(2) 在C 语言应用程序中实现Matlab 中定义的模糊推理系统功能。两者之间的接

口就是独立C 代码模糊推理引擎函数库fis.c。

2、

基于S12的模糊控制调试心得

小可不才在博客发了一篇有关S12的模糊控制的日志(《MC9S12DG128模糊控制崩溃之旅》)。并跟一些志同道合的网友展开了较为深入的讨论。现应部分网友同仁的要求将我调试成功的心得体会写在如下,由于本人也只是懂得一些皮毛,而且有很多问题并未深究,难免有不妥或错误之处,还请各位包涵并指正,谢谢!

在此以飞思卡尔智能小车的方向控制为例,文中可能会提到一些变量,但不会对该变量作深入的探究,敬请原谅!

首先必须明确你的被控量是什么?它的变化范围(即论域)多大?它是不是可以由S12的模糊机输出?隶属度函数是什么类型的?

然后是模糊控制的两个输入量是什么?它们的论域是多大?是否要量化?隶属度函数是什么类型的?

在这里,被控量是小车转角,向上回朔是舵机的转角,再向上就是用来控制舵机的PWM波的占空比,也就是说你的被控量是PWM波的占空比;一旦你的舵机安装方式确定后,小车前轮的左右极限转角也就定死了,也就是说你的PWM波的占空比的变化范围也就确定了,即被控量的论域确定了,以我的为例是1225到1725,显然S12的模糊机无法直接输出这么大的数值,在此对于输出量的隶属度函数我选用的是单值的,对应9个等级(0-8),即对应9个PWM占空比值,即对应9个角度值。模糊语言等级、输出等级以及实际PWM占空比值的对应关系如下。

该对应关系在代码中就是:

//输出角度等级的隶属度函数

const uchar OUTPUT_MFS[9]={

0,1,2,3,4,5,6,7,8

};

如果说你要的输出量是一个浮点型的,即带小数。我通常采用的方法是将输出量同比增大10倍或是100倍,如果允许增大那么多倍的话。这样你的输出就可以是uchar的拉,要还原成小数的话,只要在后续的运算中相应地除以10或100.

输出确定之后,你可以先不管模糊控制的中间过程,而是应该先确定你的控制输入量。在此选择了赛道黑线的弯曲程度(curve)以及车体的位置(av_loca)。经实际测量发现它们的论域分别是curve:-32—32;av_loca:0—80。当然我在测量时没有穷尽所有的情况,所以curve 的论域可能比上面还要大,但是实际上用上面的论域来做控制以及足够了,因此在程序中加了一段防止论域溢出的代码。

//防止越界

if(curve < -32) curve = -32;

else if(curve > 32) curve = 32;

在建立输入量的隶属度函数时,我选用的是三角函数。至于为什么要选三角函数,它相对于其他类型的函数有什么优缺点并未深究。当划分好模糊等级后,便是量化输入,在此推荐将

输入量经行量化,为什么要量化?我的理解是:由于有两个输入量,且它们的论域不一样,为了保证它们在进行模糊计算时的横、纵坐标的变化范围能保持一致,这样有利于计算前、后沿斜率。而且很多时候输入量是小数,那就更要量化了。仅是我个人的体会,或许不对。对于curve的量化过程如下:

fuzzy_input_1 = (uchar)((curve + 32) << 2);

同样要防止越界,因为uchar型的范围是0—255.由于如何建立一个较好的隶属度函数,实际上是比较难的,在此只是一个示意。

有关有网友提出精确的输入是如何对应到论域中去的。我的理解是这样:以上图为例,如果输入的精确值是6,那么它肯定对应就是小右这个等级,但是如果是4,那就要看4为小右的比例大还是零的比例大了。也就是说跟你的隶属度函数有关了。

好了,关于输入、输出量总结一下:确定它的论域;划分好它的模糊等级,通常跟主观经验和要求有关;做好量化及防止越界工作;隶属度函数的建立实际上很难,同样跟主观经验和要求有关,最好能用MA TLAB仿真一下。

下面是我对于C语言的模糊代码格式的一些理解。

uchar FUZ_INS_1[18];

uchar FUZ_OUTS_1[9];

这样的写法是表示在FUZ_INS为首地址后预留18个字节或FUZ_OUT后预留9个字节的空间,为后续的模糊机推理时预备调度空间。

const uchar INPUT_MFS_1[18][4]={

0x00,0x10,0x00,0x20,

0x0c,0x20,0x10,0x10,

0x28,0x60,0x09,0x09,

0x5c,0x74,0x15,0x15,

0x6c,0x94,0x0d,0x0d,

0x8c,0xa4,0x15,0x15,

0xa0,0xd8,0x09,0x09,

0xd4,0xf4,0x10,0x10,

0xf0,0xff,0x20,0x00,

0x00,0x2d,0x00,0x11,

0x1e,0x3c,0x11,0x11,

0x2d,0x4b,0x11,0x11,

0x3c,0x5a,0x11,0x11,

0x4b,0xa5,0x05,0x05,

0x96,0xb4,0x11,0x11,

0xa5,0xc3,0x11,0x11,

0xb4,0xd2,0x11,0x11,

0xc3,0xf0,0x11,0x00

};

以上是两个输入量的隶属度函数的代码表示格式,实际上并不需要一定写成16进制的格式,写代码是直接写成10进制也可以。一行数据的含义是:起点、终点,前沿斜率、后沿斜率。

关于模糊规则库,它的建立很大程度上是根据调试经验来做的,不过能用MATLAB仿真一下最好。

const uchar RULE_START_1[406]={

(9*0)+0,(9*1)+0,0xfe,(9*0)+0+18,0xfe, //no.1

(9*0)+0,(9*1)+1,0xfe,(9*0)+0+18,0xfe, //no.2

(9*0)+0,(9*1)+2,0xfe,(9*0)+0+18,0xfe, //no.3

(9*0)+0,(9*1)+3,0xfe,(9*0)+1+18,0xfe, //no.4

(9*0)+0,(9*1)+4,0xfe,(9*0)+2+18,0xfe, //no.5

(9*0)+0,(9*1)+5,0xfe,(9*0)+2+18,0xfe, //no.6

(9*0)+0,(9*1)+6,0xfe,(9*0)+3+18,0xfe, //no.7

(9*0)+0,(9*1)+7,0xfe,(9*0)+3+18,0xfe, //no.8

(9*0)+0,(9*1)+8,0xfe,(9*0)+4+18,0xfe, //no.9

我的理解:“0xfe”是前件与后件的分隔符,“0xff”是规则库结束符。对于上面某一行规则的第二个“0xfe”是否要该成“0xff”,暂时还没有做实验,不过我最终程序中的格式是“0xfe”。还有诸如“(9*0)+0”是完全合法的。其他等我做完试验会立即发布最新调试心得。

3..

基于模糊控制的智能车调速系统的设计

基于模糊控制的智能车调速系统的设计

程宇,程磊,黄卫华, 孙浩

(武汉科技大学信息科学与工程学院,湖北武汉, 430081)

摘要:设计了一种基于模糊参数自整定的模糊控制智能小车调速系统,该智能车调速系统核心控制单元采用飞思卡尔半导体公司的HCS12 单片机。实验证明,该智能车调速系统能很好地满足小车在前进过程中对速度调节的快速响应和稳态误差小的要求,系统具有较好的动态性能和良好的鲁棒性。

关键词:参数自整定;模糊控制;智能小车调速系统

模糊控制器的参数整定是智能车控制系统中一个十分重要的环节。传统的车速控制方法有PID 控制、最优控制等。模糊控制的特点是控制响应快,对于不确定性因素的适应性强。文献[ 1 ]采用Fuzzy2PI 控制策略进行直流电机的调速系统设计,克服了简单模糊控制和传统PI 控制的一些缺点。文献[ 2 ]介绍了一种基于参数自整定的模糊控制单片机直流无刷电动机调速系统,采用参数自整定模糊控制器,使系统具有较高的控制精度和良好的鲁棒性。文献[ 3 ]提出一种应用模糊推理功能实现PID 参数自整定的控制方法,可根据船舶动态特性的变化,自动重新整定PID 参数,从而改善了操纵性能和鲁棒性。文献[4 ]提出了利用自适应模糊PID 控制器实现对永磁无刷直流电机调速系统进行设计的新方法,通过自适应因子将模糊控制器和PID 控制器结合,在线自调整控制参数,从而完善了PID 控制器的性能,提高了系统的控制精度。本研究着重分析智能车控制系统中最重要的速度控制问题,从传统的模糊控制思想出发,根据智能车前进过程中对速度调节的具体要求与行驶速度的实际情况,提出了糊参数自整定的模糊控制方法,实验证明,该方法克服了传统模糊控制的局限性,更适合智能车的速度调

节。

1 调速系统的分析与普通模糊控制

方案

1. 1 智能车调速系统的分析

智能车的基本导航原理为:利用机器视觉,通

过识别条带状路标,实现自主导航,即智能车能在

白色的场地上按照任意给定的黑色引导线行驶,

车速越快则表明智能车性能越好。为了使智能车

在尽可能短的时间内跑完赛道,小车必须达到两

项标准: ①传感器检测到黑线在正中心时,判断当

前赛道为直线,此时小车应尽量升速,在保证稳定

的情况下使小车以最快的速度沿直线前行; ②传

感器检测到黑线在两旁时,判断当前赛道为弯道,

此时转向舵机应作出相应的响应,使小车转过一

定的角度。这时车速应在短时间内迅速下降,否

则小车将冲出赛道。因此小车速度控制的响应时

间和控制精度对小车性能的提高尤为重要。

1. 2 普通模糊控制方案的设计

对于智能车系统而言,小车的速度控制是难

点。本课题着重对小车遇到的连续曲线(正弦曲

线) 形赛道进行研究。由于舵机需频繁的左右转

向,小车前面的传感器会频繁检测到直道和弯道

的信息,其车速需作频繁相应调整。这种情况下,

2007 年第4 期程宇,等:基于模糊控制的智能车调速系统的设计根据赛道的不同曲率,小车要以不同的速度行驶。

普通模糊控制系统图如图1 所示。图1 中r

3 为

速度设定值, r 为速度反馈值。

图1 传统模糊控制器的速度控制系统

智能车系统通过检测赛道的当前位置,设定

不同的模糊控制器输入值即速度给定值,将速度

的偏差和偏差变化率模糊化,通过一定的模糊推

理规则和反模糊化输出控制量,对速度进行控制,

使其达到给定值。当速度给定值不需要频繁变化

时,在设定好合适的控制器参数的情况下,普通模

糊控制器能很好地对车速进行调节,控制精度和

响应时间均能满足要求。但由于小车行驶的赛道的不确定性,小车速度的给定值需频繁变化,而普

通的模糊控制器只有一组参数,对于给定值的频

繁变化,控制器调节效果不佳。其主要原因是: ①普通模糊控制器参数单一导致响应时间较长,此

时小车在进入弯道过程中会因速度过快而冲出赛道,在出弯道时因速度提升较慢而影响小车的整

体速度; ②小车硬件配置、小车质量等因素的变化都会对模糊参数产生很大影响,这时要达到最佳

的控制效果则需要重新调节模糊参数。

2 参数自整定模糊控制器的设计

为克服普通模糊控制器参数单一、响应时间

过长和适应能力低的缺点,本研究设计了一种参

数自整定的模糊控制器,以实现模糊参数的自整定。这种参数自整定的模糊控制方法是在普通模糊控制的基础上,根据赛道的不同,利用当前传感

器检测到的赛道曲率变化情况动态地调节模糊控制器参数,从而实现智能车的自动调速。当小车

由直道驶入弯道时,小车立即减速,以确保不会冲

出赛道;当小车驶出弯道而进入直道时,小车立刻

加速并达到稳定,以提高小车的整体车速。

参数自整定模糊控制器比普通模糊控制器多

了两个环节,即:角度采样环节、模糊参数自整定

环节。系统结构如图2 所示。图2 中α为系统的角度采样值, r

3 为速度设定值, r 为速度反馈值。

系统通过实时角度采样, 由微分环节计算出赛道的角度变化率,通过修正规则得出此时的模糊控

制参数,即车速偏差e 和车速偏差变化ec 的模糊论域大小,通过一系列模糊化、模糊推理和反模糊化的过程,从而形成参数自整定模糊控制器。在

保有普通模糊控制器优点的同时,参数自整定模

糊控制器,通过路径检测得出赛道的当前信息,根

据赛车方向相对于赛道方向的角度变化率进行模糊参数的自整定,从而更好地满足智能车系统对

速度给定变化大的要求,既缩短了系统的响应时

间,又增强了系统的适应能力。

图2 基于参数自整定模糊控制器

的速度控制系统

2. 1 模糊子集的选取

根据智能车的速度控制精度要求及操作经

验,设定角度偏差变化、车速偏差、车速偏差变化和输出控制量的模糊变量分别为ec

3

, e , ec 和u ,

其相应论域EC

3

, E, EC 和U 分别设计为

EC

3 = { 0 ,2 ,4} ; E = { - 20 , - 10 ,0 ,10 ,20}

EC = { - 5 ,0 ,5} ;U = { - 400 , - 200 ,0 ,200 ,400}

对角度偏差变化ec

3

, 车速偏差e , 车速偏差

变化ec 和控制量u 的模糊子集分别取为{ Z , PS , PB} , { N B , N S , Z , PS , PB } , { N B , Z , PB } 和{ N B , N S , Z , PS , PB} 。

为了实现和处理方便, ec

3

, e , ec 和u 的隶属

度函数均取线性函数, 其隶属度函数μ如图3 所示。

图3 角度偏差变化、车速偏差、车速偏差变化、输出控制量的隶属度函数

2. 2 模糊规则表

模糊规则表是模糊控制器中模糊推理的依

据,根据智能车的运行特性及控制经验,设计模糊

控制器的模糊规则表如表1 所示。

表1 U 的模糊推理规则表

EC

E

N B N S Z PS PB

N B N B N S N S Z PB

Z N B N S N S PS PB

PB N B Z PS PS PB

389

武汉科技大学学报(自然科学版) 2007 年第4 期设定参量EC*

1 为角度偏差变化ec

3 论域中

的PB 值, E1 , EC1 分别为e , ec 的论域中的PB 值, e 的论域中PS 的值为PB 值的二分之一。参数自整定的修正规则为:当EC

3

1 为零时, E1 和

EC1 均取正大;当EC

3

1 为正小时, E1 和EC1 均取

正中; 当EC

3

1 为正大时, E1 和EC1 均取正小。

e , ec的论域E , EC的修正规则参数表如表2

所示。

表2 e , ec 的论域E , EC的修正规则参数

EC

3

1 0 1

2

3

4

5 6

E1 40 40 20 20 20 15 15

EC1 5 5 3 3 3 2 2

2. 3 模糊推理及反模糊化

控制器经模糊化得到各变量的隶属度, 再经

模糊推理和反模糊化得出控制量的输出值, 达到控制的作用。本系统中模糊推理采用最大2最小法,设定e , ec , u 的隶属度分别为μE ,μEC ,μU ,即μU

k

( E, EC) = min{μE

i

,μEC

j } (1)

μU

k

( E, EC) = min{μE

i

( E) ,μEC

j

( EC) } (2)

μU ( E, EC) = max{μUk ( E, EC) } (3)

( i = NB , NS , Z , PS , PB ; j = NB , Z , PB )

反模糊化采用加权平均法,即

U

= ΣμU U

ΣμU

(4)

3 实验结果及分析

本研究分别对小车的循迹功能和车速控制功

能进行了实验。对小车循迹功能实验通过控制舵

机的转向角实现;对车速控制功能通过传统模糊

控制与参数自整定模糊控制对比实验完成。

3. 1 小车循迹功能实验

通过采集当前路况信号,对舵机的转向角进

行控制,以实现对小车循迹功能的控制。在舵机

工作电压为6. 5 V 时,所输入的脉冲宽度( PWM)

信号与舵机输出的转角一一对应。实验测得,舵

机角度从左转- 45°至右转45°对应的输入PWM

信号范围为13. 1 ~16. 5 ms (信号周期为200 ms) 。

具体的舵机转角与PWM 对应关系如表3 所

示;实验测得小车运行轨迹平滑,其导航图和循迹

图分别如图4 和图5 所示。图5 中细线为任意给定的黑色引导线,粗线为小车循迹所行驶的曲线。

表3 舵机转角与PWM对应关系表

舵机转角/ (°) - 45 - 30 - 15 0 15 30 45

PWM 信号/ ms 16. 5 15. 9 15. 3 14. 7 14. 2 13. 6 13. 1

图4 智能车导航图

图5 智能车循迹图

3. 2 小车速度控制功能实验

在小车给定的3 档速度情况下,进行传统模糊控制器和参数自整定模糊控制器对智能车速度控制的对比实验, 其控制速度曲线的比较如图6所示。图6 中,纵轴为在采样周期内( T = 0.

01 s)车速检测单元检测到的脉冲数, 横轴为采样周期整倍数。

图6 实验结果比较曲线

1 —速度设定值曲线;

2 —模糊控制响应曲线;

3 —参数自整定模糊控制响应曲线从图6 中可看出,传统模糊控制用于智能车系统时,响应时间太长,且调节过程中会产生较大幅度的振荡,小车会因降速过程所需时间太长或速度调节振幅过大等原因, 在进入弯道时冲出赛道,或因速度下降太低不利于提高整体车速。当采用带参数自整定的模糊控制算法后, 小车在减速时能在较小的振幅范围内快速调节到设定值,从而保证了小车的平稳过渡且不影响整体速度。

4 结语

设计了一种参数自整定的模糊控制器, 将其3902007 年第4 期程宇,等:基于模糊控制的智能车调速系统的设计用于智能小车的调速系统,实验证明,与传统模糊控制器相比,参数自整定的模糊控制器大大提高了系统性能;通过角度采样对模糊参数进行自整定,克服了传统模糊控制器用于智能车系统中参数的适应性不强的缺点,减小了超调量,改善了动态特性,提高了系统的鲁棒性,从而使得小车的调速性能良好。

基于8051的模糊控制程序

模糊控制, 程序

记录付费主题, 价格:贡献 1

#include

#include

#define GAP_ZERO 0x00

#define GAP_VSMALL 0x01

#define GAP_SMALL 0x02

#define GAP_MEDIUM 0x03

#define GAP_BIG 0x04

// 定义控制输出常量

#define TURN_ZERO 0x80

#define TURN_VSMALL 0x81

#define TURN_SMALL 0x82

#define TURN_MEDIUM 0x83

#define TURN_BIG 0x84

//-------------定义常量

----------------------------------------------------------------

#define MU_MAX 0XFF //模糊度的最大值为0XFF代表面

1

#define RULE_TOT 10 //规则数个数

#define MF_TOT 5 //成员函数的个数

#define IO_NUM 0x07

#define LABEL_NUM 0x70

#define DEFAULT_VALUE 0x00

//----------------定义数据库

-----------------------------------------------------------

unsigned char code output_memf[MF_TOT]={0, 15, 35, 60, 102};// OUTPUT TURNING

NUMBER:

//ZERO, VSMALL,

SMALL, MEDIUM, BIG

unsigned char code input_memf[MF_TOT][4]={

// 输入功能函数以点斜式方式存储. 第一维成员函数标号第二维是点斜式数据

//距离功能函数

{ 0x00, 0x00, 0x00, 0x0d }, // VSLOW

{ 0x00, 0x0d, 0x14, 0x0d }, // SLOW

{ 0x1e, 0x0d, 0x32, 0x0d }, // MEDIUM

{ 0x3C, 0x0d, 0x50, 0x0d }, // FAST

{ 0x50, 0x09, 0x6e, 0x00 } // VFAST

};

//-----------定义模糊系统规则

-----------------------------------------------------------

unsigned char code rules[RULE_TOT]={

// if... then...

GAP_ZERO,TURN_ZERO,

GAP_VSMALL,TURN_VSMALL,

GAP_SMALL,TURN_SMALL,

GAP_MEDIUM,TURN_MEDIUM,

GAP_BIG,TURN_BIG

};

//-----------定义各变量

-----------------------------------------------------------------

unsigned char outputs[MF_TOT],fuzzy_out; //模糊输出mu值

//-----------子程序函数头申明

-----------------------------------------------------------

void fuzzy_engine(unsigned char);

unsigned char compute_memval(unsigned char,unsigned char);

void defuzzify(void);

/*****************************************************************************

**********************************/

unsigned char compute_memval(unsigned char input,unsigned char label)

{

int data temp;

if (input < input_memf[label][0])

{ // 如果输入不在曲线下u值为0

return 0;

}

else

{

if (input < input_memf[label][2])

{

temp=input; // 用点斜式计算mu temp-=input_memf[label][0];

if (!input_memf[label][1])

{

temp=MU_MAX;

}

else

{

temp*=input_memf[label][1];

}

if (temp < 0x100)

{ // 如果结果不超过1

return temp; // 返回计算结果

}

else

{

return MU_MAX; // 确保mu值在范围内

}

}

else

{ // 输入落在第二条斜线上 temp=input; // 用点斜式方法计算 mu temp-=input_memf[label][2];

temp*=input_memf[label][3];

temp=MU_MAX-temp;

if (temp < 0)

{ // 确保结果不小于0

return 0;

}

else

{

return temp; // mu为正 - 返回结果

}

} }

return 0;

} /*****************************************************************************

**

Function: defuzzify

Description: 计算模糊输出的重心并调用函数把它

转换成可被系统使用的输出量

Parameters: 无.

Returns: 无.

Side Effects: outputs[][] 数组被清零.

******************************************************************************

*/

void defuzzify(void)

{

unsigned long numerator, denominator;

unsigned char j;

numerator=0; // 恢复总数值

denominator=0;

for (j=0; j

{ // 计算总和值

numerator+=(outputs[j]*output_memf[j]);

denominator+=outputs[j];

outputs[j]=0; // 清零输出作为参考使

用 }

if (denominator)

{ // 确保分母是0的情况不发

fuzzy_out=numerator/denominator; // 确定 COG }

else

{

fuzzy_out=DEFAULT_VALUE; // 没有规则被触发

} }

}

/*****************************************************************************

**

Function: fuzzy_engine

Description: 实施规则基中的规则

Parameters: 无

Returns: 无.

Side Effects: 无

******************************************************************************

**/

unsigned char bdata clause_val; // 保存当前的分支进行快

速访问

sbit clause_type = clause_val^7; // 表示分支是否是条件分

支或者是结果分支

void fuzzy_engine(unsigned char input)

{

bit then; // 当正在分析结果时置位 unsigned char if_val, // 保存当前规则中条件分

支中的值

clause, // 规则基中当前的分支 mu, // 保存当前分支中的值

label=0; // 被条件使用的成员函

then=0; // 设第一个分支是条件分

if_val=MU_MAX; // max out mu for the

first rule

for (clause=0; clause

if (!clause_type)

{ // 当前的分支是不是条件

分支

if (then)

{ // 是否正在分析结果...

then=0;

if_val=MU_MAX; // 复位mu

}

mu=compute_memval(input, label); // 得到条件分支的值

if_val=mu;

label++;

}

else

{ // 当前分支是结果

then=1; // 置位标志位,如果当前规则的mu比参考的值要

大,保存这个值作为新的模糊输出

if (outputs[clause_val&0x07] < if_val)

{

outputs[clause_val&0x07]=if_val;

}

}

}

defuzzify(); // 用COG方法计算模糊输出和反模糊输出

}

模糊控制的优缺点

模糊控制的优缺点

————————————————————————————————作者:————————————————————————————————日期:

1.模糊控制中模糊的含义 模糊控制中的模糊其实就是不确定性。从属于该概念和不属于该概念之间没有明显的分界线。模糊的概念导致了模糊现象。 2.模糊控制的定义 模糊控制就是利用模糊数学知识模仿人脑的思维对模糊的现象进行识别和判断,给出精确的控制量,利用计算机予以实现的自动控制。 3.模糊控制的基本思想 模糊控制的基本思想:根据操作人员的操作经验,总结出一套完整的控制规则,根据系统当前的运行状态,经过模糊推理,模糊判断等运算求出控制量,实现对被控制对象的控制。 4.模糊的控制的特点 不完全依赖于纯粹的数学模型,依赖的是模糊规则。模糊规则是操作者经过大量的操作实践总结出来的一套完整的控制规则。 模糊控制的对象称为黑匣(由于不知道被控对象的内部结构、机理,无法用语言去描述其运动规律,无法去建立精确的数学模型)。但是模糊规则又是模糊数学模型。 5 模糊控制的优缺点及需要解决的问题分析 5.1模糊控制的优点 (1)使用语言方便,可不需要过程的精确数学模型;(不需要精确的数学模型) (2)鲁棒性强,适于解决过程控制中的非线性、强耦合时变、

滞后等问题;鲁棒性即系统的健壮性。 (3)有较强的容错能力。具有适应受控对象动力学特征变化、环境特征变化和动行条件变化的能力; (4)操作人员易于通过人的自然语言进行人机界面联系,这些模糊条件语句容易加到过程的控制环节上。 5.2模糊控制的缺点 (1)信息简单的模糊处理将导致系统的控制精度降低和动态品质变差; (2)模糊控制的设计尚缺乏系统性,无法定义控制目标。 6.模糊数学 模糊数学就是利用数学知识研究和解决模糊现象。在数学和模糊现象之间架起了一座桥梁。 6.1模糊集合的概念 每一个概念都有内涵和外延。 内涵就是指概念的本质属性的集合。外延就是符合某种本质属性的全体对象的集合。 模糊数学的基础就是模糊理论集。 在模糊集合设计到的论域U 上,给定了一个映射A,A :U →[0,1] ,)(x x A μ ,则称A 为论域U 上的模糊集合或者模糊子集; )(x A μ表示U 中各个元素x 属于集合A 的程度,称为元素x 属于模糊集合A 的隶属函数。当x 是一个确定的0x 时,称)(0x A μ为元素0x 对于模糊集合A 的隶属 度。 F 集合引出的几个概念

2模糊控制查询表的MATLAB实现

模糊控制查询表的MATLAB 实现 叶高文(厦门海洋职业技术学院,福建厦门361012) MATLAB realization of Fuzzy Control Query Table 在运用模糊控制技术进行工业控制时,为了减少在线计算量,节省内存,提高PLC 等控制器的运行效率,通常根据隶属度函数和模糊控制规则表离线计算对应的模糊控制表,并将该表置于PLC 等控制器中,供实时控制时使用。在实时控制过程中,根据模糊量化后的偏差值e 和偏差变化率ec 直接查询控制表以获得模糊控制输出量,再转换为精确输出控制量。在实际的控制过程中由于微分作用的效果不是很明显,故很多实际情况中只采用PI 控制。本文论述的对象是常用PLC 的模糊PI 控制。不是PLC 的系统,可将积分时间转换为积分系数。 1模糊PI 控制模型说明 本文提供一个实际工业控制的模糊查询表的MATLAB 实 现过程,模糊PI 模型如图1。 图1模糊PI 控制器模型 如图1,模糊控制器的输入量采用实际被控制量与给定量的偏差e 和偏差变化率ec ,参数整定机构采用增量型调整原理,输出为比例系数增量ΔK P 和积分时间增量ΔTi ,再经式K P = K P0+ΔK P 和式T I =T I0+ΔTi 计算得到PI 控制器的比例系数KP 和积分时间值TI 。 2模型输入输出模糊控制规则表 2.1定义输入输出变量的隶属度矢量表 一般情况下,输入量偏差e 和偏差变化率△e 以及输出变量ΔKP 和ΔTi 的离散论域都设定为13个量化等级邀-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6妖。为方便MATLAB 编程,对相关的变量选择进行一些改变。原先的输入变量偏差e 和偏差变化率ec 的量化等级邀-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6妖改写为邀1,2,3,4,5,6,7,8,9,10,11,12,13妖。而输出变量ΔKP 和ΔTi 得量化等 级保持为邀-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6妖。 输入变量偏差e 和偏差变化率ec 和输出变量ΔKP 、ΔTi 的模糊语言值均为邀NB ,NM ,NS ,ZO ,PS ,PM ,PB妖。为了编程方便,将语言值用数字表示为邀1,2,3,4,5,6,7妖,与模糊语言值相对应,比如:模糊语言值NB 的模糊数字值为1,其他类似。根据以上的规定,产生用数字语言值表示输入变量x1及x2的隶属度矢量表,见表1所示。其中,变量x1表示模糊控制器的偏差输入e ,变量x2表示模糊控制器的偏差输入ec ;f1(i )、f2(j )表示第一输入x1和第二输入x2的隶属度,而i 、j 表示语言变量数字值,即为1,2,3,4…7。 表1用数字语言值表示输入变量x1及x2的隶属度矢量表 2.2模糊控制规则表 该控制系统为一实际工业控制模型,其用数字语言值表示的比例系数增量ΔKP 和积分时间ΔTI 模糊控制规则表如表2和表3所示。 表2 用数字语言值表示的ΔKP 模糊控制规则 摘 要 通过建立一个工业自动化控制中经常使用的模糊PI 控制器模型,详细论述了运用MATLAB 语言编写模糊控制查询表的方法,该控制表可以表格形式存放于计算机,从而大大提高了如PLC 等内存小的工业控制器的运行效率,也可实现在线推理控制。 关键词:模糊控制查询表,MATLAB ,PI 控制,在线推理 Abstract Through the establishmengt of Fuzzy-PI controller model which is applied in the industrial automation control,This pa-per describes in detail the way how to get a fuzzy -control-query table by the MATLAB programming.This cotrol-table may be stored in the compute with the form of a table,Which can improe greatly the operational efficiency,Such as PLC controller,etc.whose memory is very little,and on-line reasoning can also be realized. Keywords :fuzzy control query table,MATLAB,PI control,on-line reasoning 模糊控制查询表的MATLAB 实现 64

很难找的基于模糊控制的程序源代码

#include #include #include #include struct Fzb { int yyz; //语言之 int ly; //论域 float lsd; //隶属值 struct Fzb *next; }; class Fuzzy { private: int g[49][3]; //定义了规则库,用于函数间调用 float R[169][13]; //定义了关系矩阵,用于函数间调用 float H[13][13]; //定义了查询表矩阵,用于函数间的调用public: struct Fzb * Creatfzb(); //建立赋值表函数 void Printfzb(struct Fzb *head1); //输出赋值表 void Inputgzk(); //导入规则库 void jlgx(struct Fzb*E,struct Fzb*EC,struct Fzb*U); //建立关系矩阵void jlcxb(struct Fzb*E,struct Fzb*EC,struct Fzb*U); //建立查询表}; struct Fzb *Fuzzy::Creatfzb() { float f[8][14]={ {0,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6}, {-3,1,0.5,0,0,0,0,0,0,0,0,0,0,0}, {-2,0,0.5,1,0.5,0,0,0,0,0,0,0,0,0}, {-1,0,0,0,0.5,1,0.5,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0.5,1,0.5,0,0,0,0,0}, {1,0,0,0,0,0,0,0,0.5,1,0.5,0,0,0}, {2,0,0,0,0,0,0,0,0,0,0.5,1,0.5,0}, {3,0,0,0,0,0,0,0,0,0,0,0,0.5,1}}; //默认输入赋值表 int i,k,j; fstream in,out; struct Fzb *head,*p1,*p2; int n=0; head=NULL; p1=new(Fzb); for(k=1;k<8;k++) for(j=1;j<14;j++)

模糊控制详细讲解实例

一、速度控制算法: 首先定义速度偏差-50 km/h ≤e (k )≤50km/h ,-20≤ec (i )= e (k )- e (k-1)≤20,阀值e swith =10km/h 设计思想:油门控制采用增量式PID 控制算法,刹车控制采用模糊控制算法,最后通过选择规则进行选择控制量输入。 选择规则: e (k )<0 ① e (k )>- e swith and throttlr_1≠0 选择油门控制 ② 否则:先将油门控制量置0,再选择刹车控制 0

模糊控制表推导过程

模糊控制表推导过程

一、模糊划分及模糊化 对于偏差e的模糊划分取NB、NS、ZE、PS、 PB五个模糊量,并且在相邻的模糊量中,存 在如下关系: 1)、本模糊量的隶属度最大的元素,是相邻模 糊量的隶属度为0的元素。 2)、模糊量的形状是等腰三角形。 3)、论域为[-X,X]. 下图是隶属函数图象 NB NS 1 ZE PS PB -X -2X/3 -X/3 0 X/3 2X/3 X 图1 隶属函数图象 二、论域变换 1、偏差e的论域变换

偏差e的论域是[-X,X],欲把它变换成离散论域[-3,-2,-1,0,1,2,3],则有量化因子qe: qe=6/2X=3/X 显然,对于元素-X、-2X/3、-X/3、0、X/3、2X/3、X,则有相应的离散论域元素ei: e1=qe*(-X-0)=-3 e2=qe*(-2X/3-0)=-2 e3=qe*(-X/3-0)=-1 e4=qe*(0-0)=0 e5=qe*(X/3-0)=1 e6=qe*(2X/3-0)= 2 e7=qe*(X-0)=3 1、偏差变化率de的论域变换 偏差变化率de的论域是[-Y,Y],欲把它变换成离散论域[-3,-2,-1,0,1,2,3],则有量化因子qde: qde=6/2Y=3/Y 显然,对于元素-Y、-2Y/3、-Y/3、0、Y/3、2Y/3、Y,则有相应的离散论域元素dei:

de1=qde*(-Y-0)=-3 de2=qde*(-2Y/3-0)=-2 de3=qde*(-Y/3-0)=-1 de4=qde*(0-0)=0 de5=qde*(Y/3-0)=1 de6=qde*(2Y/3-0)= 2 de7=qde*(Y-0)=3 2、控制量C的论域变换 偏差C的论域是[-W,W],欲把它变换成离散论域[-3,-2,-1,0,1,2,3],则有量化因子qC: qC=6/2W=3/W 显然,对于元素-W、-2W/3、-W/3、0、W/3、2W/3、W,则有相应的离散论域元素Ci: C1=qC*(-W-0)=-3 C2=qC*(-2W/3-0)=-2 C3=qC*(-W/3-0)=-1 C4=qC*(0-0)=0 C5=qC*(W/3-0)=1 C6=qC*(2W/3-0)= 2

模糊控制器的设计

4模糊控制器的设计 4 Design of Fuzzy Controllor 4.1概述(Introduction) 随着PLC在自动控制领域内的广泛应用及被控对象的日趋复杂化,PLC控制软件的开发单纯依靠工程人员的经验显然是行不通的,而必须要有科学、有效的软件开发方法作为指导。因此,结合PLC可编程逻辑控制器的特点,应用最新控制理论、技术和方法,是进一步提高PLC软件开发效率及质量的重要途径。 系统设计的目标之一就是要提高装车的均匀性,车厢中煤位的高度变化直接影响装车的均匀性,装车不均匀对车轴有很大的隐患。要保持高度值不变就必须不断的调整溜槽的角度,但是,在装车过程中,煤位的高度和溜槽角度之间无法建立精确的数学模型。模糊控制它最大的特点是[43-45]:不需建立控制对象精确数学模型,只需要将操作人员的经验总结描述成计算机语言即可,因此采用模糊控制思想实现均匀装车是行之有效的方法。虽然很多PLC生产厂家推出FZ模糊推理模块,但这些专用模块价格昂贵,需使用专门的编程设备,成本高通用性差,所以自主开发基于模糊控制理论的PLC控制器有很大的工程价值。 本章首先介绍了模糊控制的基本原理、模糊控制系统及模糊控制器的设计步骤;然后在对煤位高度控制系统分析的基础上,设计基于模糊理论的PLC控制,分别从查询表计算生成和PLC程序查询两个部分进行设计。 4.2模糊控制原理(Fuzzy Control Principle) 4.2.1模糊控制理论(Fuzzy Control Theory) 模糊控制理论是由美国加利福尼亚大学的自动控制理论专家L.A.Zadch教授首次提出,由英国的Mamdani首次用于工业控制的一种智能控制技术[46]。模糊控制(FUZZY)技术是一种由数学模型、计算机、人工智能、知识工程等多门科学领域相互渗透、理论性很强的科学技术。 模糊控制是以人的控制经验作为控制的知识模型,以模糊集合、模糊语言变量以及模糊逻辑推理作为控制算法的数学工具,用计算机来实现的一中计算机智能控制[47-48]。它的基本思想是:把人类专家对待特定的被控对象或过程的控制策略总结成一系列以“IF…THEN…”形式表示的控制规则,通过模糊推理得到控制作用集,作用与被控对象或过程。与传统的控制方法相比,它具有以下优点[48]:无需知道被控对象的数学模型;是一种反映人类智慧思维的智能控制;易被人们所接受;构造容易;鲁棒性好。

基于模糊控制的速度跟踪控制问题(C语言以及MATLAB仿真实现)

基于模糊控制的速度控制 ——地面智能移动车辆速度控制系统问题描述 利用模糊控制的方法解决速度跟踪问题,即已知期望速度(desire speed),控制油门(throttle output)和刹车(brake output)来跟踪该速度。已知输入:车速和发动机转速(值可观测)。欲控制刹车和油门电压(同一时刻只有一个量起作用)。 算法思想 模糊控制器是一语言控制器,使得操作人员易于使用自然语言进行人机对话。模糊控制器是一种容易控制、掌握的较理想的非线性控制器,具有较佳的适应性及强健性(Robustness)、较佳的容错性(Fault Tolerance)。利用控制法则来描述系统变量间的关系。不用数值而用语言式的模糊变量来描述系统,模糊控制器不必对被控制对象建立完整的数学模式。 Figure 1模糊控制器的结构图 模糊控制的优点: (1)模糊控制是一种基于规则的控制,它直接采用语言型控制规则,出发点是现场操作人员的控制经验或相关专家的知识,在设计中不需要建立被控对象的精确的数学模型,因而使得控制机理和策略易于接受与理解,设计简单,便于应用。 (2)由工业过程的定性认识出发,比较容易建立语言控制规则,因而模糊控制对那些数学模型难以获取,动态特性不易掌握或变化非常显著的对象非常适用。 (3)基于模型的控制算法及系统设计方法,由于出发点和性能指标的不同,容易导致较大差异;但一个系统语言控制规则却具有相对的独立性,利用这些控制规律间的模糊连接,容易找到折中的选择,使控制效果优于常规控制器。 (4)模糊控制是基于启发性的知识及语言决策规则设计的,这有利于模拟人工控制的过程和方法,增强控制系统的适应能力,使之具有一定的智能水平。 简化系统设计的复杂性,特别适用于非线性、时变、模型不完全的系统上。 模糊控制的缺点

基于simulink的模糊控制仿真

已知系统的传递函数为:1/(10s+1)*e(-0.5s)。假设系统给定为阶跃值r=30,系统初始值r0=0.试分别设计 (1)常规的PID控制器; (2)常规的模糊控制器; (3)比较两种控制器的效果; (4)当通过改变模糊控制器的比例因子时,系统响应有什么变化? 一.基于simulink的PID控制器的仿真及其调试: 调节后的Kp,Ki,Kd分别为:10 ,1,0.05。 示波器观察到的波形为: 二.基于simulink的模糊控制器的仿真及其调试: (1)启动matlab后,在主窗口中键入fuzzy回车,屏幕上就会显现出如下图所示的“FIS Editor”界面,即模糊推理系统编辑器。

(2)双击输入量或输出量模框中的任何一个,都会弹出隶属函数编辑器,简称MF编辑器。

(3)在FIS Editor界面顺序单击菜单Editor—Rules出现模糊规则编辑器。 本次设计采用双输入(偏差E和偏差变化量EC)单输出(U)模糊控制器,E的论域是[-6,6],EC的论域是[-6,6],U的论域是[-6,6]。它们的状态分别是负大(NB)、负中(NM)、负小(NS)、零(ZO)、正小(PS)、正中(PM)、正大(PB)。语言值的隶属函数选择三角形的隶属度函数。推理规则选用Mamdani 控制规则。 该控制器的控制规则表如图所示:

Simulink仿真图如下: 在调试过程中发现加入积分调节器有助于消除静差,通过试凑法得出量化因子,比例因子以及积分常数。Ke,Kec,Ku,Ki分别是: 3 ,2.5 ,3.5 ,0.27

三.实验心得: 通过比较PID控制器和模糊控制器,我们可知两个系统观察到的波形并没有太大的区别。相对而言,对于给出精确数学模型的控制对象,PID控制器显得更具有优势,其一是操作简单,其二是调节三个参数可以达到满意的效果;对于给出给出精确数学模型的控制对象,模糊控制器并没有展现出太大的优势,其一是操作繁琐,其二是模糊控制器调节参数的难度并不亚于PID控制器。 在实验中增大模糊控制器的比例因子Ku会加快系统的响应速度,但Ku过大将会导致系统输出上升速率过快,从而使系统产生较大的超调量乃至发生振荡;Ku过小,系统输出上升速率变小,将导致系统稳态精度变差。

简易模糊控制器设计及MATLAB仿真

简易模糊控制器的设计及仿真 摘要:模糊控制(Fuzzy Control )是以模糊集理论、模糊语言和模糊逻辑推理为基础的一种控制方法,它从行为上模仿人的模糊推理和决策过程。本文利用MATLAB/SIMULINK 与FUZZY TOOLBOX 对给定的二阶动态系统,确定模糊控制器的结构,输入和输出语言变量、语言值及隶属函数,模糊控制规则,比较其与常规控制器的控制效果,用MATLAB 实现模糊控制的仿真。 关键词:模糊控制 参数整定 MATLAB 仿真 二阶动态系统模型: ()()1140130120 ++s s 采用simulink 图库,实现常规PID 和模糊自整定PID 。 一.确定模糊控制器结构 模糊自整定PID 为2输入3输出的模糊控制器。在MATLAB 的命令窗口中键入fuzzy 即可打开FIS 编辑器,其界面如下图所示。此时编辑器里面还没有FIS 系统,其文件名为Untitled ,且被默认为Mandani 型系统。默认的有一个输入,一个输出,还有中间的规则处理器。在FIS 编辑器界面上需要做一下几步工作。 首先,模糊自整定PID 为2输入3输出的模糊控制器,因此需要增加一个输入两个输出,进行的操作为:选择Edit 菜单下的Add Variable/Input 菜单项。

如下图。 其次,给输入输出变量命名。单击各个输入和输出框,在Current Variable 选项区域的Name文本框中修改变量名。如下图 最后,保存系统。单击File菜单,选择Export下的To Disk项。这里将创建的系统命名为PID_auot.fi。 二.定义输入、输出模糊集及隶属函数

模糊控制用于机器人避障

北京工业大学 结课论文 课题名称:基于模糊控制的机器人避障 姓名:鑫元 12521121 唐堂 12521130 成绩: 引言

智能小车是移动机器人的一种,可通过计算机编程来实现其对行驶方向、启停以及速度的控制。要想让智能小车在行驶过程中能成功地避开障碍物,必须对其进行路径规划?,路径规划的任务是为小车规划一条从起始点到目标点的无碰路径。路径规划方法有:BP人工神经网络法(Back Propagation)、机器学习(Reinforcement Learning)、以及模糊控制(Fuzzy Control)方法等。模糊技术具有人类智能的模糊性和推理能力,在路径规划中,模糊推理的应用主要体现在基于行为的导航方式上,即将机器人的运动过程分解为避障、边界跟踪、调速、目标制导等基本行为,各基本行为的激活由不同的机构分别控制,机器人的最终操作由高层控制机构对基本行为进行平衡后作出综合反应。模糊控制方法将信息获取和模糊推理过程有机结合,其优点在于不依赖机器人的动力学、运动学模型,系统控制融入了人类经验,同时计算量小,构成方法较为简单,节省系统资源,实时性。本文探讨了模糊控制技术在避障路径规划中的应用,并对其进行了仿真设计。 摘要 基于MATLAB的仿真结果表明模糊逻辑推理方法在智能小车的导航控制中具有良好的效果。 目录

引言,摘要 (1) 1.模糊控制技术基本理 (3) 2模糊控制器设计 (4) 3.避障算法设计 (6) 4 仿真实验 (14) 5.实验截图 (17) 6. 结论 (19) 7.实验心得 (20) 8.参考文献 (22)

1模糊控制技术基本原理 环境中存在障碍物时,路径规划控制系统具有高度不确定性,是一个多输入多输出(MIMO)系统。对于这种具有高度不确定性的MIMO系统,传统的控制方法不能达到很好的控制效果。模糊推理控制方法将人类的驾驶经验融入系统控制之中,因此可以较好地满足系统自适应性、鲁棒性和实时性的要求。模糊控制方式借助模糊数学这一工具通过推理来实现控制。模糊逻辑模拟了人类思维的模糊性,它采用与人类语言相近的语言变量进行推理,因此借助这一工具可将人类的控制经验融人系统控制之中,使得系统可以像有经验的操作者一样去控制复杂、激励不明的系统。总的说来模糊控制具有以下特点: 1)不依赖于被控对象的精确数学模型,易于对不确定性系统进行控制; 2)易于控制、易于掌握的较理想非线性控制器,是一种语言控制器; 3)抗干扰能力强,响应速磨陕,并对系统参数的变化有较强的鲁棒性。 模糊控制器的基本结构由模糊输入接口、模糊推理以及模糊输出接口三个模块组成。模糊输入接口的主要功能是实现精确量的模糊化,即把物理量的精确值转换成语言变量值。语言变量的分档根据实际情况而定,一般分为3—7档,档数越多,控制精度越高,计算量也越大。模糊推理决策机构的主要功能是模仿人的思维特征,根据总结人工控制策略取得的语言控制规则进行模糊推理,并决策出模糊输出控制量。模糊输出接口的主要功能是把输出模糊量转化为精确量,施于被控对象。 2模糊控制器设计

模糊控制器设计的基本方法

第5章 模糊控制器设计的基本方法 5.1 模糊控制器的结构设计 结构设计:确定输入、输出变量的个数(几入几出)。 5.2 模糊控制规则设计 1. 语言变量词集 {}PB PM PS O NS NM NB ,,,,,, 2. 确立模糊集隶属函数(赋值表) 3. 建立模糊控制规则,几种基本语句形式: 若A 则B c R A B A E =?+? 若A 则B 否则C c R A B A C =?+? 若A 或B 且C 或D 则E ()()R A B E C D E =+?+????????? 4. 建立控制规则表 5.3 模糊化方法及解模糊化方法 模糊化方法 1. 将[]b a ,内精确量离散化为[]n n +-,内的模糊量 2. 将其区间精确量x 模糊化为一个单点集,即0)(,1)(==x x μμ 模糊推理及非模糊化方法 1. MIN-MAX ——重心法 11112222n 00R and R and R and and '? n n n A B C A B C A B C x y c →→→→= 三步曲: 取最小 1111'()()()()c A o B o C z x y z μμμμ=∧∧ 取最大 12''''()()()()n c c c c z z z z μμμμ=∨∨∨ 2. 最大隶属度法 例: 10.3 0.80.5 0.511234 5 C =+----- +++,选3-=*u

20.30.80.40.21101234 5 C =+ +++ + ,选 5.12 21=+=*u 5.4 论域、量化因子及比例因子选择 论域:模糊变量的取值范围 基本论域:精确量的取值范围 误差量化因子:e e x n k /= 比例因子:e y k u u /= 误差变化量化因子:c c x m k /= 5.5 模糊控制算法的流程 m j n i C u B EC A E ij j i ,,2,1;,,2,1 then then if ===== 其中 i A 、 j B 、ij C 是定义在误差、误差变化和控制量论域X 、Y 、Z 上的模糊集合,则该语句所表示的模糊关系为 j i ij j i C B A R ,??= m j n i j i C B A R z y x z y x ij j i ===== ,1 ,1)()()(),,(μμμ μ 根据模糊推理合成规则可得:R B A U )(?= Y y X x B A R U y x z y x z ∈∈=)()(),,()(μμμμ 设论域{}{}{}l m n z z z Z y y y x x x X ,,,,,,,Y ,,,,212121 ===,则X ,Y ,Z 上的模糊集合分别为一个n ,m 和l 元的模糊向量,而描述控制规则的模糊关系R 为一个m n ?行l 列矩阵。 由i x 及i y 可算出ij u ,对所有X ,Y 中元素所有组合全部计算出相应的控制量变化值,可写成矩阵()ij n m u ?,制成的表即为查询表或称为模糊控制表。 * 模糊控制器设计举例(二维模糊控制器) 1. 结构设计:二维模糊控制器,即二输入一输出。 2. 模糊控制规则:共21条语句,其中第一条规则为 t h e n o r and or if :1 PB u NM NB EC NM NB E R === 3. 对模糊变量E ,EC ,u 赋值(见教材中的表)

matlab计算模糊控制规则表

程序运行结果: 输出量的模糊集合表 U_control = Columns 1 through 8 -5.3500 -5.2353 -5.3500 -5.2353 -5.3500 -5.2353 -4.6923 -4.2581 -5.0000 -4.9474 -5.0000 -4.9474 -5.0000 -4.9474 -3.8571 -3.7143 -4.6923 -4.5217 -4.6923 -4.5217 -4.6923 -4.5217 -3.0526 -2.9302 -4.2581 -4.2581 -4.2581 -4.2581 -4.2581 -4.2581 -2.9302 -2.2909 -4.0000 -4.0000 -3.7812 -3.7586 -3.4706 -3.4194 -2.4318 -1.7925 -4.0000 -4.0000 -3.3636 -3.0769 -2.4667 -2.1176 -1.5000 -1.0476 -3.5882 -3.5484 -2.9250 -2.6000 -0.9600 -0.5094 0 0.5094 -2.9231 -2.9231 -2.3333 -1.9057 -0.2632 1.0476 1.5000 2.1176 -1.8056 -1.7879 -0.5652 -0.3137 0.4400 1.7925 2.4318 3.4194

-1.0000 -1.0000 0.2453 0.9385 1.4211 2.2909 2.9302 4.2581 -0.5833 -0.6364 0.6875 1.4211 1.9375 2.9302 3.0526 4.5217 -0.2333 -0.2414 1.1190 1.7925 2.3571 3.7143 3.8571 4.9474 0 0 1.2857 2.0000 2.7143 4.2581 4.6923 5.2353 Columns 9 through 13 -2.7143 -2.0000 -1.2857 0 0 -2.3571 -1.7925 -1.1190 0.2414 0.2333 -1.9375 -1.4211 -0.6875 0.6364 0.5833 -1.4211 -0.9385 -0.2453 1.0000 1.0000 -0.4400 -0.0364 0.1600 1.6000 1.6316 0.2632 1.9057 2.3333 2.9231 2.9231 0.9600 2.6000 2.9250 3.5484 3.5882 2.4667 3.0769 3.3636 4.0000 4.0000 3.4706 3.7586 3.7813 4.0000 4.0000 4.2581 4.2581 4.2581 4.2581 4.2581 4.6923 4.5217 4.6923 4.5217 4.6923 5.0000 4.9474 5.0000 4.9474 5.0000 5.3500 5.2353 5.3500 5.2353 5.3500

查询表式模糊逻辑推理器指导书

查询表式模糊控制器设计实验指导书 一、 实验目的 利用Matlab 软件实现模糊控制系统仿真实验,了解模糊控制的查询表方法的基本原理及实现过程,并找出参数Ke ,Kec ,和Ku 对模糊控制器性能影响的规律。 二、 实验要求 设计一个二维模糊控制器分别控制一一个一阶被控对象1 1 )(11+=s T s G 。先用 模糊控制器进行控制,然后改变控制对象参数的大小,观察模糊控制的鲁棒性,找出参数Ke ,Kec ,和Ku 对模糊控制器性能影响的规律。 三、 实验内容 查询表法是模糊控制中的最基本的方法,用这种方法实现模糊控制决策过程最终转化为一个根据模糊控制系统的误差和误差变化(模糊量)来查询控制量(模糊量)的方法。本实验利用了Matlab 仿真模块——直接查询表(Direct look-up table )模块(在Simulink 下的Functions and Tables 模块下去查找),将模糊控制表中的数据输入给 Direct look-up table ,如图1所示。设定采样时间(例如选用0.01s ),在仿真中,通过逐步调整误差量化因子Ke ,误差变化的量化因子Kec 以及控制量比例因子Ku 的大小,来提高和改善模糊控制器的性能。 模糊控制器设计步骤: 1、选定误差E 和误差变化EC 作为模糊控制器的输入(二维模糊控制器),控制量U 作为模糊控制器的输出。 E ,EC 和U 的模糊集及其论域定义如下: EC 和U 的模糊语言变量集均为{NB,NM,NS,ZO,PS,PM,PB } E 的模糊语言变量集为{NB,NM,NS,NO,PO,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} 确定模糊变量的赋值表:对模糊变量赋值,就是确定论域内元素对模糊语言变量的隶属度。各个变量的赋值表见《模糊控制、神经控制和智能控制论》一书的283页。利用计算机根据赋值表进行计算,并采用最大隶属度法的解模糊方法,可以得到模糊控制查询表,如表1所示。

基于MATLAB的模糊控制系统设计

实验一基于MATLAB的模糊控制系统设计 1.1实验内容 (1)基于MATLAB图形模糊推理系统设计,小费模糊推理系统; (2)飞机下降速度模糊推理系统设计; (3)水箱液位模糊控制系统设计及仿真运行。 1.2实验步骤 1小费模糊推理系统设计 (1)在MATLAB的命令窗口输入fuzzy命令,打开模糊逻辑工具箱的图形用户界面窗口,新建一个Madmdani模糊推理系统。 (2)增加一个输入变量,将输入变量命名为service、food,输出变量为tip,这样建立了一个两输入单输出模糊推理系统框架。 (3)设计模糊化模块:双击变量图标打开Membership Fgunction Editor 窗口,分别将两个输入变量的论域均设为[0,10],输出论域为[0,30]。 通过增加隶属度函数来进行模糊空间划分。 输入变量service划分为三个模糊集:poor、good和excellent,隶属度函数均为高斯函数,参数分别为[1.5 0]、[1,5 5]和[1.5 10]; 输入变量food划分为两个模糊集:rancid和delicious,隶属度函数均为梯形函数,参数分别为[0 0 1 3]和[7 9 10 10]; 输出变量tip划分为三个模糊集:cheap、average和generous,隶属度函数均为三角形函数,参数分别为[0 5 10]、[10 15 20]和[20 25 30]。

(4)设置模糊规则:打开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.

模糊控制的基本原理

模糊控制的基本原理 模糊控制是以模糊集合理论、模糊语言及模糊逻辑为基础的控制,它是 模糊数学在控制系统中的应用,是一种非线性智能控制。 模糊控制是利用人的知识对控制对象进行控制的一种方法,通常用“if条件,then结果”的形式来表现,所以又通俗地称为语言控制。一般用于无法以 严密的数学表示的控制对象模型,即可利用人(熟练专家)的经验和知识来很好 地控制。因此,利用人的智力,模糊地进行系统控制的方法就是模糊控制。模 糊控制的基本原理如图所示: 模糊控制系统原理框图 它的核心部分为模糊控制器。模糊控制器的控制规律由计算机的程序实现,实现一步模糊控制算法的过程是:微机采样获取被控制量的精确值,然后将此量与给定值比较得到误差信号E;一般选误差信号E作为模糊控制器的一个输入量,把E的精确量进行模糊量化变成模糊量,误差E的模糊量可用相应的模糊语言表示;从而得到误差E的模糊语言集合的一个子集e(e实际上是一个模糊向量); 再由e和模糊控制规则R(模糊关系)根据推理的合成规则进行模糊决策,得到模糊控制量u为: 式中u为一个模糊量;为了对被控对象施加精确的控制,还需要将模糊量u 进行非模糊化处理转换为精确量:得到精确数字量后,经数模转换变为精确的模拟量送给执行机构,对被控对象进行一步控制;然后,进行第二次采样,完成第二步控制……。这样循环下去,就实现了被控对象的模糊控制。 模糊控制(Fuzzy Control)是以模糊集合理论、模糊语言变量和模糊逻辑推理为基础的一种计算机数字控制。模糊控制同常规的控制方案相比,主要特点有: (1)模糊控制只要求掌握现场操作人员或有关专家的经验、知识或操作数据,不需要建立过程的数学模型,所以适用于不易获得精确数学模型的被控过程,或结构参数不很清楚等场合。 (2)模糊控制是一种语言变量控制器,其控制规则只用语言变量的形式定性的表达,不用传递函数与状态方程,只要对人们的经验加以总结,进而从中提炼出规则,直接给出语言变量,再应用推理方法进行观察与控制。 (3)系统的鲁棒性强,尤其适用于时变、非线性、时延系统的控制。 (4)从不同的观点出发,可以设计不同的目标函数,其语言控制规则分别是独立的,但是整个系统的设计可得到总体的协调控制。 它是处理推理系统和控制系统中不精确和不确定性问题的一种有效方法,同时也构成了智能控制的重要组成部分。 模糊控制器的组成框图主要分为三部分:精确量的模糊化,规则库模糊推理,

模糊控制表推导过程

模糊控制表推导过程 Company Document number:WUUT-WUUY-WBBGB-BWYTT-1982GT

一、模糊划分及模糊化 对于偏差e的模糊划分取NB、NS、ZE、PS、PB五个模糊量,并且在相邻的模糊量中,存在如下关系: 1)、本模糊量的隶属度最大的元素,是相邻模糊量的隶属度为0的元素。 2)、模糊量的形状是等腰三角形。 3)、论域为[-X,X]. 二、论域变换 1、偏差e的论域变换 偏差e的论域是[-X,X],欲把它变换成离散论域[-3,-2,-1,0,1,2,3],则有量化因子qe: qe=6/2X=3/X 显然,对于元素-X、-2X/3、-X/3、0、X/3、2X/3、X,则有相应的离散论域元素ei: e1=qe*(-X-0)=-3

e2=qe*(-2X/3-0)=-2 e3=qe*(-X/3-0)=-1 e4=qe*(0-0)=0 e5=qe*(X/3-0)=1 e6=qe*(2X/3-0)= 2 e7=qe*(X-0)=3 1、偏差变化率de的论域变换 偏差变化率de的论域是[-Y,Y],欲把它变换成离散论域[-3,-2,-1,0,1,2,3],则有量化因子qde: qde=6/2Y=3/Y 显然,对于元素-Y、-2Y/3、-Y/3、0、Y/3、2Y/3、Y,则有相应的离散论域元素dei: de1=qde*(-Y-0)=-3 de2=qde*(-2Y/3-0)=-2 de3=qde*(-Y/3-0)=-1 de4=qde*(0-0)=0 de5=qde*(Y/3-0)=1 de6=qde*(2Y/3-0)= 2 de7=qde*(Y-0)=3

基于MATLAB生成模糊控制规则离线查询表

0 引言 模糊控制隶属于智能控制,是一种基于规则的近似推理的非线性智能控制。如果说,传统的控制方式需要被控对象精确的数学模型,而模糊控制则是以人类智能活动的角度为基础实施控制,因此,在实际中,传统控制方法无能为力的非线性场合,模糊控制却能起到很好的控制作用。因此,实际应用中,由于系统复杂、很难建立精确数学模型的非线性系统,模糊控制已经成为一种最有效的控制方法。 模糊控制规则表是模糊控制的核心,其描述的是输入的偏差、偏差变化量与控制的输出之间的对应关系,采用手工计算方式,量大且费时;采用在线计算方式,往往又影响系统被控对象的实时控制效果。因此,在应用模糊控制时,首先针对输入的不同组合,采用离线计算方式算出相应的控制输出量,构成模糊控制规则查询表,实际控制时再将模糊控制规则查询表嵌入在各种控制平台,如单片机、PLC 等,实现离线计算、在线查表,这样,一方面减少了模糊控制的在线运算量,同时又实现了模糊控制的实时控制效果。 实际应用中发现,对模糊控制规则表的生成,在离散论域分档较少的条件下,多采用手工计算,而在离散论域分档较多的条件下,手工计算量太大,用MATLAB 软件编程实现,对MATLAB 软件的编程能力要求又较高,因此,本文以二维温度模糊控制规则查询表的生成为例来说明如何简单有效的利用MATLAB 软件生成模糊控制规则离线查询表。 1 实例分析 应用MATLAB2014a 软件说明生成模糊规则离线查询表的过程。 设二维温度模糊控制器[1 2]的输入为温度偏差E 和温度偏差变化率EC,输出为温控器输出电压U。模糊控制器模型见图1。 2 模糊控制规则离线查询表生成步骤[ 3 4 5] (1)利用模糊逻辑控制工具箱生成温度模糊推理系统在MATLAB2014a 命令窗口中输入fuzzy 打开模糊控制工具箱,编辑输入输出变量的隶属度函数和模糊控制规则,然后将模糊推理系统保存为mytest.fis。 设温度偏差E、偏差变化率EC 和温控器输出电压U 的模糊论域为[-6 6],三者的语言变量赋值均为{NB,NM,NS,Z,PS,PM,PB},各语言值的隶属函数均采用三角函数,如图2所示,并根据温度模糊控制规则表1逐条添加模糊控制规则,清晰化采用加权平均法。 (2)建立模糊逻辑控制器的MATLAB-Simulink 仿真模型在该模型中,模糊逻辑控制模块需要输入FIS matrix 参数,故 popularizing various practical applications with fuzzy control technology as the core.Key words : Fuzzy Control;Fuzzy Control Rules Off-line Query Table;MATLAB 图1 二维温度模糊控制器

相关主题
文本预览
相关文档 最新文档