📄 immune7.m
字号:
%GA(Generic Algorithm) Program to optimize Parameters of PID
clear all;
close all;
global rin yout timef
global popsize length min max N code;
Size=100;
G=100;
CodeL=15;
E=round(rand(Size,2*CodeL));
for s=1:1:Size
m=E(s,:);
y1=0;y2=0;
m1=m(1:1:CodeL);
for i=1:1:CodeL
y1=y1+m1(i)*2^(i-1);
end
x1=10.24*y1/65535.0-5.12;
m2=m(CodeL+1:1:2*CodeL);
for i=1:1:CodeL
y2=y2+m2(i)*2^(i-1);
end
x2=10.24*y2/65535.0-5.12;
if x1<-2
Fitness(s)=(3.0/(0.05+(x1*x1+x2*x2)))*(3.0/(0.05+(x1*x1+x2*x2)))+(x1*x1+x2*x2)*(x1*x1+x2*x2);
else
Fitness(s)=90+(3.0/(0.05+(x1*x1+x2*x2)))*(3.0/(0.05+(x1*x1+x2*x2)))+(x1*x1+x2*x2)*(x1*x1+x2*x2);
end
end
for kg=1:1:G
time(kg)=kg;
[OderFit,IndexFit]=sort(Fitness);
BestS=E(IndexFit(Size),:);
fi_sum=sum(Fitness);
fi_Size=(OderFit/fi_sum)*Size;
fi_S=floor(fi_Size);
for s=1:1:Size
if fi_S(s)==0
fi_S(s)=0;
else fi_S(s)=1;
end
end
kk=1;
for i=1:1:Size
for j=1:1:fi_S(i)
TempE1(kk,:)=E(IndexFit(i),:);
Fitness1(kk)=OderFit(i);
kk=kk+1;
Fitness1
end
end
pc=0.80;
n=ceil(30*rand);
for i=1:2:(Size-1)
temp=rand;
if pc>temp
for j=n:1:30
TempE(i,j)=E(i+1,j);
TempE(i+1,j)=E(i,j);
end
end
end
TempE(Size,:)=BestS;
pm=0.9;
for i=1:1:Size
for j=1:1:2*CodeL
temp=rand;
if pm>temp
if TempE(i,j)==0
TempE(i,j)=1;
else
TempE(i,j)=0;
end
end
end
end
for s=1:1:Size
m=TempE(s,:);
y1=0;y2=0;
%Uncoding
m1=m(1:1:CodeL);
for i=1:1:CodeL
y1=y1+m1(i)*2^(i-1);
end
x1=10.24*y1/65535.0-5.12;
m2=m(CodeL+1:1:2*CodeL);
for i=1:1:CodeL
y2=y2+m2(i)*2^(i-1);
end
x2=10.24*y2/65535.0-5.12;
if x1<-2
Fitness2(s)=(3.0/(0.05+(x1*x1+x2*x2)))*(3.0/(0.05+(x1*x1+x2*x2)))+(x1*x1+x2*x2)*(x1*x1+x2*x2);
else
Fitness2(s)=90+(3.0/(0.05+(x1*x1+x2*x2)))*(3.0/(0.05+(x1*x1+x2*x2)))+(x1*x1+x2*x2)*(x1*x1+x2*x2);
end
end
TempE2=[TempE;TempE1];
Fitness3=[Fitness2,Fitness1]
[OderFit3,IndexFit3]=sort(Fitness3);
E=TempE2(IndexFit3(end-Size+1:end),:);
Fitness=OderFit3(end-Size+1:end);
bfi=OderFit3(end);
BF(kg)=bfi;
BF
MaxfitS=TempE2(IndexFit3(end),:);
end
y1=0;y2=0;
m1=MaxfitS(1:1:CodeL);
for i=1:1:CodeL
y1=y1+m1(i)*2^(i-1);
end
x1=10.24*y1/65535.0-5.12;
m2=MaxfitS(CodeL+1:1:2*CodeL);
for i=1:1:CodeL
y2=y2+m2(i)*2^(i-1);
end
x2=10.24*y2/65535.0-5.12;
if x1<-2
Fit=(3.0/(0.05+(x1*x1+x2*x2)))*(3.0/(0.05+(x1*x1+x2*x2)))+(x1*x1+x2*x2)*(x1*x1+x2*x2);
else
Fit=90+(3.0/(0.05+(x1*x1+x2*x2)))*(3.0/(0.05+(x1*x1+x2*x2)))+(x1*x1+x2*x2)*(x1*x1+x2*x2);
end
x1
x2
BF
Fit
figure(1);
plot(time,BF);
xlabel('Times');ylabel('Best F');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -