function [R,minlen]=geneticVRP(D,dis,demand,volume,n,C,m,Pc,Pm)
[N,NN]=size(D);
farm=zeros(n,N);%用于存储种群
for i=1:n
farm(i,:)=randperm(N);
end
R=farm(1,:);%一个随机解(个体)
len=zeros(n,1);%存储路径长度
counter=1;
while counter<=C
counter
%====================================================================
%=====================交叉操作========================
FARM=farm;
FARM2=FARM;
[aa,bb]=size(FARM);
for i=1:2:aa
if Pc>rand&&i<aa %交叉概率Pc
A=FARM(i,:);
B=FARM(i+1,:);
[A,B]=intercross(A,B);
FARM(i,:)=A;
FARM(i+1,:)=B;
end
end
% 交叉检验 (可省去)
fitness_value_c=zeros(1,1);%子代适应值
for i=1:aa
if fitness(demand,FARM(i,:),volume,dis,fitness_value_c,D)>fitness(demand,FARM2(i,:),volume,dis,fitness_value_c,D)
FARM(i,:)=FARM2(i,:);
end
end
clear aa;
clear bb;
clear A;
clear B;
clear fitness_value_c;
%===================================================================
%========================变异=========================
% FARM2=FARM;
[aa,bb]=size(FARM); %aa=nn2
for i=1:aa
if Pm>=rand
FARM(i,:)=mutate(FARM(i,:));
end
end
% 变异检验(可省略)
% fitness_value_c=zeros(1,1);%子代适应值
% for i=1:aa
% if fitness(demand,FARM(i,:),volume,dis,fitness_value_c,D)>fitness(demand,FARM2(i,:),volume,dis,fitness_value_c,D)
% FARM(i,:)=FARM2(i,:);
% end
% end
clear aa;
clear bb;
%===================================================================
%=====================群体的选择和更新======================
farm=FARM;
[c,d]=size(farm);
fitness_value_c=zeros(c,1);%子代适应值
[fitness_value_c]=fitness(demand,farm,volume,dis,fitness_value_c,D); %求个体的适应度
%淘汰子代
[a,b]=sort(fitness_value_c);
[u,i]=size(fitness_value_c);
for i=1:u
farm(i,:)=FARM(b(i),:);
end
minlen=a(1);
R=farm(1,:) ; %更新最短路径
farm(c-19:c,:)=farm(1:20,:);
% %画图
hold on
plot(counter,minlen,'-b*');
hold off;
counter=counter+1;
% Rlength=myLength(D,R,volume);
% %不会画图!!!
% % subplot(2,1,1)
% % plot(counter,Rlength,'-ro')
% % hold on
% % plot(counter,myLength(D,R),':b*')
% % hold off;
% hold on
% plot(counter,minlen,'-b*');
% hold off;
end
%结果输出
minlen
R
output_fitness(demand,R,volume,dis,fitness_value_c,D);
% subplot(2,1,1)
% plot(R,'-ro')