基于FNN模糊神经网络的控制器解耦控制matlab仿真

发布时间 2023-04-17 20:21:30作者: 我爱C编程

1.算法仿真效果

matlab2022a仿真结果如下:

 

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

       系统的复杂性与所要求的精确性之间存在尖锐矛盾,为此,通过模拟人类学习和自适应能力,人们提出了智能控制的思想。控制理论专家Austrom(1991)IFAC 大会上指出:模糊逻辑控制、神经网络与专家控制是三种典型的智能控制方法。通常专家系统建立在专家经验上,并非建立在工业过程所产生的操作数据上,且一般复杂系统所具有的不精确性、不确定性就算领域专家也很难把握,这使建立专家系统非常困难。而模糊逻辑和神经网络作为两种典型的智能控制方法,各有优缺,模糊逻辑与神经网络的融合———模糊神经网络(Fuzzy Neural Network)由于吸取了模糊逻辑和神经网络的优点, 部分避免了两者的缺点, 已经成为当今智能控制研究的热点之一。

       模糊逻辑(FL)、神经网络理论(NN)、遗传算法(GA)、随机推理(PR), 以及置信网络、混沌理论和部分学习理论相融合,形成了一种协作体,这种融合并非杂乱无章地将模糊逻辑、神经网络和遗传算法等进行拼凑,而是通过各种方法解决本领域的问题并相互取长补短,从而形成了各种方法的协作.从这个意义上讲,各种方法是互补的, 而不是竞争的。在协作体中, 各种方法起着不同的作用.通过这种协作,产生了混合智能系统.模糊逻辑和神经网络都是重要的智能控制方法,将模糊逻辑和神经网络这两种软计算方法相结合, 取长补短, 形成一种协作体———模糊神经网络。

 

       神经模糊网络结构的多样性导致其学习算法也具有多样性的特点。模糊神经网络的学习主要包括结构学习和参数学习。网络的可调参数,可通过参数学习算法确定:隐层最优节点数即最优模糊规则数可通过结构学习算法确定,表2列出了几种模糊神经网络的学习算法 。反向传播 (BP)学习算法、遗传(GA)算法、粗糙集理论、微粒群理论等是几种与具体神经网络结构无关的通用学习算法,表3列出了这几种算法的特点。遗传算法是借鉴生物进化思想而提出的一种寻优方法,被广泛应用于各种优化问题中。粗糙集理论有很强的知识获取和处理能力,利用样本建立决策表,根据决策属性的重要性进行知识约简,可大大降低知识表示空间的维数。粒子群优化算法已经在许多困难的单峰和多峰优化问题中表现出良好的性能。

 

        在现代化的工业生产中,不断出现一些较复杂的设备或装置,这些设备或装置的本身所要求的被控制参数往往较多,因此,必须设置多个控制回路对该种设备进行控制。由于控制回路的增加,往往会在它们之间造成相互影响的耦合作用,也即系统中每一个控制回路的输入信号对所有回路的输出都会有影响,而每一个回路的输出又会受到所有输入的作用。要想一个输入只去控制一个输出几乎不可能,这就构成了“耦合”系统。由于耦合关系,往往使系统难于控制、性能很差。

 

        所谓解耦控制系统,就是采用某种结构,寻找合适的控制规律来消除系统中各控制回路之间的相互耦合关系,使每一个输入只控制相应的一个输出,每一个输出又只受到一个控制的作用。 解耦控制是一个既古老又极富生命力的话题,不确定性是工程实际中普遍存在的棘手现象。解耦控制是多变量系统控制的有效手段。

 

        一个多变量系统在单位阶跃函数(见过渡过程) 输入作用下能通过引入控制装置实现稳态解耦时,就称实现了静态解耦控制。对于线性定常系统(ABC),如果系统可用状态反馈来稳定,且系数矩阵ABC满足关于秩的关系式,则系统可通过引入状态反馈和输入变换来实现静态解耦。多变量系统在实现了静态解耦后,其闭环控制系统的传递函数矩阵G(s)s=0时为非奇异对角矩阵;但当s0,G(s)不是对角矩阵。对于满足解耦条件的系统,使其实现静态解耦的状态反馈矩阵K和输入变换矩阵L可按如下方式选择:首先,选择K使闭环系统矩阵(ABK)的特征值均具有负实部。随后,选取输入变换矩阵,式中D为非奇异对角矩阵,其各对角线上元的值可根据其他性能指标来选取。由这样选取的KL所构成的控制系统必定是稳定的,并且它的闭环传递函数矩阵G(s)s=0时即等于D。在对系统参数变动的敏感方面,静态解耦控制要比完全解耦控制优越,因而更适宜于工程应用。

 

 

3.MATLAB核心程序

 

%子系统1(SUB1)的J循环开始  
for J=1:50
   ep1=10-yp1;
   pid=kp*(ep1-ep0)+ki*ep1;
   up2=up1+pid;
   yp2=0.5*yp1+2.5*up2+2.5*up1; 
   yp(:,J)=yp2;
   up0=up1;
   up1=up2;
   ep0=ep1; 
   yp0=yp1;
   yp1=yp2;
end  
..........................................................................  
%输出
sum=0;
for i=1:3
   for j=1:3
      sum=sum+h(i,j)*v1(i,j);
   end
end
ot=sum;cu=su*ot;u2=u1+cu;disp(u2);
if(u2<0)
u2=0;
elseif(u2>=1)
 u2=1;
end
y2=0.5*y1+2.5*u2+2.5*u1+n1(:,k)+0.01*y12; 
%+n1(:,k)+0.01*y12表示随机噪声和子系统间的相互耦合
disp(['the output y number is' int2str(T)]);
disp(y2);
Y(:,k)=y2;E=0.5*(sp-y2).^2;e2=sp-y2;
 
Es(:,k)=e2;
x1=e2;x2=e2-e1;e0=e1;e1=e2;
delot=(sp-y2)*2.5*su;
 
for i=1:3
   for j=1:3
      dv=v1(i,j)-v0(i,j);
      v2=v1(i,j)+p13*delot+q13*dv;
      v3(i,j)=v2;
   end
end
.......................................................
end   
   
if(abs(e1)<=eps & abs(e)<=eps)
      break;
else
      k=k+1;
end
   y02=y12;y12=y22;u02=u12;u12=u22;
end
L=k-1; n2=n;
%L=k;
m=1:L;
R=ones(size(m));
sp=R*10;sp2=R*5;
 
 
figure
plot(m,sp,'k','LineWidth',2);
hold on
plot(m,Y,'bs',...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.0,0.9,0.0]);
hold on
plot(m,sp2,'k','LineWidth',2);
hold on
plot(m,Y2,'rs',...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.9,0.0,0.0]);
hold on
plot(m,Es,'r');
hold on
plot(m,E22,'b');
legend('子系统1的输入','子系统1的耦合结果','子系统2的输入','子系统2的耦合结果','子系统1的误差','子系统2的误差' ); 
%图标炷 
title('FNN解耦'),
xlabel('k'),
 
 
figure
plot(m,n1,'b--',m,n2,'r');
legend('子系统1的噪声','子系统2的噪声' ); %图标炷    
xlabel('k'),