什么是WM算法

在现代智能控制算法中,模糊控制是在实际控制系统设计中使用比较成熟的一种方法。模糊控制可以使用在一些无法建立系统模型的场合,根据专家经验确定模糊规则,实现对系统的控制。
wm算法是一种一种基本的模糊控制算法。该算法的思想是根据采样的数据对(一组输入、输出数据),确定出模糊规则,通常是一条数据对就确定一条规则。
首先我们需要确定系统的输入输出数量,假设系统为单输入单输出。对输入变量x,输出变量y分别划分模糊集合,可以使用正态分布隶属度函数,或者三角隶属度函数来划分。这叫做变量的模糊化。如x的论域为[0,2],划分13个模糊集合,分别为a1~a13,如下图所示。
对于输出y,论域为[-1.5,1.5],划分13个模糊集合,为b1~b13,如下图所示。
现在有0-2论域上均匀分布的样本点共21个,利用它们来确定模糊规则。
需要分别计算每一个数据点在模糊集合上的隶属度,选取最高的隶属度值作为确定一条模糊规则的依据。如样本点(0.2,1),需要计算0.2在输入隶属度函数中的隶属度值,需要计算13个值,找出其中最大的值如a5,则输入为a5,再计算输出1在13个模糊集合中的隶属度函数值,找出最大的那个,如b2,则输出为b2,由此可以确定一条模糊规则:if x=a5 then y=b2,由此可以确定21个规则;但是这些规则有大量的重复和冲突的规则,需要计算它们置信度
由此公式可以求出矛盾规则的置信度,把置信度低的规则去掉;按照wm算法的提出则王立新的做法,还应该乘上一个专家经验系数,也就是专家认为这条规则的可信度大不大。上面的公式改写为:
由此建立了模糊规则库
xa1a2a3a4a5a6a7a8a9a10a11
y b5 b5 b6 b7 b6 b3 b3 b2 b1 b2 b5
上面表中的第一行代表输入x的隶属集合的下标,第二行代表输出y的隶属集合的下标。利用模糊规则库,计算输出y。根据去模糊化公式即可计算输出值:
(1)计算输出变量y的隶属度函数值,创建u_y_b.m文件输入以下代码:
%y:输出变量的值%a:区间中点的值%left:表示论域区间的左端点%right:表示论域区间的右端点%step:三角形底边长的一半function u = u_y_b( y, a, left, right, step )b = a-step ;c = a+step ;len = length( y ) ;u = zeros( 1, len ) ;for i = 1: len if a==left+step if y(i)>=b && y(i)a && y(i)c u(i) = 0 ; end elseif a==right-step if y(i)>=b && y(i)a && y(i)c u(i) = 0 ; end else if y(i)>=b && y(i)a && y(i)c u(i) = 0 ; end endendend(2)计算输入隶属度(输入模糊化),创建u_x.m文件输入以下代码:
%x:输入值%u:输出一个有隶属度组成的数组function u = u_x( x )a = 0 ;u = zeros( 1, 10 ) ;for i = 1: 10 a = a + 0.2 ; u(i) = u_x_a( x, a ) ;endend(3)计算输入变量x的隶属度函数值,创建u_x_a.m文件输入以下代码:
%x:输入变量的值%a:区间中点的值function u = u_x_a( x, a )len = length( x ) ;u = zeros( 1, len ) ;b = a - 0.2 ;c = a + 0.2 ;for i=1:len if a==0.2 if x(i)>=b && x(i)a && x(i)c u(i) = 0 ; end elseif a==1.8 if x(i)>=b && x(i)a && x(i)c u(i) = 0 ; end else if x(i)>=b && x(i)a && x(i)c u(i) = 0 ; end endendend(4)wm算法实现脚本,创建test01.m文件并输入以下代码:
clcclear%绘制原始图像t = 0: 0.01: 2;y = 0.9*sin( pi*t )+0.3*cos( 3*pi*t );plot( t, y );grid on;xlabel( 'êä³ööµx' ) ;ylabel( 'êäèëöµy' ) ;title( 'y=0.9*sin(pi*t)+0.3*cos(3*pi*t)' ) ;%获取采样点sample_x = 0: 0.1: 2;sample_y = 0.9*sin( pi*sample_x )+0.3*cos( 3*pi*sample_x );sample_num = length( sample_x ) ; %计算采样个数% %论域x划分set_x个模糊区间,使用高斯隶属函数,论域[0,2]set_x = 13 ;xmin = 0 ;xmax = 2 ;x_step = ( xmax-xmin )/( set_x-1 ) ; %x模糊集合的步长av_x = xmin: x_step: xmax; %计算高斯分布均值sigma_x = sqrt( -x_step^2/( 8*log( 0.5 ) ) ) ; %计算高斯分布方差%绘制x的模糊函数曲线x = xmin: 0.01: xmax ;figure( 2 )for i=1:set_x plot( gaussmf( x, [ sigma_x, av_x(i) ] ) ) ; hold on;endgrid on;legend( 'a1','a2','a3','a4','a5','a6','a7','a8','a9','a10','a11','a12','a13' ) ;xlabel( '输入值x ' );ylabel( '隶属度值u (x)' );set( gca,'xtick', 0:50:250 ) ;set( gca,'xticklabel', {'0','0.5','1.0','1.5','2','2.5'} ) ;title( '输入变量x的模糊区间划分以及隶属度' ) ;%论域y划分set_y模糊区间,使用三角隶属函数,论域[-1.5,1.5]set_y = 13 ;ymin = -1.5 ;ymax = 1.5 ;y_step = ( ymax-ymin )/( set_y+1 ) ; %y模糊集合的步长a = ymin ; %保存论域下限%绘制y的模糊函数曲线y = ymin: 0.01: ymax ; %获取一组y的数值figure( 3 )for i=1:set_y a = a+y_step ; plot( u_y_b( y, a, ymin, ymax, y_step ) ) ; %绘制y的模糊函数曲线 hold on ;endgrid on;legend( 'b1','b2','b3','b4','b5','b6','b7','b8','b9','b10','b11','b12','b13' ) ;xlabel( '输出值y' );ylabel( '隶属度值u(y)' );set( gca, 'xtick', 0:50:350 ) ;set( gca, 'xticklabel', {'-1.5','-1.0','-0.5','0','0.5','1.0','1.5','2.0'} ) ;title( '输出变量y的模糊区间划分以及隶属度' ) ;% wm算法uxa = zeros( sample_num, set_x ) ; %存储每条样本数据x的隶属度函数值uyb = zeros( sample_num, set_y ) ; %存储每条样本数据y的隶属度函数值for i=1:set_x uxa( :, i ) = gaussmf( sample_x, [ sigma_x, av_x(i) ] ) ;%样本x在第i个模糊区间的隶属度值enda = ymin ;for i=1:set_y a = a+y_step ;uyb( :, i ) = u_y_b( sample_y, a, ymin, ymax, y_step ) ; %样本y在第i个模糊区间的隶属度值endwm_rule = zeros( 3, sample_num ) ; %保存样本数据所在模糊集合下标[ ~, wm_rule(1,:) ] = max( uxa, [], 2 ) ; %计算每个样本x所在的模糊集合下标[ ~, wm_rule(2,:) ] = max( uyb, [], 2 ) ; %计算每个样本y所在的模糊集合下标 for i=1:sample_num wm_rule(3,i) = uxa( i,wm_rule(1,i) )*uyb( i,wm_rule(2,i) ) ;%计算每条规则的有效性 end %去除信任度低的规则 for i = 2:sample_num if wm_rule( 1, i-1 )==wm_rule( 1, i ) if wm_rule( 3, i-1 )<=wm_rule( 3, i ) wm_rule( :, i-1 ) = 0 ; else wm_rule( :, i ) = 0 ; end end endwm_rule( :, all( wm_rule==0,1 ) ) = [] ; %去除多于的规则(5)wm算法测试脚本,创建test02.m文件并输入以下代码:
p_value = zeros( 1, set_y ) ; %用于保存y模糊函数尖点所对应的横坐标的值a = ymin ;for i = 1: set_y a = a + y_step ; p_value( i ) = a ; %保存y模糊函数尖点所对应的横坐标的值end%测试规则x = 0 ;wm_y_x = zeros( 1, 201 ) ;for i = 1: 201 x = x + 0.01 ; ux = zeros ( 1, set_x ) ; for j = 1: set_x ux(j) = gaussmf( x, [ sigma_x, av_x(j) ] ) ; end num = 0 ; den = 0 ; for j = 1: set_x num = num + p_value( wm_rule( 2, j ) )*ux(j); den = den + ux(j) ; end wm_y_x(i) = num/den ;endfigure(4);%绘制wm算法的输出曲线x = 0: 0.01: 2 ;plot( x, wm_y_x, '-.b' ) ;hold on ;y = 0.9*sin( pi*x )+0.3*cos( 3*pi*x ) ;%画出原始函数的曲线plot( x, y, '-g' ) ;xlabel( '输入值x ' ) ;ylabel( '输出值y' ) ;title( '使用wm模糊控制算法的结果' ) ;legend( ' wm算法输出曲线','原始输出曲线' ) ;grid on ;运行结果如下图所示。

基于FPGA至简设计法的4位闪烁灯 附件更详细
美国人工智能需要关注的五大关键领域
一种新颖的射频功率放大器电路结构
润芯微科技智驾项目落地上汽乘用车
疏水离子传导膜实现高能长寿命锌-锰电池
什么是WM算法
兼容C3D02065E,碳化硅肖特基二极管B1D02065E助力LED显示屏电源
新款比亚迪海豚即将面世,新增全新外观及配置
用epoll来实现多路复用
印刷线路板工艺流程
电流互感器符号含义
你想当PCB布局设计师吗
MIC4827制作EL发光片驱动
新一代蓝牙低功耗产品HS6621消费类电子产品方案
无锡集成电路企业盈利能力获得资本认可 未来有望培育出若干上市企业
电气控制柜布局应该注意什么?
曝苹果正在研发iOS14系统 将在2020年发布
高效率升压转换器提供48V的IP电话-High-Effici
使用Renesas RZ/G2进行嵌入式人工智能推理
制动电阻器的主要功能_制动电阻器的维护