TSP-SA_TSP

clc;

晴れ;

すべて閉じる;

%%

チック

T0 = 1000;%初期温度

傾向= 1e-20;%終了温度

L = 500;%各温度での反復回数(チェーン長)

q = 0.9;%冷却速度

 

%%データをロード

matlab1をロードします。

X = A;

%%

D =距離(X);%距離行列の計算

N =サイズ(D、1);%都市の数

%%初期ソリューション

S1 = randperm(N);%は初期ルートをランダムに生成します

 

%%ランダム解の経路図を描く

DrawPath(S1、X)

一時停止(0.0001)

%%出力ランダムソリューションパスと合計距離

disp( '初期母集団のランダムな値:')

OutputPath(S1);

Rlength = PathLength(D、S1);

disp(['合計距離:'、num2str(Rlength)]);

 

%%反復回数を計算します時間

Time = ceil(double(solve(['1000 *(0.9)^ x ='、num2str(Tend)])));

count = 0;%反復回数

Obj = zeros(Time、1);%ターゲット値行列の初期化

トラック=ゼロ(時間、N);%生成ごとの最適ルート行列の初期化

%%反復

一方、T0> Tend

    count = count + 1;%更新反復

    temp = zeros(L、N + 1);

    k = 1:Lの場合

        %%は新しいソリューションを生成します

        S2 = NewAnswer(S1);

        %% Metropolisルールは、新しいソリューションを受け入れるかどうかを決定します

        [S1、R] =メトロポリス(S1、S2、D、T0);%メトロポリスサンプリングアルゴリズム

        temp(k、:) = [S1 R];%次のルートとその距離を記録

    終わり

    %%各反復の最適ルートを記録します

    [d0、index] = min(temp(:、end));%現在の温度で最適なルートを見つける

    count == 1の場合|| d0 <Obj(カウント-1)

        Obj(count)= d0;%現在の温度での最適距離が以前の距離よりも短い場合、現在の距離を記録します

    そうしないと

        Obj(count)= Obj(count-1);%現在の温度での最適距離が前の距離より大きい場合、最後の距離を記録します

    終わり

    track(count、:) = temp(index、1:end-1);%現在の温度の最適ルートを記録

    T0 = q * T0;%冷却

    fprintf(1、 '%d \ n'、count)%出力現在の反復数

終わり

%%最適化プロセス反復図

plot(1:count、Obj)

xlabel( '反復回数')

ylabel( '距離')

タイトル(「最適化プロセス」)

 

%%最適解のパスマップ

DrawPath(トラック(終了、:)、X)

 

最適なソリューションを出力するための%%ルートと合計距離

disp( '最適解:')

S = track(end、:);

p = OutputPath(S);

 

disp(['合計距離:'、num2str(PathLength(D、S)))]);

DISP(「----------------------------------------------- --------------「)

 

M = zeros(N、3);

%X(S(2)、:、:)

for i = 1:N

   M(i、:、:)= X(S(i)、:、:);

終わり

C = [M(:、:、:); M(1、:、:)]

 scatter3(X(:、1)、X(:、2)、X(:、3)、 'k'、 'linewidth'、3)

 つかまっている

 plot3(C(:、1)、C(:、2)、C(:、3)、 'r'、 'linewidth'、2)

ヒール

おすすめ

転載: www.cnblogs.com/free-1122/p/12722388.html