模擬退火是一種隨機化演算法,常用於求函式極值。當乙個問題的方案數量極大(甚至是無窮的),我們一般有兩個選擇。
爬山演算法每次在當前找到的最優方案
x x
附近尋找乙個新方案(一般隨機差值)。如果這個新的解 x′
' role="presentation">x′x
′更優,那麼轉移到 x′
x
′否則不變。
這種演算法對於單峰函式顯然可行(你都知道是單峰函式了為什麼不三分呢)
但是對於多數需要求解的函式中,爬山演算法很容易進入乙個區域性最優解,如下圖(最優解為
⇑ ⇑
,而爬山演算法可能找到的最優解為
根據爬山演算法的過程,我們發現:對於乙個當前最優解附近的非最優解,爬山演算法直接捨去了這個解。而很多情況下,我們需要去接受這個非最優解從而跳出這個區域性最優解,即為模擬退火演算法。
由於退火的規律引入了更多隨機因素,那麼我們得到最優解的概率會大大增加。於是我們可以去模擬這個過程,將目標函式作為能量函式。
模擬退火演算法描述
我們定義當前溫度為
t t
,新狀態與已知狀態(由已知狀態通過隨機的方式得到)之間的能量(值)差為 δe
' role="presentation">δeδ
e(δe
⩾0δ e⩾
0),則發生狀態轉移(修改最優解)的概率為 p(
δe)=
double calc(double xx,double yy)
if(resreturn res;
}void simulateanneal()
for(int i=1;i<=1000;++i)
}int main()
ansx/=n,ansy/=n,dis=calc(ansx,ansy);
simulateanneal();
printf("%.3lf %.3lf\n",ansx,ansy);
return
0;}
模擬退火演算法
w 模擬退火演算法的基本思想 將乙個優化問題比擬成乙個金屬物體,將優化問題的目標函式比擬成物體的能量,問題的解比擬成物體的狀態,問題的最優解比擬成能量最低的狀態,然後模擬金屬物體的退火過程,從乙個足夠高的溫度開始,逐漸降低溫度,使物體分子從高能量狀態緩慢的過渡到低能量狀態,直至獲得能量最小的理想狀態...
模擬退火演算法
一些求解極值的問題不能通過函式特性直接求解,只能暴力列舉,但是單純的列舉效率不高,通過模擬退火演算法可以高效的找到答案。學習好博文 最小圓覆蓋 hdu 3007 buried memory 大意 給出一些點,求出能覆蓋他們的最小的圓。輸出圓心和半徑 include include include i...
模擬退火演算法
1.模擬退火演算法認識 爬山演算法也是乙個用來求解最優化問題的演算法,每次都向著當前上公升最快的方向往上爬,但是初始化不同可能 會得到不同的區域性最優值,模擬退火演算法就可能跳出這種區域性最優解的限制。模擬退火演算法是模擬熱力學系統 中的退火過程。在退火過程中是將目標函式作為能量函式。大致過程如下 ...