资源简介
程序采用智能优化方法的禁忌搜索算法解决中国31省会城市的TSP问题,内含MATLAB源程序
代码片段和文件信息
%%一个旅行商人要拜访全国33个省会城市,且每个城市只能拜访一次,求所有路径之中的最小值
%%%禁忌搜索算法求解TSP问题%%%%%%%%%%%%%%%%%%%%%
function [BestShortcuttheMinDistance]=TabuSearch
clear all;
close all;
clc;
Clist=[10481.4 4438.90;10548 4351.06;...
10933.2 3471.50;9588.6 3290.259;...
8199.9 3332.5139;7891.2 4867.0049;...
9564.3 4277.671;10048.5 4538.9796;...
9749.7 2539.6936;11396.7 5087.1710;...
11281.5 4879.2363;11104.2 4647.9507;...
10303.2 4228.7456;10127.7 4210.9544;...
9156.6 4065.289;10530 4075.2965;...
10228.5 3865.138;10690.2 3562.6876;...
10554.3 3542.6725;10817.1 3364.7605;...
10737 2899.96545;10430.1 3189.0724;...
10170 3136.8107;10287.9 3393.6712;...
10190.7 2575.2760;9931.5 2226.1237;...
9335.7 4006.3556;...
9805.5 3810.6524;9365.4 3410.3504;...
9603.9 2954.4510;9245.7 2784.3226;...
10269 2468.5288;10199.7 2460.745];%全国33个省会城市坐标
CityNum=size(Clist1);%TSP问题的规模即城市数目
dislist=zeros(CityNum);
for i=1:CityNum
for j=1:CityNum
dislist(ij)=((Clist(i1)-Clist(j1))^2+(Clist(i2)-Clist(j2))^2)^0.5;
end
end
TabuList=zeros(CityNum); % (tabu list)
TabuLength=round((CityNum*(CityNum-1)/2)^0.5);%禁忌表长度(tabu length)
Candidates=200; %候选集的个数 (全部领域解个数)
CandidateNum=zeros(CandidatesCityNum); %候选解集合
S0=randperm(CityNum); %随机产生初始解
BSF=S0; %best so far;
BestL=Inf; %当前最佳解距离
p=1; %记录迭代次数
StopL=2001; %最大迭代次数
figure(1);
stop = uicontrol(‘style‘‘toggle‘‘string‘...
‘stop‘‘background‘‘white‘);
tic; %用来保存当前时间
%%%%%%%%%%%%%%%%%%%%%%禁忌搜索循环%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
while p if Candidates>CityNum*(CityNum-1)/2
disp(‘候选解个数不大于n*(n-1)/2!‘);
break;
end
ALong(p)=Fun(dislistS0); %当前解适配值
i=1;
A=zeros(Candidates2); % 解中交换的城市矩阵
%以下while的 是生成随机的200 X 2 的矩阵矩阵A。每一个元素都是在1-31之间的
while i<=Candidates
M=CityNum*rand(12);
M=ceil(M);
if M(1)~=M(2)
A(i1)=max(M(1)M(2));
A(i2)=min(M(1)M(2));
if i==1
isa=0;
else
for j=1:i-1
if A(i1)==A(j1) && A(i2)==A(j2)
isa=1;
break;
else
isa=0;
end
end
end
if ~isa
i=i+1;
else
end
else
end
end
%%%%%%%%产生领域解%%%%%%%%%%%%%%%%%%%%%%%
BestCandidateNum=100;%保留前BestCandidateNum个最好候选解
BestCandidate=Inf*ones(BestCandidateNum4);
F=zeros(1Candidates);
%这相当于是产生一个S0的邻域...
for i=1:Candidates
CandidateNum(i:)=S0; %候选解集合。
CandidateN
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 90344 2017-09-19 22:40 智能优化TSP作业数据\1.jpg
文件 76126 2017-09-19 22:40 智能优化TSP作业数据\10.jpg
文件 67395 2017-09-19 22:40 智能优化TSP作业数据\150.jpg
文件 65662 2017-09-19 22:43 智能优化TSP作业数据\1500.jpg
文件 70789 2017-09-19 22:40 智能优化TSP作业数据\20.jpg
文件 65157 2017-09-19 22:43 智能优化TSP作业数据\2000.jpg
文件 65531 2017-09-19 22:41 智能优化TSP作业数据\400.jpg
文件 81327 2017-09-19 22:40 智能优化TSP作业数据\5.jpg
文件 69588 2017-09-19 22:40 智能优化TSP作业数据\60.jpg
文件 65624 2017-09-19 22:41 智能优化TSP作业数据\800.jpg
文件 6577 2017-09-19 22:25 智能优化TSP作业数据\TabuSearch.m
文件 6919 2017-09-25 16:38 智能优化TSP作业数据\程序代码及城市序号.txt
文件 74499 2017-09-19 22:47 智能优化TSP作业数据\运行结果.png
文件 32746 2017-09-19 22:44 智能优化TSP作业数据\进化曲线.jpg
目录 0 2017-09-25 16:39 智能优化TSP作业数据
----------- --------- ---------- ----- ----
838284 15
- 上一篇:matlab图像处理自适应中值滤波
- 下一篇:贝叶斯分类数据集
评论
共有 条评论