数学建模必备算法之模拟退火算法
在2020年的全國大學生數學建模競賽的A題中,第三問要確定面積最小的最優爐溫曲線,這是一個有五個優化變量的優化問題,由于優化變量太多,導致假若直接用搜索法求解的話,計算量會非常大。?
一共5個優化變量,每個變量都進行20次搜索(搜索精度已經很小了)的話,就是要計算205次,假如計算一次需要0.05秒,也就是需要計算44小時以上。倘若再提高搜索的精度,則估計需要計算數天。
解決這個問題的其中一類方法就是用智能算法,包括模擬退火、遺傳算法、蟻群算法、粒子群算法等等。
下面就來介紹一下比較適合于解這道題的模擬退火算法。
模擬退火算法
模擬退火算法是屬于貪心策略的算法,所謂貪心策略,就是總是做出在當前看來是最好的選擇。而不是從整體最優上考慮,它得到的是某種意義下的局部最優解。因此,這種算法不是對所有的問題都能得到整體最優解,關鍵是選擇什么樣的貪心策略。
最基本的基于貪心策略的算法可以叫做爬上法,此算法是從當前解的附近解空間中去選擇一個最優解作為當前解,一直這樣重復,直到在附近的解空間中找不到更優解為止。因此這個算法很大的可能性找到的只能是局部最優解。
如下圖所示:假設當前解是在C點,爬山算法搜索到A點這個局部最優解后就會停止搜索,因為在A點時,無論向哪個方向去小幅度移動都不能得到更優的解。
而我們的模擬退火算法實際上也是基于貪心策略的,只不過它在爬山法這種純粹的貪心策略的基礎上,又在搜索過程中加上了隨機因素。這個隨機因素的具體表示就是:該算法會以一定的概率來接受一個比當前解要差的解。于是也就有了跳出爬山法的局部最優解的可能。
還是以上面爬山法的圖為例,模擬退火算法在到達局部最優解A后,會以一定的概率向E去移動。到達E點后,就會有可能到達D點,從而依據爬上法的思想,就會到達真正的全局最優解B點了。
模擬退火算法描述如下:
若K(Y(i+1))>=K(Y(i))(即移動后的第i+1處得到了更優解),則總是接受該移動。
若K(Y(i+1))<K(Y(i))(即移動后i+1處的解比當前解要差),則以一定的概率接受移動,且這個概率是隨著時間推移逐漸降低(逐漸降低才能趨向穩定)。
那么怎么定義這個“一定的概率”呢?
實際上是參考了金屬冶煉的退火過程,故而此算法被叫做模擬退火算法。
根據熱力學的原理,在溫度為T時,出現能量差為dE的降溫的概率為P(dE),表示為:
P(dE)=exp(dE/(kT))
其中k是一個常數,exp表示自然指數,且dE<0。
此公式含義是:溫度越高,出現一次能量差為dE的降溫的概率就越大;溫度越低,則出現降溫的概率就越小。又由于dE總是小于0(因此叫退火),因此dE/kT<0,所以P(dE)的函數取值范圍是(0,1)。
隨著溫度T的降低,P(dE)會逐漸降低。
我們將一次向較差解的移動看做一次溫度跳變過程,我們以概率P(dE)來接受這樣的移動。
因此可以將模擬退火算法與爬山算法對比成:
爬山算法:一只兔子朝著比當下所處的位置更高的地方跳。它逐步地跳到了不遠處的最高山峰。但是這座山峰不一定就是整個解空間所在區域的最高山峰,它只是這只兔子目光所及的這一塊區域的最高山峰。
模擬退火:一只兔子喝醉了。它隨機地向各個方向跳了很長時間。這期間,它可能跳向比當下更高的地方,也有可能跳入比當下更低的地方。但是,等它逐漸地清醒了,會朝著最高的方向跳去。這種跳法更有可能會跳向最高的山峰。
此算法用流程圖可以表示為:
用偽代碼表示:
s:=s0;e:=E(s)????????//設定目前狀態為s0,其能量E(s0)
k:=0?????????????????//評估次數k
while?k<kmax?and?e>emax
//若還有時間(評估次數k還不到kmax)且結果還不夠好(能量e不夠低)則:
sn:=neighbour(s)?????//隨機選取一臨近狀態sn
en:=Esn)?????????????//sn的能量為E(sn)
if?random()<P(e,en,temp(k/kmax))?
then?????????????????//決定是否移至臨近狀態sn
s:=sn;?e:=en????????//移至臨近狀態sn
k:=k+1???????????????//評估完成,次數k加一
returns??????????????//回轉狀態s
模擬退火算法的應用非常廣泛,在經典的0-1背包問題上、圖著色問題上、物流配送里的調度問題等各類的調度問題上等等,都能夠使用。
在跨領域上,大規模集成電路設計(VLSI)問題里的布線布板等優化問題都會用到此算法。以及在最近幾年非常火的神經網絡上,如何避免梯度下降算法過程中陷入局部最優解很多時候都是可以用到模擬退火算法。還有圖像處理以及各種組合優化問題都會用到。
總結
以上是生活随笔為你收集整理的数学建模必备算法之模拟退火算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 编译原理【实验1——扫描器的设计与实现】
- 下一篇: 研究生 论文写作【要注意的30个禁忌(总