這次並不算十分深入地學習了三種現代啟發式演算法,具體內容有待補充。先做乙個簡單的記錄。
模擬退火 遺傳演算法 蟻群演算法
先說一下什麼是現代啟發式演算法
啟發式演算法(heuristic algorithm)是相對於最優化演算法提出的。乙個問題的最優演算法就是求得該問題每個例項的最優解。啟發式演算法可以這樣定義:乙個基於直觀或經驗構造的演算法,在可接受的花費(指計算時間和空間)下給出待解決組合優化問題每乙個例項的乙個可行解,該可行解與最優解的偏離程度一般不能被預計。現階段,啟發式演算法以仿自然體演算法為主。
模擬退火演算法
退火是乙個物理過程,粒子可以從高能狀態轉換為低能狀態,而從低能轉換為高能則有一定的隨機性,且溫度越低越難從低能轉換為高能。就是在物體冷卻的過程中,物體內部的粒子並不是同時冷卻下來的。因為在外圍粒子降溫的時候,裡邊的粒子還會將熱量傳給外圍粒子,就可能導致區域性粒子溫度上公升,當然,最終物體的溫度還是會下降到環境溫度的。
先給出一種求最優解的方法,在尋找乙個最優解的過程中採取分段檢索的方式,在可行解中隨機找出來乙個,然後在這個解附近進行檢索,找到更加優化的解,放棄原來的,在新得到的解附近繼續檢索,當無法繼續找到乙個更優解的時候就認為演算法收斂,最終得到的是乙個區域性最優解。
那當我們更想找到乙個全域性最優解的時候應該怎麼做呢?人們想到在進行的優化問題的鄰域搜尋的時候引入退火規則,即當下一狀態比當前狀態更優時直接接受,反之則以一定概率接受較差解,此概率隨著迭代進行不斷減小,最後趨近零,這保證了演算法是一定收斂的。
接下來給出乙個演算法步驟:
還沒有學會打公式,就先截組長的ppt了
簡單解釋一下這個吧,就像剛才說的,以一定概率接受較差解,並且這個概率隨著迭代迴圈的次數增加而減少。就是當優化前的演算法往區域性最優解走的時候,有一點可能會退回來,再尋找相鄰峰的最優解,這就有一定可能跳出區域性最優的陷阱。但是這並不表示一定能夠跳出區域性最優,當p逐漸減小的時候還是會有可能被困在區域性最優接,但是這比一股腦往上懟要靈活不少,不是嗎?
遺傳演算法
遺傳演算法感覺不是很好講清楚哇,試著跟著自己的理解說一點吧!
首先,要把問題的每一組可行解看作乙個染色體(就是一段連續的二進位制編碼),從所有的可行解組中隨機選擇一部分當作起始搜尋點的初始群體。
接下來就是要模仿生物進化中的選擇,交配,變異過程了。
選擇了初始群體之後,肯定要先選擇一次了,找到更優的解組,這就需要乙個選擇標準,就是適應度計算。在實際中有很多標準,一般是將可行解在實際背景下的預報值計算出來,求每乙個可行解佔所有解預報值之和的頻數。然後,隨機生成0~1中的乙個數,檢視隨機數落在哪個可行解對應的預報值中間,就留下此可行解,未被隨機數選中的自然淘汰掉了。
然後就是交配過程,將上一步選擇後的幾組解兩兩配對,隨機選擇乙個交叉點,將交叉點分成的段互換,就會得到新的一組解,然後再做適應度計算,選擇更優解。
交配完成後就需要變異了,這很簡單,將得到的借的二進位制編碼上的數字隨機取反一次,再做適應度計算,選擇更優。
然後就是上述的 選擇交配變異過程迴圈,直到找到最優解。
蟻群演算法
很顯然,就是模仿螞蟻尋找食物而發明的演算法,主要用途就是尋找最佳路徑。
先講一下螞蟻是怎麼尋找食物,並且在尋找到了食物後怎麼逐漸確定最佳路徑的。
事實上,螞蟻的目光很短,它只會檢索它附近的很小一部分空間,但是它在尋路過程中不會去重複它留下資訊素的空間,也就是它不會往回走。當一群螞蟻遇到障礙物了之後,它們會隨機分為兩撥,一波往左一波往右,但是因為環境會揮發掉它們的資訊素,於是,較短的路留下的資訊素多,而較長的路因為揮發較多,也就留下得少了。接下來,蟻群就會趨向於行走資訊素較多的路徑,於是大部分螞蟻就走了較短的路了。但是蟻群中又有一些特別的螞蟻,它們並不會走大家走的路,而是以一定概率尋找新路,如果新路更短,資訊素揮發更少,漸漸得蟻群就會走向更短的路徑。
以上就是螞蟻尋路的具體過程。
把這個過程對映到計算機演算法上,計算機在單次迭代過程中,會在路徑的節點上留下資訊素(可以使用資料變數來表示)。每次迭代都做資訊素蒸發處理,多次迭代後聚集資訊素較多的路徑即可認為是較優路徑。
下面給出資訊素更新公式
以上公式就是代表資訊素的蒸發,然後,蟻群會進行乙個概率選擇,選擇概率計算方式如下
這三種演算法具體實現還沒弄清楚,畢竟只是剛開始學習,先做乙個學習記錄吧。
三種演算法都引入了概率接受,這就是在傳統演算法基礎上做的乙個提公升,我覺得這個概率接受是學習次三種算發最大的收穫吧。
現代啟發式演算法
啟發式演算法 heuristic algorithm 是相對於最優化演算法提出的。乙個問題的最優演算法求得該問題每個例項的最優解。啟發式演算法可以這樣定義 乙個基於直觀或經驗構造的演算法,在可接受的花費 指計算時間和空間 下給出待解決組合優化問題每乙個例項的乙個可行解,該可行解與最優解的偏離程度一般...
啟發式與元啟發式演算法
啟發式演算法 heuristic algorigthm 是一種基於直觀或經驗構造的演算法,在可接受的花費 指計算時間 計算空間等 給出待解決優化問題的每一例項的乙個可行解,該可行解與與最優解的偏離程度一般不可以事先預計。啟發式演算法是一種技術,這種演算法可以在可接受的計算費用內找到最好的解,但不一定...
啟發式演算法和元啟發式演算法
是一種基於直觀或經驗構造的演算法,在可接受的花費 指計算時間 計算空間等 給出待解決優化問題的每一例項的乙個可行解,該可行解與與最優解的偏離程度一般不可以事先預計。啟發式演算法是一種技術,這種演算法可以在可接受的計算費用內找到最好的解,但不一定能保證所得到解的可行性及最優性,甚至大多數情況下無法闡述...