%最优组合
clear
clc
%遗传算法求最优组合,每个组合是一个个体
NIND=30;
N=6;
MAXGEN=10;
Pc=0.9; %交叉概率
Pm=0.05; %变异概率
GGAP=0.9; %选择概率
[Chrom,Lind,BaseV]=crtbp(NIND,N); %初始化种群
Chrom=unique(Chrom,'rows');
Chrom(all(Chrom==0,2),:)=[];
disp('初始种群中的一个随机值');
%if (Chrom(1,:)==[0 0 0 0 0 0])
% Outputgroup=(Chrom(2,:)); %输出随机组合
% Rerror=errorNum(Chrom(2,:));%计算个体错误数目
%else
Outputgroup=(Chrom(1,:));
Rerror=errorNum(Chrom(1,:));
%end
disp(['错误数目:',num2str(Rerror)]);
disp('开始优化');
gen=0;
figure(1);
hold on;box on
xlim([0,MAXGEN])
title('优化过程')
xlabel('代数')
ylabel('错误数')
[m,n]=size(Chrom);
ObjV=[];
for i=1:m
ObjV(1,i)=errorNum(Chrom(i,:));
end
ObjV=ObjV;
preObjV=min(ObjV);
%ObjV=errorNum(Chrom);
%preObjV=min(ObjV);
trace=[];
for gen=1:MAXGEN
ObjV=errorNum(Chrom);
ObjV=[];
for i=1:m
ObjV(1,i)=errorNum(Chrom(i,:));
end
ObjV=ObjV;
%line([gen-1,gen],[preObjV,min(ObjV)]); pause(0.0001)
preObjV=min(ObjV);
FitnV=Fitness(ObjV);
SelCh=Select(Chrom,FitnV,GGAP); %选择
SelCh=Recombin(SelCh,Pc); %交叉
SelCh=Mutate(SelCh,Pm); %变异
SelCh=Reverse(SelCh); %逆转
Chrom=Reins(Chrom,SelCh,ObjV); %插入子代新种群
[minObjV,minInd]=min(ObjV);
% trace(1,gen)=Chrom(minInd,:);
trace(:,gen)=minObjV;
%gen=gen+1;
end
trace=trace;
plot(1:MAXGEN,trace(2,:));
%ObjV=errorNum(Chrom);
%[minObjV,minInd]=min(ObjV);
disp('最优解:');
Outputgroup=Chrom(minInd,:);
disp(num2str(Outputgroup));
disp(['错误数目:',num2str(ObjV(minInd(1)))]);
评论0