⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 immune7.m

📁 免疫算法例子.本例是求取一个分段函数的最大值.
💻 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 + -