日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

模拟退火求解TSP问题

發(fā)布時(shí)間:2023/12/3 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 模拟退火求解TSP问题 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

模擬退火求解TSP問題

模擬退火算法步驟

1.尋找下一個(gè)解
2.計(jì)算下一個(gè)解的能量
3.決定是否接受這個(gè)解
4.降溫

算法模板

double randfloat() {return rand()/(RAND_MAX+0.0); }double T0 = 1000000,Tk = 1,T = T0,d = 0.9999; int x = initx();//當(dāng)前解(初始解) int ansE,nowE;//全局最優(yōu)解的能量,當(dāng)前解的能量ansE = nowE = E(x);while(T > Tk) {//1.產(chǎn)生新解int newx = generate(x);//2.計(jì)算新解的能量int newE = E(newx);//3.確定是否接受if(newE < nowE || randfloat() > exp((nowE-newE)/T)){nowE = newE;x = newx;}//4.降溫T *= d;//5.更新全局最優(yōu)解Optimize(ansE,newE); }

TSP問題代碼

交題鏈接
http://acm.zjnu.edu.cn/CLanguage/showproblem?problem_id=1420

#include <iostream> #include <algorithm> #include <cstring> #include <ctime> #include <cmath> #include <assert.h> #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; int run(int x[]){int ans = 0;rep(i,1,n) {ans += G[x[i-1]][x[i%n]];}return ans; }double randfloat() {return rand()/(RAND_MAX+0.0); }int solve() {srand(time(NULL));int x[22];rep(i,0,n-1) x[i] = i+1;double T0 = 100000000,Tk = 1,T = T0,d = 0.99;int ans = run(x);int preans = ans;while(T > Tk) {//1.產(chǎn)生新解int a = rand()%n;int b = rand()%n;//std::swap(x[a],x[b]);std::reverse(x+a,x+b+1);//2.計(jì)算下一個(gè)解的能量int newans = run(x);Min(ans,newans);//3.確定是否接受if(newans >= preans) {if(randfloat() > exp((preans-newans)/T))//std::swap(x[a],x[b]);std::reverse(x+a,x+b+1);else preans = newans;}else preans = newans;//4.降溫T *= d;}return ans; }signed main() {std::cin >> n >> m;//setinf(G);if(n == 1) return 0*puts("0");rep(i,1,n) rep(j,1,n) {G[i][j] = 1e11;}rep(i,1,m) {int a,b,c;std::cin >> a >> b >> c;Min(G[a][b],c);Min(G[b][a],c);}std::cout << solve() << std::endl; }

總結(jié)

以上是生活随笔為你收集整理的模拟退火求解TSP问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。