load('Location');
initial_popSize=50; %初始种群规模
numberofcities=length(Location); %基因数量
StopTolerance=1; %终止温度
TempRatio=0.5; %降温系数
Temp0=70; %初始温度
i=1;
Temp=Temp0; %温度
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% 生成距离矩阵 %%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
dis=zeros(numberofcities,numberofcities);
for i=1:numberofcities
for j=1:numberofcities
dis(i,j)=norm(Location(i,:)-Location(j,:));
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% 初始种群 %%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
popSize = initial_popSize; %种群规模
max_generation=300; %初始化最大种群代数
pop=zeros(popSize,numberofcities);
for i = 1:popSize %初始化种群
pop(i,:) = randperm(numberofcities);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% 模拟退火 %%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
i=1;
while Temp>StopTolerance
disp(Temp);
fitness =mgasa_fitness(pop,dis); %计算适应度(距离)
pop=mgasa_annealing(Temp,pop,dis,max_generation,fitness,popSize);
Temp=Temp0/i;
i=i+1;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% 得到最佳解 %%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
fitness =ga_fitness(pop,dis); %计算适应度(距离)
[maxfitness, index] = max(fitness); %找出最短距离
optRoute = pop(index,:); %找出最短距离对就的路径
Location_opt=zeros(numberofcities,2);
for i=1:numberofcities
Location_opt(i,:)=Location(optRoute(i),:);
end
line(Location_opt(:,1),Location_opt(:,2));
hold on;
line([Location_opt(1,1),Location_opt(numberofcities,1)],...
[Location_opt(1,2),Location_opt(numberofcities,2)]);
disp(maxfitness);