www.pudn.com > TWVRP.rar > main.m, change:2016-04-20,size:2199b


function main() 
  
clear; 
clc; 
  
for xx=1:2 
      
tic  
% 参数初始化 
genmax=500; 
[xy,n,nind,D,Q,TT,ET,EL,ELL,CT,CL,dmax,qmax,fitmax,c0,c1,k,v]=datas(); 
%生成初试种群 
chrom=initpop(nind,n,k); 
gen=1;  
while gen<=genmax 
     %计算适应值矩阵 
     [fit,fitx]=fitness(D,Q,chrom,TT,ET,EL,CT,CL,dmax,qmax,fitmax,c0,c1,k,v,n,nind); 
     %找出最优个体适应值 
     avefit(gen)=sum(fit)/nind;%平均适应值 
     [bestfitc,bestindex]=min(fit); 
     bestindex=bestindex(1); 
     bestfit(gen)=bestfitc;%最小适应值fit的集 
     bestpop(gen,:)=chrom(bestindex,:);%最优个体集 
       
     %选择 
     chrom=select(chrom,fitx); 
     %交叉 
     chrom=crossover(chrom); 
     %变异 
     chrom=mutate(chrom,avefit,gen); 
     %精英策略 
     chrom(1,:)=bestpop(gen,:); 
     gen=gen+1; 
end 
  
bestpop; 
  
y=bestfit;%各代最优适应值 
%y1=avefit;%各代平均适应值 
  
%找出最优的适应值、个体 
[minbestfit,minindex]=min(bestfit);%取最优适应值的位置、最优适应值 
minindex=minindex(1); 
%取最优个体 
minbestpop=bestpop(minindex,:); 
  
%解码最优染色体 
a=randperm(size(minbestpop,2)); 
a1=sort(a); 
a2=sort(minbestpop); 
a3=zeros(1,size(minbestpop,2)); 
for i=1:size(minbestpop,2) 
    for j=1:size(minbestpop,2) 
        if minbestpop(i)==a2(j); 
           a3(i)=a1(j); 
           a2(j)=0; 
           break; 
        end 
    end 
end 
a3; 
for i=1:size(a3,2)    
     if a3(i)>n  
        a3(i)=1; 
     end 
end 
a4=[1,a3,1]; 
  
%去重 
for i=1:size(a4,2)-1 
    if a4(i)-a4(i+1)==0 
       a4(i)=0; 
    end 
end 
ii=find(a4==0); 
a4(ii)=[]; 
a4; 
%最优方案 
minbestpop1=a4; 
minbestfit;%最低适应值 
  
%画线路 
DrawPath(minbestpop1,xy); 
  
%迭代图 
figure 
x=1:1:genmax; 
plot(x,y,'r--') 
%plot(x,y); 
hold on 
%plot(x,y1,'r--');%适应值平均数 
title('遗传优化过程') 
xlabel('迭代次数') 
ylabel('最优适应值') 
axis([0,genmax,0,2000]) 
%输出最优解 
disp('最优解为:'); 
N=size(minbestpop1,2); 
p=num2str(minbestpop1(1)); 
for i=2:N; 
    p=[p,'->',num2str(minbestpop1(i))]; 
end 
disp(p); 
disp(['最优解为:',num2str(minbestpop1)]); 
disp(['最优成本为:',num2str(minbestfit)]); 
  
s=0; 
r=minbestpop1; 
for i=1:size(r,2)-1 
    s=s+D(r(i),r(i+1)); 
end 
disp(['行驶里程:',num2str(s)]); 
  
toc 
end