基於模擬退火的tsp問題求解

2021-10-08 23:01:46 字數 2930 閱讀 1746

模擬退火演算法**於固體退火原理,是一種基於概率的演算法,將固體加溫至充分高,再讓其徐徐冷卻,加溫時,固體內部粒子隨溫公升變為無序狀,內能增大,而徐徐冷卻時粒子漸趨有序,在每個溫度都達到平衡態,最後在常溫時達到基態,內能減為最小。

這是關於模擬退火的科普**

模擬退火

模擬退火實現起來主要分為三個部分:

1.加溫過程。其目的是增強粒子的熱運動,使其偏離平衡位置。當溫度足夠高時固體將融為液體,從而消除系統原先存在的非均勻狀態。

2.等溫過程。對於與周圍環境交換熱量而溫度不變的封閉系統,系統狀態的自發變化總是朝自由能減少的方向進行的,當自由能最小時,系統達到平衡狀態。

3.冷卻過程。使粒子熱運動減弱,系統能力下降,得到晶體結構。

模擬退火作為智慧型演算法可以用來求一些複雜問題的較優值,比如在tsp問題中就可以很好地運用,接下來筆者對基於模擬退火的tsp問題進行matlab實現,讓讀者能更深刻體會模擬退火的過程。

分析:我們首先生成乙個矩陣,每個元素為0,除了那些有n個石頭的元素位置。而這些非0元素的位置就是我們推土車要移動到的座標,根據題目的要求有10個非0元素(其他問題類似,改一下資料或其他小細節)。求經過所有點的最短路徑,即可以轉化為tsp問題,這樣就很熟悉了吧。

話不多說,看matlab**吧:

詳細**請參看我的**:詳細**

clear

clct0 =

1000

;% 起始溫度

tend =

1e-3

;% 終止溫度

l =200

;% 各溫度下的迭代次數

q =0.9

;% 降溫速率

position =[2

8115

91034

5713

2645

593]

;% 計算各點之間的距離矩陣

[m,n]

=size

(position)

;d =

zeros

(m);

for i =1:m

for j =1:m

if i == j

d(i,j)=0

;else

d(i,j)

=sqrt((

position

(i,1)-

position

(j,1))

^2+(

position

(i,2)-

position

(j,2))

^2);

endend

ends1 =

randperm

(m);

% 產生乙個解、畫圖並輸出路徑

drawpath

(s1,position)

;disp

('一可行解的路徑'

)outputpath

(s1)

;r =

pathlength

(d,s1)

;disp([

'迴路長度為:'

,num2str

(r)]);

count =0;

% 開始迭代

while t0 > tend

temp =

zeros

(l,m+1)

; count = count +1;

for k =1:l

s2 =

newanswer

(s1)

;[s1,r]

=metropolis

(s1,s2,d,t0)

;temp

(k,:)=

[s1,r]

; end

% 記錄每次迭代的最優路線

[~,index]

=min

(temp(:

,end));

record

(count)

=temp

(index,end)

;track

(count,:)

=temp

(index,

1:end-1)

; t0 = q*t0;

end% 畫圖顯示結果[~

,tip]

=min

(record)

;drawpath

(track

(tip,:)

,position)

;hold on

title

('最優路線'

)figure

hold on

plot(1

:count,record)

xlabel

('迭代次數'

)ylabel

('距離'

)title

('優化過程'

)disp([

'最優路徑與距離'

,num2str

(record

(tip))]

)outputpath

(track

(tip,:)

);

詳細**請參看我的**:詳細**

圖1是任意解,圖2是模擬退火演算法尋得的最優解,圖3是迭代過程中距離的優化過程。由圖可知,最終找到最優解,說明模擬退火是解決此問題的不錯的方法。

模擬退火求解TSP問題

1.尋找下乙個解 2.計算下乙個解的能量 3.決定是否接受這個解 4.降溫 double randfloat double t0 1000000 tk 1,t t0,d 0.9999 int x initx 當前解 初始解 int anse,nowe 全域性最優解的能量,當前解的能量 anse no...

TSP 模擬退火

都知道tsp是經典的np問題,從乙個點開始遍歷所有點,不重複,求最短路徑。可以用列舉終點,跑流量為2的最小費用,圖論來做,時間複雜度為 費用流已經用到堆優化了。顯然點,邊較多將無法承受。如果不要求精確解,使用模擬退火也是乙個不錯的選擇。模型簡單,轉移很暴力。先隨機生成一些解,然後隨機挑兩個點,開始試...

模擬退火 解決 TSP 問題

tsp問題求解 n個城市之間有一定距離,現在讓選擇乙個城市出發,然後到達所有的城市,最後回到原點每個城市只到達一次,求出一條路徑並且求出最短的距離 tsp問題是乙個np問題,但是可以求近似解,通過模擬退火演算法實現,源 include include include include include ...