1.尋找下乙個解
2.計算下乙個解的能量
3.決定是否接受這個解
4.降溫
double
randfloat()
double t0 =
1000000
,tk =
1,t = t0,d =
0.9999
;int x =
initx()
;//當前解(初始解)
int anse,nowe;
//全域性最優解的能量,當前解的能量
anse = nowe =
e(x)
;while
(t > tk)
//4.降溫
t *= d;
//5.更新全域性最優解
optimize
(anse,newe)
;}
交題鏈結
#include
#include
#include
#include
#include
#include
#define pr(x) std::cout << #x << ':' << x << std::endl
#define rep(i,a,b) for(int i = a;i <= b;++i)
#define int long long
int g[21]
[21];
int n,m;
intrun
(int x)
return ans;
}double
randfloat()
intsolve()
else preans = newans;
//4.降溫
t *= d;
}return ans;
}signed
main()
rep(i,
1,m)
std::cout <<
solve()
<< std::endl;
}
基於模擬退火的tsp問題求解
模擬退火演算法 於固體退火原理,是一種基於概率的演算法,將固體加溫至充分高,再讓其徐徐冷卻,加溫時,固體內部粒子隨溫公升變為無序狀,內能增大,而徐徐冷卻時粒子漸趨有序,在每個溫度都達到平衡態,最後在常溫時達到基態,內能減為最小。這是關於模擬退火的科普 模擬退火 模擬退火實現起來主要分為三個部分 1....
TSP 模擬退火
都知道tsp是經典的np問題,從乙個點開始遍歷所有點,不重複,求最短路徑。可以用列舉終點,跑流量為2的最小費用,圖論來做,時間複雜度為 費用流已經用到堆優化了。顯然點,邊較多將無法承受。如果不要求精確解,使用模擬退火也是乙個不錯的選擇。模型簡單,轉移很暴力。先隨機生成一些解,然後隨機挑兩個點,開始試...
模擬退火 解決 TSP 問題
tsp問題求解 n個城市之間有一定距離,現在讓選擇乙個城市出發,然後到達所有的城市,最後回到原點每個城市只到達一次,求出一條路徑並且求出最短的距離 tsp問題是乙個np問題,但是可以求近似解,通過模擬退火演算法實現,源 include include include include include ...