m基于MATLAB和simulink实现模糊控制器以及模糊神经网络控制器
1.算法仿真效果
matlab2017b仿真结果如下:
2.算法涉及理论知识概要
模糊神经网络控制在控制领域里目前已经成为一个研究热点,其原因在于两者之间的互补性质。神经网络和模糊系统均属于无模型的估计器和非线性动力学系统,也是一种处理不确定性、非线性和其它不确定问题(ill-posed problem)的有力工具。但两者之间的特性却存在很大的差异.模糊系统中知识的抽取和表达比较方便,它比较适合于表达那些模糊或定性的知识,其推理方式比较类似于人的思维模式。但是一般说来模糊系统缺乏自学习和自适应能力,要设计和实现模糊系统的自适应控制是比较困难的。而神经网络则可直接从样本中进行有效的学习,它具有并行计算、分布式信息存贮、容错能力强以及具备自适应学习功能等一系列优点。正是由于这些优点,神经网络的研究受到广泛的关注并吸引了许多研究工作者的兴趣。
在模糊系统中,模糊模型的表示主要有两种:一种是模糊规则的后件是输出量的某一模糊集合,称它为模糊系统的标准模型或Mamdani模型表示;另一种是模糊规则的后件是输入语言变量的函数,典型的情况是输入变量的线性组合,称它为模糊系统的Takagi—Sugeno模型。下面首先讨论基于Mamdani模型的模糊神经网络。
对于多输入多输出(MIMO)的模糊规则可以分解为多个多输入单输出(MISO)的模糊规则。因此不失一般性,下面只讨论MISO模糊系统。 图为一基于标准模型的MISO模糊系统的原理结构图。其中χRn,yR。如果该模糊系统的输出作用于一个控制对象,那么它的作用便是一个模糊逻辑控制器。否则,它可用于模糊逻辑决策系统、模糊逻辑诊断系统等其它方面。
设输入向量X = [x1 x2 …xn]T,每个分量xi均为模糊语言变量,并设:
T(xi) = {Ai1,Ai2,…,Aimi} i = 1,2,…,n
其中,Aij (j = 1,2,…,mi)是xi的第j个语言变量值,它是定义在论域Ui上的一个模糊集合。相应的隶属度函数为μA i j (xi)(i = 1,2,…,n;j = 1,2,…,mi)。
输出量y也为模糊语言变量且T(y) = {B1,B2,…,Bmy}。其中Bj(j = 1,2,…,my)是y的第j个语言变量值,它是定义在论域Uy上的模糊集合。相应的隶属度函数为μB j(y)。
由于计算上式的积分很麻烦,实际计算时通常用下面的近似公式
根据上面给出的模糊系统的模糊模型,可设计出如图6-2所示的模糊神经网络结构。图中所示为MIMO系统,它是上面所讨论的MISO情况的简单推广。
模糊神经网络虽然也是局部逼近网络,但是它是按照模糊系统模型建立的,网络中的各个节点及所有参数均有明显的物理意义,因此这些参数的初值可以根据系统的模糊或定性的知识来加以确定,然后利用上述的学习算法可以很快收敛到要求的输入输出关系,这是模糊神经网络比前面单纯的神经网络的优点所在。同时由于它具有神经网络的结构,因而参数的学习和调整比较容易,这是它比单纯的模糊逻辑系统的优点所在。
基于Takagi-Sugeno模型的模糊神经网络可以从另一角度来认识它的输入输出映射关系,若各输入分量的分割是精确的,即相当于隶属度函数为互相拼接的超矩形函数,则网络的输出相当于是原光滑函数的分段线性近似,即相当于用许多块超平面来拟合一个光滑曲面。网络中的 参数便是这些超平面方程的参数,这样只有当分割越精细时,拟合才能越准确。而实际上这里的模糊分割互相之间是有重叠的,因此即使模糊分割数不多,也能获得光滑和准确的曲面拟合。
3.MATLAB核心程序
[x1,mf1] = plotmf(patient,'input',1); [x2,mf2] = plotmf(patient,'input',2); [x3,mf3] = plotmf(patient,'input',3); [x4,mf4] = plotmf(patient,'input',4); [x5,mf5] = plotmf(patient,'input',5); gensurf(patient); showrule(patient); figure plot(x1,mf1); %Mean Absolute Error %Mean Absolute Error %Mean Absolute Error ty = evalfis(T(:,1:5),patient); cy = evalfis(C(:,1:5),patient); t_error = ty - T(:,6); c_error = cy - C(:,6); Mean_ABS_training_Error = mae(t_error) Mean_ABS_Checking_Error = mae(c_error) figure; plot(ty,'b-o');hold on; plot(T(:,6),'r -*'); grid on; figure; plot(cy,'b-o');hold on; plot(C(:,6),'r -*'); grid on;