📄 adapt_pc.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 + -