個人感覺模擬退火就是通過隨機法逐步趨近於最優值。
結合例題進行說明:
一、求三角形的費馬點(平面內到三個頂點距離和最小的點)。
#includeusing namespace std ;
struct point
p[5] ;
int row[4] = ; //向四個方向移動點尋找最優解
int col[4] = ;
double len(point a , point b) //兩個點的距離
double cal(point a) //計算點到三個頂點的距離和
double random1() //生成[0,1)區間的隨機浮點數
void solve()
} de = cal(now) - cal(ans) ;
if(de < 0.0 || exp(de / t) > random1()) //距離和減小 或 以較小的概率向距離和增大的方向移動
t *= delta ;
} printf("%.12f %.12f" , ans.x , ans.y) ;
}int main()
二、求解方程的根,然後代入弧長積分。求解根時可以轉化為求絕對值的最小值用模擬退火。
#includeusing namespace std ;
double p , d , a ;
double delta = 0.999 ; //降溫速度
double t ;
double tempa , tempans ;
double ans ;
double de , maxd ;
int row[2] = ;
double cal(double h) //求根
double random1() //生成[0,1)區間的隨機浮點數
double f(double h) //弧長積分
int main()
} de = ans - tempnum ;
if(de > 0.0 || exp(de / t) > random1())
t *= delta ;
} ans = f(a) ;
ans=(int)(ans*1000); //截斷後面的小數而不是四捨五入
ans=(double)(ans*1.0/1000);
printf("%.3f\n" , ans) ;
}}
模擬退火(SA)模板
退役很久了,今天看一篇 用sa演算法代替隨機梯度優化神經網路,故學習一波sa演算法。因為網上的資料很多,所以這裡就不多說啦。詳情可以看 高中生太強啦 這裡放乙個模板 如圖 有n個重物,每個重物繫在一條足夠長的繩子上。每條繩子自上而下穿過桌面上的洞,然後繫在一起。圖中x處就是公共的繩結。假設繩子是完全...
MATLAB模擬退火演算法模板
為了參加國賽,這幾天學了模擬退火演算法,整理下當做模板方便國賽的時候用。模擬退火用於處理最優化問題,可以求出當目標函式取得最小值時的決策變數的值。在編寫程式時需要根據具體問題設計演算法,演算法描述為 1 解空間 初始解 2 目標函式 3 新解的產生 2 變換法 3 變換法 4 代價函式差 5 接受準...
模擬退火 爬山演算法 模板
學習部落格 題目鏈結 玄學演算法。一開始不知道調參wa到懷疑人生 後來嘗試改一下delta竟然過了。退火和爬山的區別其實就是當沒有更優解的時候退火會以乙個概率來接收,爬山就不接受。所以把else if exp res temp t rand max rand 注釋掉就是爬山了。pragma gcc ...