基于神经网络的预测控制模型仿真 下载本文

t=Ts.*(1:N); figure(3);

subplot(2,1,1); plot(t,y,'b',t,yg,'r');

legend('预测输出曲线'); title('输出曲线'); xlabel('Time') ylabel('振幅') grid on

subplot(2,1,2); plot(t,u ,'g');

legend('控制作用u') title('控制作用'); xlabel('Time') ylabel('振幅') grid on

xite=0.50; alfa=0.05;

w2=rand(10,1);

w2_1=w2;w2_2=w2; w1=rand(6,10);

w1_1=w1;w1_2=w1;

dw1=0*w1;

u_1=0; y_1=0;

I=zeros(10,1); Iout=zeros(10,1); FI=zeros(10,1);

x=[0,0,0,0,0,0]';

for k=3:N

x(1)=yg(k); x(2)=yg(k-1); x(3)=yg(k-2); x(4)=u(k); x(5)=u(k-1); x(6)=u(k-2); for j=1:1:10

I(j)=x'*w1(:,j);

Iout(j)=1/(1+exp(-I(j))); end

es(k)=w2'*Iout; e1(k)=es(k)-e(k);

w2=w2_1-(xite*0.1*e1(k))*Iout+alfa*(w2_1-w2_2);

for j=1:1:10

FI(j)=exp(-I(j))/(1+exp(-I(j)))^2; end

for i=1:1:6

for j=1:1:10

dw1(i,j)=e1(k)*xite*FI(j)*w2(j)*x(i); end end

w1=w1_1+dw1+alfa*(w1_1-w1_2);

w1_2=w1_1;w1_1=w1; w2_2=w2_1;w2_1=w2; end

t=Ts.*(1:N); figure(2);

plot(t,es,'r',t,e,'b');

xlabel('times');ylabel('es and e'); grid on

for k=3:N

Uk_1=zeros(N-1,1); for i=1:N-1

if k-N+i<=0 Uk_1(i)=0; else

Uk_1(i)=u(k-N+i); end end

Y0=A0*Uk_1;

a(k)=1.2*(1-0.8*exp(-0.1*k)); yg(k)=a(k)*y_1/(1+y_1^2)+u_1; u_1=u(k); yg_1=yg(k);

e(k)=es(k);

Ysk=zeros(P,1); for i=1:P

Ysk(i)=Sv; end

Ek=zeros(P,1); for i=1:P

Ek(i)=0.1*i*e(k); end

dertu=K*(Ysk-Y0-Ek);

for i=1:m

if k+i-1<=N

u(k+i-1)=u(k+i-1-1)+dertu(i); end end

temp=0; for j=1:N-1 if k-j<=0 temp; else

if k-j-1<=0

temp=temp+a(j)*u(k-j); else

temp=temp+a(j)*(u(k-j)-u(k-j-1)); end end end

if k-N<=0

y(k)=temp; else

y(k)=temp+a(N)*u(k-N); end

for j=1:1:10 I(j)=x'*w1(:,j);

Iout(j)=1/(1+exp(-I(j))); end

es(k)=w2'*Iout; e(k)=es(k);

x(1)=yg(k); x(2)=yg(k-1); x(3)=yg(k-2); x(4)=u(k); x(5)=u(k-1); x(6)=u(k-2); end

t=Ts.*(1:N); figure(4);

subplot(2,1,1); plot(t,y,'b',t,yg,'r');

legend('预测输出曲线'); title('输出曲线'); xlabel('Time') ylabel('振幅') grid on

subplot(2,1,2); plot(t,u ,'g');

legend('控制作用u') title('控制作用'); xlabel('Time') ylabel('振幅') grid on

图4-1 神经网络辨识系统误差曲线

图4-2基于神经网络误差补偿的动态矩阵控制曲线

5.小结

本文在原有动态矩阵预测控制的基础上,利用预测误差的历史数据建立基于BP神经网络的误差预测模型,经过学习训练后可作为误差的预测器,由此得到误差的预测值,修正了纯基于数学模型的预测,这样可以使得利用更简单的数学模型来构造动态矩阵预测控制算法,而使得对模型失配具有较强的抑制能力.仿真结果表明了该算法的有效性。