模擬退火 爬山演算法 模板

2021-09-25 19:54:04 字數 1251 閱讀 4293

學習部落格

題目鏈結

玄學演算法。。。一開始不知道調參wa到懷疑人生

後來嘗試改一下delta竟然過了。。。退火和爬山的區別其實就是當沒有更優解的時候退火會以乙個概率來接收,爬山就不接受。所以把else if(exp((res-temp)/t)*rand_max > rand())注釋掉就是爬山了。。

#pragma gcc optimize(2)

#include

#include

#include

#include

using namespace std;

#define ft first

#define sd second

#define all(c) ((c).begin()), ((c).end())

#define mp(a, b) make_pair(a, b)

#define pb(x) push_back(x)

const

int maxn =

1e5+5;

typedef

long

long ll;

const ll mod =

1e9+7;

int case =1;

int n, m;

struct nodecc[maxn]

;double res, t;

const

double delta =

0.993

;double resx, resy;

double

cal(

double x,

double y)

return rt;

}void

simulate_anneal()

//else if(exp((res-temp)/t)*rand_max > rand())x = x, y = y;

t *= delta;}}

void

solve()

resx /

= n;resy /

= n;

simulate_anneal()

;simulate_anneal()

;simulate_anneal()

;printf

("%.3f %.3f\n"

, resx, resy)

;return;}

intmain()

return0;

}

爬山演算法與模擬退火演算法

模擬退火演算法 爬山演算法是一種基於貪心的搜尋方法,其原理是每次前往最佳的相鄰狀態。由於一般的搜尋問題無法看作結點數有限的圖,因此這裡的相鄰其實不是圖的那種相鄰。以搜尋二維平面上的乙個點為例。設 f x y f x,y f x,y 表示座標為 x,y x,y x,y 的點的權值,現在要找到乙個 x,...

MATLAB模擬退火演算法模板

為了參加國賽,這幾天學了模擬退火演算法,整理下當做模板方便國賽的時候用。模擬退火用於處理最優化問題,可以求出當目標函式取得最小值時的決策變數的值。在編寫程式時需要根據具體問題設計演算法,演算法描述為 1 解空間 初始解 2 目標函式 3 新解的產生 2 變換法 3 變換法 4 代價函式差 5 接受準...

模擬退火模板

個人感覺模擬退火就是通過隨機法逐步趨近於最優值。結合例題進行說明 一 求三角形的費馬點 平面內到三個頂點距離和最小的點 includeusing namespace std struct point p 5 int row 4 向四個方向移動點尋找最優解 int col 4 double len p...