📄 mohupidobj.asv
字号:
function obj=mohupidobj(chrom)
global rin yout timef ntt mtt nmtol kk ts u P a b et Tdelay xe xec;
[n1,n2]=size(chrom);
n=0;
a1=0;
while (n<n1)
n=n+1;
B=0;
error_1=0;
error_2=0;
rin=1.0;
u=zeros(1,P);
x=[0,0,0];
u_1=0;u_2=0;u_3=0;u_4=0;u_5=0;
y_1=0;y_2=0;y_3=0;
%------------ Return of PID parameters -------------
for k=1:1:P
r(k)=rin;
a(k)=1.2*(1-0.8*exp(-0.1*k));
timef(k)=k*ts;
yout(k)=a(k)*y_1/(1+y_1^2)+u_1;
error(k)=r(k)-yout(k);
x(1)=error(k)/abs(rin); %compute e
x(2)=(error(k)-error_1)/abs(ts*rin); %compute ec
ecerror(k)=error(k)-error_1;
error_2=error_1;
error_1=error(k);
ee(1)=exp(-(x-
%对e,ec进行量化
% if x(1)>=chrom(n,14)
% e=3*sign(error(k));
% elseif x(1)>=chrom(n,15)
% e=2*sign(error(k));
% elseif x(1)>=chrom(n,16)
% e=1*sign(error(k));
% else
% e=0;
% end
% i=e+4;
%
% if x(2)>=chrom(n,17)
% ec=2*sign(error(k));
% elseif x(2)>=chrom(n,18)
% ec=1*sign(error(k));
% else
% ec=0;
% end
% j=ec+3+7;
%对e,ec进行量化
if abs(x(1))>=0.5
e=3*sign(error(k));
elseif abs(x(1))>=0.15
e=2*sign(error(k));
elseif abs(x(1))>=0.001
e=1*sign(error(k));
else
e=0;
end
i=e+4;
if abs(x(2))>=0.3
ec=2*sign(error(k)-error_1);
elseif abs(x(2))>=0.01
ec=1*sign(error(k)-error_1);
else
ec=0;
end
j=ec+3;
% for se=1:7
% for sec=1:5
% ch(5*(se-1)+sec)= chrom(n,5*(se-1)+sec);
% end
% end
kk=5*(i-1)+j;
% du=chrom(n,13)*(chrom(n,i)*e+chrom(n,j)*ec);
% du=(ch(kk)*e+(1-ch(kk))*ec);
du=chrom(n,kk)*(chrom(n,36)*e+chrom(n,37)*ec);
if k>=2
u(k)=u(k-1)+du;
else
u(k)=du;
end
u_1=u(k);
y_1=yout(k);
end
s=0;
for i=1:1:P
% Ji(i)=0.999*abs(error(i))+0.05*u(i)^2;
% Ji(i)=abs(error(i));
% Ji(i)=s+ts*i*(abs(error(i)))^2*ts;%(ITAE)
% s=Ji(i);
% Ji(i)=(abs(error(i))^2*ts);
Ji(i)=(abs(error(i))*ts);
% Ji(i)=(abs(error(i))+abs(ecerror(i)));%
B=B+Ji(i);
end
% obj(n)=B+0.2*tu*10;
obj(n)=B;
end
obj=obj';
% if u(k)>=10
% u(k)=10;
% end
% if u(k)<=-10
% u(k)=-10;
% end
%
% if yout(k)>0.95&yout(k)<1.05
% tu=timef(k);
% s=1;
% end
% if yout(k)>0.95 & yout(k)<1.05
% ss=k-sk;
% sk=k;
% if ss==1
% nn=nn+1;
% else
% nn=1;
% end
% if nn==5
% t=k-5;
% end
% end
%
% if s==0
% if yout(k)>0.99
% tu=timef(k);
% s=1;
% end
% end
% u_5=u_4;u_4=u_3;u_3=u_2;u_2=u_1;u_1=u(k);
% y_3=y_2;y_2=y_1;y_1=yout(k);
%
% end
% ess=(yout(100)+yout(99)+yout(98)+yout(97)+yout(96))/5-1
%计算超调,稳态误差,调节时间
% am1=((max-1)-am)/am;
% ts0=(t*ts-ts1)/ts1;
% em1=(abs(ess)-em)/em;
%
% if am1<0
% am1=0;
% end
%
% if ts0<0
% ts0=0;
% end
%
% if em1<0
% em1=0;
% end
%
% obj(n)=am1+ts0+em1+0.0001;
% end
% obj=obj';
%
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -