遗传算法


在这里插入图片描述
在这里插入图片描述

% GA_zuiyou 
clc;clear
x=-1:0.01:2;
y=2+x.*sin(10*pi*x); 
plot(x,y,'LineWidth',1.5);
hold on 
%初始化参数 
T=100;%仿真代数 
N=10;% 群体规模 
pc=0.8;pm=0.05;%交叉变异概率 
umax=2;umin=-1;%参数取值范围 
L=12;%单个参数字串长度,总编码长度 L 
bval=round(rand(N,L)); %生成初始种群
bestv=-inf;%最优适应度初值 %迭代开始 
for ii=1:T 
    %解码,计算适应度 
    for i=1:N         
        y1=0;         
        for j=1:1:L            
            y1=y1+bval(i,L-j+1)*2^(j-1);         
        end
        x=(umax-umin)*y1/(2^L-1)+umin; %二进制变十进制        
        obj(i)=2+x.*sin(10*pi*x);         
        xx(i,:)=x;         
        plot(x,obj(i),'k*');
        hold on 
    end
    func=obj;%目标函数转换为适应度函数 
    p=func./sum(func); 
    q=cumsum(p); 
    [fmax,indmax]=max(func);%求当代最佳个体    
    if fmax>=bestv       
        bestv=fmax;%到目前为止最优适应度值       
        bvalxx=bval(indmax,:);%到目前为止最佳位串       
        optxx=xx(indmax);    
    end
    Best(ii)=fmax;    
    Bfit1(ii)=bestv; % 存储代的最优适应度
    %%%%遗传操作开始 %轮盘赌选择  
    for i=1:N     
        r=rand;     
        tmp=find(r<=q);    
        newbval(i,:)=bval(tmp(1),:);  
    end
    newbval(N,:)=bvalxx;%最优保留   
    bval=newbval; 
    %单点交叉 
    for i=1:2:(N-1)    
        cc=rand;    
        if cc<pc       
            point=ceil(rand*(L-1));    %交叉点数    
            ch=bval(i,:);        
            bval(i,point+1:L)=bval(i+1,point+1:L);       
            bval(i+1,point+1:L)=ch(1,point+1:L);    
        end
    end
    % bval(N,:)=bvalxx;%最优保留
    %位点变异 
    for i=1:N     
        for j=1:(L)        
            pb=rand;         
            if(pb<pm)             
                bval(i,j)=1-bval(i,j);         
            end
        end
    end
end %输出 
figure(2) ;
plot(Best,'LineWidth',1.5);% 最优适应度进化曲线 
hold on 
plot(Bfit1,'k','LineWidth',1.5);% 最优适应度进化曲线 
hold on 
plot(max(y)*ones(1,100),'-.r','LineWidth',1.5);  
%bestv;   %输出最优适应度值  
%optxx;   %输出最优参数 
axis([1,100,0,4]) 
max(y) 
bestv; 
optxx;

在这里插入图片描述
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章