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