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

225 阅读4分钟

1.算法仿真效果

matlab2017b仿真结果如下:

1.png

2.png

3.png

4.png

5.png

6.png

7.png  

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)。

 

     由于计算上式的积分很麻烦,实际计算时通常用下面的近似公式

 

049c557979a15e614409952a4bbf0719_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

 

       根据上面给出的模糊系统的模糊模型,可设计出如图6-2所示的模糊神经网络结构。图中所示为MIMO系统,它是上面所讨论的MISO情况的简单推广。

 

2bd10f560a889c3b9c6aa5ac7af8782a_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

 

         模糊神经网络虽然也是局部逼近网络,但是它是按照模糊系统模型建立的,网络中的各个节点及所有参数均有明显的物理意义,因此这些参数的初值可以根据系统的模糊或定性的知识来加以确定,然后利用上述的学习算法可以很快收敛到要求的输入输出关系,这是模糊神经网络比前面单纯的神经网络的优点所在。同时由于它具有神经网络的结构,因而参数的学习和调整比较容易,这是它比单纯的模糊逻辑系统的优点所在。

 

       基于Takagi-Sugeno模型的模糊神经网络可以从另一角度来认识它的输入输出映射关系,若各输入分量的分割是精确的,即相当于隶属度函数为互相拼接的超矩形函数,则网络的输出相当于是原光滑函数的分段线性近似,即相当于用许多块超平面来拟合一个光滑曲面。网络中的  参数便是这些超平面方程的参数,这样只有当分割越精细时,拟合才能越准确。而实际上这里的模糊分割互相之间是有重叠的,因此即使模糊分割数不多,也能获得光滑和准确的曲面拟合。

 

3.MATLAB核心程序

4c2a1a39d63305b32f0bee5ab8fcdad6_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

a90bb99b1fe5ac789300ab3b0cfc781c_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

`[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;`