昨天介紹了一些基於粒子的演算法,他們都是將生物群體比喻為粒子並根據不同的行為得到啟發而開發出這些演算法。今天要介紹的是基於進化策略的演算法,隨著地球這幾千萬年的變化,地球上的生物透過演化進化成了最適合當代條件下生存的物種。而基於進化的演算法就是基於這些原理進行最佳化,找出適應值(fitness)最高的解(物種)。
與粒子群最佳化演算法(PSO)一樣基礎、一樣廣為人知的演算法,GA和PSO有著完全不同的機制,透過**突變(Mutation)**這樣的機制來盡量避免陷入局部最佳解,為演算結果新增了一些變數,GA就類似於生物繁衍時的基因遺傳等概念,接下來就來看看GA的原理吧。
GA的概念很簡單,大致上只有四個步驟,分別是評估(Evaluation)、選擇(Selection)、交配(Crossover)、突變,大致上GA就是重複這四個步驟而逐漸將適合的結果保留,不適合的結果淘汰掉,相當於達爾文的天擇說。接下來我將大致簡述基因演算法的這幾個步驟,基本上GA演算法網路上非常多的教學,問GPT應該也能得到大致正確的結果。[參考文章1]、[參考文章2]
GA作為啟發式演算法入門必學的一個演算法,它的優點就是容易上手、速度快,但有時也不可避免的容易陷入局部最佳解,依靠微小的突變機率又剛好突變到適合的位置更佳的不容易TT,另外因為適應值會重複計算,所以像在AI模型最佳化時重新計算類似結果就會造成運算資源不必要的浪費。不過以GA為基礎的演算法也有許多被研發出來,對於不同的應用也算是有不同的使用方式。
珊瑚礁演算法是2013年被提出的演算法,作者受到珊瑚蟲繁衍生存過程中的啟發而創造的演算法。
珊瑚礁演算法就是根據珊瑚蟲繁衍的方式去設計的,各位有興趣可以去看看珊瑚蟲繁衍的壯闊景象。這個演算法基本上也是幾個步驟循環而找到比較好的解。
因為內部有性生殖的部分和GA一樣,透過交配產生新子代會導致最佳化方向是比較隨機的,不像基於粒子的演算法會有一個優化方向,這會使CRO的最佳化不容易收斂(GA也一樣),這類型演算法太依賴初代的能力了。且CRO目前是直接讓適應值高的珊瑚蟲取代適應值低的珊瑚蟲,這會比較不利於種群的多樣性,非常容易陷入局部最佳解。
不過目前有很多研究用於針對這些問題提出改良方法,例如借鑑PSO的優化方向,將更替珊瑚蟲加入一些機制,目前由CRO延伸出來的演算法能力有比較好,也可以跳出局部最佳解的位置去尋找其他解。
參考資料
今天分享了幾個基於進化的演算法,明天會繼續分享其他概念的最佳化演算法,基於進化的演算法目前來說比較少見,因為進化過程中大方向都是類似的,並不像不同物種有不同行為那樣比較好受到啟發。但目前進化為基礎的演算法像GA等都有不少的變種演算法,或多或少都做了一些微調並更加契合研究的主題根所需的功能。