模拟退火算法
文章目錄
- 前言
- 一、模擬退火算法原理
- 二、算法公式
- 1.Metropolis算法
- 2.退溫函數
- 3.馬爾可夫鏈
- 三、算法步驟
- 舉個例子
- 總結
前言
模擬退火算法是一種通用的優化算法,是局部搜索算法的擴展,但是不同于局部搜索算法之處是以一定的概率選擇領域中目標值較大的劣質解。模擬退火算法以優化問題的求解與物理系統退火過程的相似性為基礎,利用Metropolis算法適當地控制溫度的下降過程來實現模擬退火,從而達到求全局優化的問題。
一、模擬退火算法原理
模擬退火算法來源于固體退火原理,將高溫物體徐徐冷卻,慢慢達到一個穩定的狀態。高溫時,內部粒子內能大,粒子可能在固體內部的任何地方活動;當溫度慢慢冷卻,粒子內能減少,活躍度降低,活動范圍慢慢減小;當固體冷卻完畢或者達到平衡穩定,粒子的位置就固定,就可以獲取最優解。
模擬退火算法的主要是思想是:在搜索區間隨機游走,再利用Metropolis抽樣準則,使隨機游走逐漸收斂于局部最優解。而溫度是Metropolis算法的重要參數,決定了隨機過程收斂的快慢。
二、算法公式
1.Metropolis算法
對于目標函數f(x),參數從x1變化到x2被接受的概率p為(以求最小值為例):
當f2<f1時,p=1
當f2>f1時,p=exp(-Δf/T)
Δf=f1-f2為目標函數f(x1),f(x2)的值的差。
T為溫度常數,隨著時間慢慢減少,當溫度很高時,取第二種概率高,隨著溫度降低,取第二種情況慢慢減少,直至幾乎不會選擇第二種情況。
2.退溫函數
模擬退火算法的溫度T是慢慢降低的常用公式更新函數為:
T(n+1)=K*T(n)
K是一個非常接近1的常數,比如0.99.
3.馬爾可夫鏈
參數X的在溫度T下的迭代過程類似于馬爾可夫鏈過程,即X(n+1)的值受X(n)影響,X(n+1)=g(X(n))。
三、算法步驟
a. 初始化:設置初始溫度T(足夠大,保證Metropolis算法可以取第二種情況),設置初始解狀態x(0),設置每個T值的迭代次數L,設置x更新函數,最優解best和最優解目標函數f(best)。
b. 對于1...L,重復c~f:
c. 計算出一個新的參數x(i)=g(x(i-1));
d. 計算目標函數增量Δf=f(x(i))-f(x(i-1));
e. 根據Metropolis算法選擇是否接受新的解x(i),如果不接受,x(i)=x(i-1);
f. 如果f(x(i))<f(best),best=x(i);
g. 如果滿足終止條件(T足夠小或者目標函數f(best)達到指標),輸出最優解best,結束;否則,更新溫度T,轉到b.
舉個例子
求函數f=cos(xy)+xy+y^3 在區間[-5,5]的最小值,選取的T可以為100,初始狀態x0,y0在區間隨機取即可。
退溫比例K可以取0.998,馬爾可夫鏈迭代次數可以選取[200,2000]。
參數x,y更新函數可以選取 x(n+1)=x(n)+rand(-5,5)*step,step為步長。step的選取很麻煩,太大了最后收斂的時候可能取不到最優解,太小了跳不出局部最優解。實現過程中,我覺得可以設置step隨著遍歷次數慢慢減少,取[0.02,0.05]。
書本上給的例子還有一個旅行商問題(TSP問題),求旅行商人不充復拜訪全國的最短路徑。在實現上沒什么區別,就是參數更新函數上,是選擇了隨機調換兩個地點的順序。
總結
這個算法是看書本寫的,例子也是書本的,想看原版的可以去看看《智能優化算法及其MATLAB實例》
總結
- 上一篇: git 使用 tree命令
- 下一篇: 【证明】—— 矩阵秩的相关证明