TSP巡回セールスマン問題の一般的な解決策Matlabコード(1)徹底的な方法

1. TSPの問題

        旅行中のセールスマンは、nつの都市を旅行したいと考えており、各都市が一度経験し、一度だけ経験してから出発都市に戻る必要があり、最短距離が必要です。特定のケースは既存のケースを採用します。4つの都市間の双方向距離は異なり、同じでもかまいません。

                             

第二に、解決策

1.デプストラバーサルの優先順位アルゴリズムDFS(完全な方法)

        すべての結果をリストし、各パスを計算してから、すべての結果を比較しますん!時間の複雑さはです。この場合、可能なすべての結果は

                                                                 

        それはすべての可能なパス、合計4 * 3 * 2 * 1 = 24の状況をリストし、それらを順番に計算してTSP問題の最適なソリューションを取得することがわかります。この観点から、トラバーサル行列を生成することが鍵となります。

1.1走査行列の生成

数が少ない場合は、次の方法を使用できます。

clc;
close all;
clear all;
n=4;
P=[];
for i=1:n
    for j=1:n
        if j~=i
            for k=1:n
                if k~=j&&k~=i
                    for l=1:n
                        if l~=k&&l~=j&&l~=i
                            a=[i,j,k,l];
                            P=[P;a];
                        end
                    end                    
                end
            end
        end
    end
end

        Matlabはperms関数を提供します。これは、対応する結果を取得できるため、より簡潔です。

clc;
close all;
clear all;
n=1:4;
perms(n)

1.2各スキームの合計距離の計算

        トラバース行列Vを計算した後、各プランの合計距離を取得できます

C=[0,3,6,7;5,0,2,3;6,4,0,2;3,7,5,0];
V=[V,V(:,1)];
for i=1:size(V,1)
    for j=1:size(V,2)-1
    d(i,j)=C(V(i,j),V(i,j+1));
    end
end

1.3完全なコード

clc;
close all;
clear all;
n=1:4;
V=perms(n);                                 %得到全排列遍历矩阵
C=[0,3,6,7;5,0,2,3;6,4,0,2;3,7,5,0];        %输入距离矩阵
V=[V,V(:,1)];                               %将第一列放到矩阵最后一列形成环路
for i=1:size(V,1)                           %计算每一条环路的各段长度
    for j=1:size(V,2)-1
    d(i,j)=C(V(i,j),V(i,j+1));
    end
end
D=sum(d,2);                                 %将各段长度加和
 [d,position]=min(D);                        %找到最短环路
d_min=d;                                    %最短环路的长度
path_min=V(position,:);                     %最短环路的路径                    
N=length(path_min);
p = num2str(path_min(1));                   %将路径加上->
for i=2:N
    p=[p,'->',num2str(path_min(i))];
end
disp('深度遍历优先算法DFS得到的最优路径为:')
disp(p)
fprintf('深度遍历优先算法DFS得到的最优路径的长度为:%d\n',d_min)

出力は次のとおりです。

                               

おすすめ

転載: blog.csdn.net/weixin_41971010/article/details/108064294