模擬退火算法和遺傳算法


爬山算法

​ 在介紹這兩種算法前,先介紹一下爬山算法。

​ 爬山算法是一種簡單的貪心搜索算法,該算法每次從當前解的臨近解空間中選擇一個最優解作為當前解,直到達到一個局部最優解。

​ 爬山算法實現很簡單,其主要缺點是會陷入局部最優解,而不一定能搜索到全局最優解。如圖1所示:假設C點為當前解,爬山算法搜索到A點這個局部最優解就會停止搜索,因為在A點無論向那個方向小幅度移動都不能得到更優的解。

模擬退火算法(SA)

​ 為了解決局部最優解問題, 1983年,Kirkpatrick等提出了模擬退火算法(SA)能有效的解決局部最優解問題。模擬退火其實也是一種貪心算法,但是它的搜索過程引入了隨機因素。模擬退火算法以一定的概率來接受一個比當前解要差的解,因此有可能會跳出這個局部的最優解,達到全局的最優解。

算法介紹

​ 我們知道在分子和原子的世界中,能量越大,意味着分子和原子越不穩定,當能量越低時,原子越穩定。

​ “退火”是物理學術語,指對物體加溫在冷卻的過程。模擬退火算法來源於晶體冷卻的過程,如果固體不處於最低能量狀態,給固體加熱再冷卻,隨着溫度緩慢下降,固體中的原子按照一定形狀排列,形成高密度、低能量的有規則晶體,對應於算法中的全局最優解。

​ 而如果溫度下降過快,可能導致原子缺少足夠的時間排列成晶體的結構,結果產生了具有較高能量的非晶體,這就是局部最優解。

​ 因此就可以根據退火的過程,給其在增加一點能量,然后在冷卻,如果增加能量,跳出了局部最優解,這本次退火就是成功的。

算法原理

​ 模擬退火算法包含兩個部分即Metropolis算法和退火過程。Metropolis算法就是如何在局部最優解的情況下讓其跳出來,是退火的基礎。1953年Metropolis提出重要性采樣方法,即以概率來接受新狀態,而不是使用完全確定的規則,稱為Metropolis准則。

狀態轉換規則

溫度很低時,材料以很大概率進入最小能量狀態

模擬退火尋優方法

注意事項

  • 理論上,降溫過程要足夠緩慢,使得在每一溫度下達到熱平衡。如果降溫速度過緩,所得到解的性能會較為令人滿意,但是算法太慢會導致較搜索算法不具備優勢。
  • 要確定在每一溫度下狀態轉換的結束規則。實際操作可以考慮當連續m次的轉換過程沒有使狀態發生變化時結束該溫度下的狀態轉換。
  • 選擇初始溫度和確定某個可行解的鄰域的方法也要恰當。

算法流程

  • 初始化

    • 初始溫度T
    • 初始解狀態\(S_0\)(算法迭代的起點)
  • 在可行解的鄰域內產生新解\(S'\),並判斷該新解是否可以被接受。當連續\(m\)次的轉換過程沒有使狀態發生變化時結束該溫度下的狀態轉換。

  • 判斷是否滿足終止溫度,如果滿足輸出當前解作為最優解,否則降低溫度。

    • 最簡單的下降方式是取定一降溫系數\(\alpha<1\),以\(T_{n+1} = \alpha T_{n}\)的形式下降,比如取\(\alpha=0.99\),一般取值為0.8到0.99之間;
    • 其他溫度下降方式有:\(T_n = \frac{T_0}{log(1+n)}\)\(T_n = \frac{T_0}{1+n}\)

遺傳算法(GA)

算法介紹

​ 初代種群產生之后,按照適者生存和優勝劣汰的原理,逐代(generation)演化產生出越來越好的近似解,在每一代,根據問題域中個體的適應度(fitness)大小選擇(selection)個體,並借助於自然遺傳學的遺傳算子(genetic operators)進行組合交叉(crossover)和變異(mutation),產生出代表新的解集的種群。

遺傳算法的流程

  1. 隨機產生種群。
  2. 根據策略判斷個體的適應度,是否符合優化准則,若符合,輸出最佳個體及其最優解,結束。否則,進行下一步。
  3. 依據適應度選擇父母,適應度高的個體被選中的概率高,適應度低的個體被淘汰。
  4. 用父母的染色體按照一定的方法進行交叉,生成子代。
  5. 對子代染色體進行變異。

算法實現

編碼

​ 僅對浮點編碼法進行介紹。

​ 個體的每個基因值用某一范圍內的一個浮點數來表示。在浮點數編碼方法中,必須保證基因值在給定的區間限制范圍內,遺傳算法中所使用的交叉、變異等遺傳算子也必須保證其運算結果所產生的新個體的基因值也在這個區間限制范圍內。

比如一個9目標問題的一個染色體為:

​ [0.23, 0.82, 0.45, 0.74, 0.87, 0.11, 0.56, 0.69, 0.78], 區間范圍限制為[0,1]

初始化種群

​ 自行用某種算法得到一個較好的初始種群。

設定適應度函數

​ 用於區分群體中個體好壞的標准。

設置選擇函數

​ 對群體中的所有個體按適應度大小進行排序,基於這個排序來分配各個個體被選中的概率。

單點交叉

變異操作

​ 按照給定的變異率,對選定變異的個體,隨機地進行變異。可隨機取三個整數\(u,v,w\),把\(u,v\)之間的基因段插到\(w\)后面。

參考網站與書籍

[1]【算法】超詳細的遺傳算法(Genetic Algorithm)解析https://www.jianshu.com/p/ae5157c26af9

[2] 深度學習 --- 模擬退火算法詳解(Simulated Annealing, SAhttps://blog.csdn.net/weixin_42398658/article/details/84031235

[3] 數學建模算法與應用,司守奎,孫兆亮


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM