m基于MATLAB和simulink实现模糊控制器以及模糊神经网络控制器

发布时间 2023-04-13 23:16:11作者: 我爱C编程

1.算法仿真效果

matlab2017b仿真结果如下:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2.算法涉及理论知识概要

        模糊神经网络控制在控制领域里目前已经成为一个研究热点,其原因在于两者之间的互补性质。神经网络和模糊系统均属于无模型的估计器和非线性动力学系统,也是一种处理不确定性、非线性和其它不确定问题(ill-posed problem)的有力工具。但两者之间的特性却存在很大的差异.模糊系统中知识的抽取和表达比较方便,它比较适合于表达那些模糊或定性的知识,其推理方式比较类似于人的思维模式。但是一般说来模糊系统缺乏自学习和自适应能力,要设计和实现模糊系统的自适应控制是比较困难的。而神经网络则可直接从样本中进行有效的学习,它具有并行计算、分布式信息存贮、容错能力强以及具备自适应学习功能等一系列优点。正是由于这些优点,神经网络的研究受到广泛的关注并吸引了许多研究工作者的兴趣。

 

       在模糊系统中,模糊模型的表示主要有两种:一种是模糊规则的后件是输出量的某一模糊集合,称它为模糊系统的标准模型或Mamdani模型表示;另一种是模糊规则的后件是输入语言变量的函数,典型的情况是输入变量的线性组合,称它为模糊系统的TakagiSugeno模型。下面首先讨论基于Mamdani模型的模糊神经网络。

 

       对于多输入多输出(MIMO)的模糊规则可以分解为多个多输入单输出(MISO)的模糊规则。因此不失一般性,下面只讨论MISO模糊系统。 图为一基于标准模型的MISO模糊系统的原理结构图。其中χRnyR。如果该模糊系统的输出作用于一个控制对象,那么它的作用便是一个模糊逻辑控制器。否则,它可用于模糊逻辑决策系统、模糊逻辑诊断系统等其它方面。

 

设输入向量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;