詳解智能優化算法:遺傳算法和蟻群算法


摘要:智能優化算法又稱現代啟發式算法,是一種具有全局優化性能、通用性強且適合於並行處理的算法。本文主要為大家帶來遺傳算法和蟻群算法的詳細解讀。

本文分享自華為雲社區《智能優化算法(1)——遺傳算法》,原文作者:我是一顆大西瓜 。

智能優化算法又稱現代啟發式算法,是一種具有全局優化性能、通用性強且適合於並行處理的算法。這種算法一般具有嚴密的理論依據,而不是單純憑借專家經驗,理論上可以在一定的時間內找到最優解或近似最優解。常用的智能優化算法有:遺傳算法 、模擬退火算法、禁忌搜索算法、粒子群算法、蟻群算法。

本文主要為大家帶來遺傳算法和蟻群算法的詳細解讀。

1. 遺傳算法

遺傳算法(Genetic algorithm, GA),模擬生物在自然環境中遺傳和進化的自適應(對遺傳參數的自適應調整)全局優化(隨機變異不斷尋找全局最優解)算法,基本思想是“優勝劣汰”,是應用最廣泛和效果最顯著的智能優化算法。

1.1 編碼方法

算法模型通過對個體(individual,也即solution)進行二進制編碼(01編碼)、自然數編碼、實數編碼和樹型編碼。在對個體進行適應度計算時需要進行解碼,實現問題的解空間與算法搜索空間的相互轉換。

1.2 適應度函數

每個個體都有一個適應度函數(Fitness),對這個個體的優劣進行定量評價,適應度函數是算法執行“適者生存、優勝劣汰”的依據。適應度函數需要根據目標函數進行設置,令g(x)g(x)表示目標函數,令G(x)G(x)表示適應度函數,從目標函數g(x)g(x)映射到適應度函數G(x)G(x)的過程稱為標定。

對於最大值優化問題,可直接將g(x)g(x)設定為適應度函數G(x)G(x),即G(x)=g(x)G(x)=g(x);對於最小值優化問題,G(x)=-\min g(x)G(x)=−ming(x);在遺傳算法規定中,適應度函數為正值,但上述二式無法保證,因此需要加上最小值或者最大值以及分段函數。

1.3 選擇操作

選擇(Selection)是從當前群體中選擇適應度函數值大的個體,這些優良個體有可能作為父代繁殖下一代,個體適應度函數越大,被選擇作為父代的概率越大(有可能!)

選擇算法有很多,最基本的是輪盤賭算法:

​​其中,P_iPi​表示個體被選擇的概率;F_iFi​表示個體的適應度函數值;NN表示種群規模。

根據選擇概率P_iPi​將圓盤形賭輪分為NN份,第ii個扇形的中心角為2\pi P_i2πPi​。隨機產生0到1之間服從均勻分布的數rr,落在第ii個扇形的累計概率為Q_i = \sum_{j=1}^i P_jQi​=∑j=1iPj​,則選擇個體ii,重復NN次,就可以選擇NN個個體。

1.4 交叉操作

兩個個體通過交叉(Crossover)互換染色體部分基因而重組產生新的個體,也就是產生新解。交叉前需要進行隨機配對。

一般情況下,對二進制編碼的個體采用點交叉的方法,也就是在兩個配對字符串隨機選擇一個或者多個交叉點,互換部分子串從而產生新的字符串

兩個個體是否進行交叉操作由交叉概率決定,較大的交叉概率可以使遺傳算法產生更多新解,保持群體多樣性,並能防止算法過早成熟,但是交叉概率過大會使算法過多搜索不必要的解區域,消耗過多的計算時間,一般取值在0.9左右。

1.5 變異操作

生物進化中,某些染色體可能會發生基因突變(Mutation),從而產生新的染色體,這也是產生新解的另外一種重要方式。交叉操作相當於進行全局探索,變異操作相當於進行局部開發,這也是智能優化算法必備的兩種搜索能力。

個體能否變異取決於變異概率,過低會使得部分有用基因無法進入染色體,不能提高解的質量;過大會使子代喪失父代優良基因,導致算法失去從過去搜索經驗的學習能力,一般情況下,變異概率取值為0.005左右。

值得注意的是,Rudolph通過馬爾科夫鏈相關理論證明僅采用選擇、交叉和變異三個操作的遺傳算法不能收斂到全局最優解,而采用精英保留策略的遺傳算法是全局收斂的。

