• 大小: 4KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2021-06-06
  • 语言: Matlab
  • 标签: 模型预测  

资源简介

神经网络模型预测控制器

资源截图

代码片段和文件信息

clear;
N=6;%预测长度
%NNI初始化
aa=0.1;%学习速率
x=[00]‘;%NNI输入向量 辨识网络
w1=0.1*ones(62);
w2=ones(16);
b1=ones(61);
b2=ones(11);
ts=0.01;%采样时间间隔

%NNC初始化 控制网络,不,采用是神经网络PID控制器
lr=0.1;%学习速率
w_1=0.1*rand(8N);
w_2=rand(38);
b_1=ones(81);
b_2=ones(31);
Ki=0;
Kp=0;
Kd=0;
cr=0.01;%控制增量权重
xx=zeros(N1);%NNC输入向量

%NNI离线训练
for k=1:1000
    y(1)=0;
    yn(1)=0;
    u(k)=0.50*sin(3*2*pi*k*ts);
    a(k)=1.2*(1-0.8*exp(-0.1*k));
    y(k+1)=a(k)*y(k)/(1+y(k)^2)+u(k);%被控对象输出y
    x(1)=u(k);
    x(2)=y(k);
    a1=tansig(netsum(w1*xb1));
    yn(k+1)=purelin(netsum(w2*a1b2));%神经网络输出yn
    e(k+1)=y(k+1)-yn(k+1);
        if k>10&abs(e(k+1))<=0.001 %当误差小于0.001时,结束训练
           break;
       end
    dw2=aa*e(k+1)*a1‘;
    w2=w2+dw2;
    db2=aa*e(k+1);
    for j=1:6
        df(j)=1-a1(j)^2;
    end
    for i=1:6
        for j=1:2
            dw1(ij)=aa*e(k+1)*w2(i)*df(i)*x(j);
        end
    end
    for i=1:6
        db1(i1)=aa*e(k+1)*w2(i)*df(i);
    end
    w1=w1+dw1;
    b1=b1+db1;
end

%预测输出;
uu=zeros(21);%NNI输入向量


%yr=0.5*square(linspace(04*pi1000+N));  %参考信号,方波 N是预测长度

yr=sin(linspace(05*pi1000+N))+cos(linspace(03*pi1000+N)); %参考信号,正弦波 

%yr=2*sin(linspace(04*pi1000+N));%设定值

for k_2=1:1000
    time(k_2)=k_2*ts;
    uc(1)=0;
    yn_1(1)=0;%预测输出设初值
    yr_1(1)=0;
    a_a(k_2)=1.2*(1-0.8*exp(-0.1*k_2));
    yr_1(k_2+1)=a_a(k_2)*yr_1(k_2)/(1+yr_1(k_2)^2)+uc(k_2);%被控对象输出
    yn_1(k_2)=yr_1(k_2);
    for j=0:1:N-1
        uu(1)=uc(k_2);
        uu(2)=yn_1(k_2+j);
        a2=tansig(netsum(w1*uub1));
        yn_1(k_2+j+1)=purelin(netsum(w2*a2b2));%预测模型输出
        e_2(k_2+j+1)=yr(k_2+j+1)-yn_1(k_2+j+1);
        xx(j+1)=e_2(k_2+j+1);
    end

评论

共有 条评论