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)
ヒール