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

📄 adapt_pc.m

📁 两种改进的遗传算法(自适应交叉概率的遗传算法
💻 M
字号:
% AGA 程序
%Name:adapt_pc.m

function [pop_best1,error1,i1,bestfit_temp1]=adapt_pc(M_red,M_white,pop)

tic;            %用于记录运行时间
%参数设置
[x_length,y_length]=size(M_red);
popsize=30;
%设置初始参数,群体大小
chromlength=y_length; %字符串长度(个体长度),染色体长度
pc=0.6;  %设置初始交叉概率,也就是ppc=pc*(fmax-f)/(fmax-faverage)中的pc
pm=0.05; %设置变异概率
%参数设置结束

dai=200;  %设置最大遗传代数
M1=M_red;
M2=M_white;
[xx,yy]=size(M1);
pop_best1=zeros(1,yy);%给最佳染色体及其适应度值赋初值%
value_best1=-1;

error1=0;   %两代间最优适应值的差值
coun=0;     %最优适应值连续相同(没有增长)的代数
bestfit_temp1=0;  %保存每代最优个体适应值
difference1=cal_difference1(M1,M2);        %计算两类间的方差和类内方差
fitvalue1=calfitvalue(pop,difference1,M1,M2); %计算群体中每个个体的适应值
[bestindividual1,bestfit1]=best(pop,fitvalue1);%求出父代pop群体中适应值最大的个体及其适应值
bestfit_old=bestfit1;

for i=1:dai  %200为迭代次数

    bestfit_temp1(i)=bestfit1;
    newpop=selection(pop,fitvalue1); %复制
    fitvalue1=calfitvalue(newpop,difference1,M1,M2);
    newpop=crossover_adapt_pc(newpop,pc,fitvalue1); %自适应交叉

    newpop=mutation(newpop,pm);%变异
    fitvalue1=calfitvalue(newpop,difference1,M1,M2);
    [badestindividual1,badestfit1]=badest(newpop,fitvalue1); %找出子代最差个体及其适应值

    counter=0;
    for j=1:popsize
        if fitvalue1(j)==badestfit1
            newpop(j,:)=bestindividual1;%用父代的最优个体代替子代的最差个体从而形成新的下代,
            counter=counter+1;
        end
    end

    if bestfit1>value_best1   %保存数代遗传之后最好的种群
        value_best1=bestfit1;
        pop_best1=bestindividual1;
        i     %输出所有最优适应值有增长的代数
    end

    fitvalue1=calfitvalue(newpop,difference1,M1,M2);%此时的newpop是替换后的子代群体
    [bestindividual1,bestfit1]=best(newpop,fitvalue1);%求出替换后的子代群体中适应值最大的个体及其适应值
    bestfit_next=bestfit1;
    error1(i)=bestfit_next-bestfit_old;   %子代最优个体的适应值 - 父代最优个体的适应值

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  判断连续coun次最优适应值相同(没有增长),就退出循环

    if error1(i)==0
        coun=coun+1;
    else
        coun=0;
    end

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    if coun==10
        break;
    else
        pop=newpop;
        bestfit_old=bestfit_next;
    end
end


value_best1      %输出最优适应值
pop_best1        %输出最优个体
i1=i             %算法退出时的代数
toc;
%  figure;
%  plot (bestfit_temp1, 'DisplayName', 'bestfit_temp1', 'YDataSource', 'bestfit_temp1'); figure(gcf)









⌨️ 快捷键说明

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