TSP問題的模擬退火解法

2021-07-15 02:54:51 字數 1153 閱讀 7671

產生測試資料

import random as rd

n=eval(input('城市數量:'))

res=

for i in range(1,n):

for j in range(i+1,n+1):

f=open('input.txt','w')

f.write(str(n)+' '+str(len(res))+'\n')

for i in res:

f.write(str(i[0])+" "+str(i[1])+" "+str(i[2])+"\n")

f.close()

input('結束')

暴力法求解程式

#include#include#define n 100

#define big 99999

using namespace std;

double s[n][n];//距離矩陣

int m,n;//m代表座標點個數,n代表輸入行數

int temp[n];//迭代中的一組解

int res[n];//最終解

double dist=0;

void search(int k)

for(int i=1;i<=m;i++)

dist+=s[m][1];

for(int i=1;i<=m;i++)temp[i]=i;//初始化

for(int i=1;i<=m;i++)

search(1);

cout<<"距離:"<

模擬退火求解程式

#include#include#include#include#define n 109

#define big 9999999

using namespace std;

double nowdist(double d[n][n],int temp[n],int m)

for(int i=1;i<=m;i++)

dist+=d[m][1];

cout<<"初始距離: "(rand()%100)/100.0)else

t*=a;//降溫

}ct++;

if(ct>all)break;

} cout<<"當前最短距離:"<

TSP 模擬退火

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

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