资源简介

程序采用智能优化方法的禁忌搜索算法解决中国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


评论

共有 条评论