算法的整體流程如下圖所示:

1.6 算法分析

一個好的智能算法,關鍵在於全局探索和局部開發能力的平衡。全局探索的目的是對解空間進行更全面的探索,局部開發主要目的是對已知區域進行更精細的搜索,希望獲得質量更好的新解。

遺傳算法可以通過設置選擇壓力實現全局探索和局部開發的平衡。在算法運行初始階段,設置較小的選擇壓力可以使算法具有較好的全局探索能力,進行廣域搜索;算法運行后期,設置較大的選擇壓力可以使算法進行比較精細的局部搜索。

選擇壓力的設置可以從適應度函數標定和選擇策略。

適應度函數標定,在算法早期,應當縮小個體適應度差距,減少淘汰率;算法運行最后階段,擴大個體適應度差距,保證算法能在高適應度個體對應解區域進行集中搜索,加快算法收斂速度。常用方法有:

選擇策略,低選擇壓力可選擇多種類型的個體,加強對未知解區域的搜索,避免算法陷入局部極值,但算法優化速度會變得緩慢;高選擇壓力可選擇優良個體,加快優化速度但群體多樣性會下降,減少搜索到全局最優值的概率。除了輪盤賭算法外,選擇策略還有:

  • 分級選擇法
  • 錦標賽選擇法
  • Boltzmann選擇法

2.蟻群算法

2.1 蟻群優化算法

蟻群優化(Ant Colony Optimization, ACO)算法是源自大自然生物界的仿真類算法,其思想吸收了蟻群覓食過程中的行為特性。蟻群算法在TSP問題、二次分配問題、圖着色問題、車輛調度問題、通信網絡中的負載均衡問題等表現出良好的優化性能。

大自然中的螞蟻沒有視覺,依賴於同類散發在環境中的信息素決定自己何去何從,孤立的螞蟻沿着同伴的信息素軌跡移動,同時釋放自己的信息素,從而增強了該路線上的信息素數量,隨着越來越多的螞蟻通過該路線,一條較佳的路線就形成了(這條路徑不一定最短,但對於NP-hard問題而言足夠了)。

2.2. 算法模型

以旅行商問題(Traveling Salesman Problem, TSP)為例,在圖論中稱為最小Hamilton問題。

蟻群優化算法基本模型:

  1. 螞蟻群體總是尋找最小費用可行解
  2. 螞蟻具有記憶性,存儲當前路徑的信息,構造可行解、評價解的質量、路徑反向追蹤
  3. 當前狀態的螞蟻可以移動到可行領域任意一點
  4. 每個螞蟻賦予一個初始狀態和若干個終止條件
  5. 螞蟻從初始狀態到可行領域狀態,以遞推方式構造解,當有一個螞蟻滿足至少一個終止條件時構造過程結束
  6. 螞蟻按某種概率決策規則移動至領域結點
  7. 移動后信息素軌跡被更新,過程稱為“單步在線信息素更新”
  8. 一旦構造出一個解,螞蟻沿原路方向追蹤,更新信息素軌跡,稱為“在線延遲信息素更新”

2.3 算法分析

算法復雜度是O(nc\cdot n^2\cdot m)O(ncn2⋅m),m為螞蟻個數,nc為迭代次數或者搜索次數,n為頂點數。算法運行效果受到\alpha, \betaα,β等參數影響,其中\betaβ的影響在於體現信息素軌跡的持久性,數值過小意味着信息消失過快;數值過大容易落入局部最優點,因此其數值通常取0.7左右。

在基本的蟻群優化算法上,可以與其他啟發式算法相結合,最典型的就是嵌入局部搜索算法,在各個螞蟻形成自己的路線后,用局部調整方法(2-opt, 3-opt)加以改進,此外,與遺傳算法、模擬退火和禁忌搜索等結合也有一定的成效。

混合蟻群優化算法主要步驟:

  1. Begin
  2. 螞蟻初始化;
  3. LOOP:
  4. \quad螞蟻路徑構造;
  5. \quad對某個螞蟻實施局部搜索算法
  6. \quad螞蟻軌跡更新
  7. \quad若迭代次數未到,轉LOOP;
  8. 輸出當前最好解
  9. End

 

點擊關注,第一時間了解華為雲新鮮技術~


免責聲明!

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



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