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

📄 ga.asv

📁 这是一个遗传算法中所目标优化的问题
💻 ASV
字号:
function []=main(N,pcro,pmut)
%遗传算法主函数
%用以实现求给定函数fun在给定区间[low, up]上的极大值
% pcro交叉概率,pmut变异概率,N为迭代次数
pcro=0.8;
pmut=0.1;
N=400;
low=1; %区间下限
up1=4; %区间上限
up2=2; %区间上限
perk=0.0001; %要求结果精度
n=150; %种群个数
length1=ceil(log2((up1-low)/perk+1)); %求得单个变量编码长度x1
length2=ceil(log2((up2-low)/perk+1)); %求得单个变量编码长度x2
pop=encode(length1,length2,n); %用解码函数求得初始种群,n为种群个体个数
gen=1; %代数初始化
minf=inf;
while(gen<=N)
     fval=zeros(1,n); %初始化函数值
     fit=zeros(1,n); %初始化适应度
     for i=1:n
        [x1,x2]=decode(pop(i,:),low,up1,up2,length1); %利用解码函数解码个体
        fval(i)=fun5(x1,x2); %求个体的函数值
     end
     fsum=sum(fval);
     fmax=max(fval);
     %fit=fval/fsum;
     fs=n*fmax-fsum;
     %fit=1-fval;
     fit=(fmax-fval)/fs; %求个体的适应度
     q(1)=fit(1);
     for i=2:n
         q(i)=q(i-1)+fit(i); %累加个体适应度形成赌轮
     end
     pop=select(pop,q,n); %选择
     pop=crossover(pop,gen,N,n,length); %交叉
    %pop=crossover(pop,pcro,n,length); %交叉
     %pop=mutation(pop,pmut,n,length); %变异
     pop=mutation(pop,gen,N,n,length); %变异
     for i=1:n
        [x1,x2]=decode(pop(i,:),low,up,length); %解码最终得到的个体
        fval(i)=fun5(x1,x2); %计算其函数值
        % if fval(i)>minf  %求最大值
        if fval(i)<minf %最优点及最优值得到最终种群中的
           minf=fval(i);
           x0=[x1,x2];
        end
     end
     best(gen)=minf;
     %best(gen)=fmax;
     ave(gen)=fsum/n;
    
     on_line(gen)=sum(ave)/gen;
     off_line(gen)=sum(best)/gen;
     %if gen==400
       % figure;plot(fval,'g');
    % end    
     gen=gen+1; %下一代
end
minf,x0 %输出最小值以及此时的自变量
figure;plot(best,'b');
title('每一代的最优值');
figure;plot(ave,'r');
title('每一代的平均值');
figure;plot(on_line,'k');
title('在线性能');
figure;plot(off_line,'g');
title('离线性能');
result;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -