遺傳算法介紹三(來自維基百科)

什麼是遺傳算法

遺傳算法是計算數學中用於解決最優化的搜索算法,是進化算法的一種。進化算法最初是借鑑了進化生物學中的一些現象而發展起來的,這些現象包括遺傳、突變、自然選擇以及雜交等。
遺傳算法通常實現爲一種計算機模擬。對於一個最優化問題,一定數量的候選解(稱爲個體)的抽象表示(稱爲染色體)的種羣向更好的解進化。傳統上,解用二進制表示(即0和1的串),但也可以用其他表示方法。進化從完全隨機個體的種羣開始,之後一代一代發生。在每一代中,整個種羣的適應度被評價,從當前種羣中隨機地選擇多個個體(基於它們的適應度),通過自然選擇和突變產生新的生命種羣,該種羣在算法的下一次迭代中成爲當前種羣。

遺傳算法的機理

遺傳算法裏,優化問題的解被稱爲個體,它表示爲一個參數列表,叫做染色體或者基因串。染色體一般被表達爲簡單的字符串或數字串,不過也有其他的表示方法適用。一開始,算法隨機生成一定數量的個體,有時候操作者也可以對這個隨機產生過程進行干預,播下已經部分優化的種子。在每一代中,每一個個體都被評價,並通過計算適應度函數得到一個適應度數值。種羣中的個體被按照適應度排序,適應度高的在前面。這裏的“高”是相對於初始的種羣的低適應度來說的。
下一步是產生下一代個體並組成種羣。這個過程是通過選擇和繁殖完成的,其中繁殖包括雜交和突變。選擇則是根據新個體的適應度進行的,適應度越高,被選擇的機會越高,而適應度低的,被選擇的機會就低。初始的數據可以通過這樣的選擇過程組成一個相對優化的羣體。之後,被選擇的個體進入雜交過程。一般的遺傳算法都有一個雜交率的參數,範圍一般是0.6~1,這個雜交率反映兩個被選中的個體進行雜交的概率。例如,雜交率爲0.8,則80%的“夫妻”會生育後代。每兩個個體通過雜交產生兩個新個體,代替原來的“老”個體,而不雜交的個體則保持不變。雜交父母的染色體相互交錯,從而產生兩個新的染色體,第一個個體前半段是父親的染色體,後半段是母親的,第二個個體則正好相反。不過這裏的半段不是真正的一半,這個位置叫做雜交點,也是隨機產生的,可以是染色體的任意位置。再下一步是突變,通過突變產生新的“子”個體。一般遺傳算法都有一個固定的突變常數,通常是0.01或者更小,這代表突變發生的概率。根據這個概率,新個體的染色體隨機的突變,通常就是改變染色體的一個字節(0變到1,或者1變到0)。
經過這一系列的過程(選擇、雜交和突變),產生的新一代個體不同於初始的一代,並一代一代向增加整體適應度的方向發展,因爲最好的個體總是更多的被選擇去產生下一代,而適應度低的個體逐漸被淘汰掉。這樣的過程不斷的重複:每個個體被評價,計算出適應度,兩個個體雜交,然後突變,產生第三代。周而復始,直到終止條件滿足爲止。一般終止條件有以下幾種:
  • 進化次數限制;
  • 計算耗費的資源限制(例如計算時間、計算佔用的內存等);
  • 一個個體已經滿足最小值的條件,即最小值已經找到;
  • 適應度已經達到飽和,繼續進化不會造成適應度更好的個體;
  • 人爲干預;
  • 以及以上兩種或更多種的組合;

    算法

    選擇初始生命種羣 
    循環
     評價種羣中的個體適應度
     選擇產生下一個種羣
     改變該種羣(雜交和突變)
    直到停止循環的條件滿足
    
    遺傳算法在解決優化問題過程中有如下特點:
    • 遺傳算法在適應度函數選擇不當的情況下有可能收斂於局部最優,而不能達到全局最優。
    • 對於動態數據,用遺傳算法求最優解比較困難,因爲染色體種羣很可能過早地收斂,而對以後變化了的數據不再產生變化。對於這個問題,研究者提出了一些方法增加基因的多樣性,從而防止過早的收斂。其中一種是所謂觸發式超級突變,就是當染色體羣體的質量下降(彼此的區別減少)時增加突變概率;另一種叫隨機外來染色體,是偶爾加入一些全新的隨機生成的染色體個體,從而增加染色體多樣性。
    • 選擇過程很重要,但雜交和突變的重要性存在爭議。一種觀點認爲雜交比突變更重要,因爲突變僅僅是保證不丟失某些可能的解;而另一種觀點則認爲雜交過程的作用只不過是在種羣中推廣突變過程所造成的更新,對於初期的種羣來說,雜交幾乎等效於一個非常大的突變率,而這麼大的突變很可能影響進化過程。
    • 遺傳算法很快就能找到良好的解,即使是在很複雜的解空間中。
    • 遺傳算法並不一定總是最好的優化策略,優化問題要具體情況具體分析。所以在使用遺傳算法的同時,也可以嘗試其他算法,互相補充,甚至根本不用遺傳算法
    • 遺傳算法不能解決那些“大海撈針”的問題,所謂“大海撈針”問題就是沒有一個確切的適應度函數表徵個體好壞的問題,遺傳算法對這類問題無法找到收斂的路。
    • 對於任何一個具體的優化問題,調節遺傳算法的參數可能會有利於更好的更快的收斂,這些參數包括個體數目、雜交律和突變律。例如太大的突變律會導致丟失最優解,而過小的突變律會導致算法過早的收斂於局部最優點。對於這些參數的選擇,現在還沒有實用的上下限。
    • 適應度函數對於算法的速度和效果也很重要。

    變量

    最簡單的遺傳算法將染色體表示爲一個數位串,數值變量也可以表示成整數,或者實數(浮點數)。算法中的雜交和突變都是在字節串上進行的,所以所謂的整數或者實數表示也一定要轉化爲數位形式。例如一個變量的形式是實數,其範圍是0~1,而要求的精度是0.001,那麼可以用10個數位表示:0000000000表示0,1111111111表示1。那麼0110001110就代表0.389。
    遺傳算法裏,精英選擇是一種非常成功的產生新個體的策略,它是把最好的若干個個體作爲精英直接帶入下一代個體中,而不經過任何改變。
    通過並行計算實現遺傳算法一般有兩種,一種是所謂粗糙並行遺傳算法,即一個計算單元包含一個種羣;而另一種是所謂精細並行遺傳算法,每一個計算單元處理一個染色體個體。
    遺傳算法有時候還引入其他變量,例如在實時優化問題中,可以在適應度函數中引入時間相關性和干擾。

    適用的問題

    遺傳算法擅長解決的問題是全局最優化問題,例如,解決時間表安排問題就是它的一個特長,很多安排時間表的軟件都使用遺傳算法,遺傳算法還經常被用於解決實際工程問題。
    跟傳統的爬山算法相比,遺傳算法能夠跳出局部最優而找到全局最優點。而且遺傳算法允許使用非常複雜的適應度函數(或者叫做目標函數),並對變量的變化範圍可以加以限制。而如果是傳統的爬山算法,對變量範圍進行限制意味着複雜的多的解決過程,這方面的介紹可以參看受限優化問題和非受限優化問題。

    應用領域

  • 汽車設計,包括材料選擇、多目標汽車組件設計、減輕重量等。
  • 機電系統設計。
  • 分佈計算機網絡的拓撲結構。
  • 電路設計,此類用途的遺傳算法叫做進化電路。
  • 電子遊戲設計,例如計算平衡解決方案。
  • 機器智能設計和機器人學習。
  • 模糊控制系統的訓練。
  • 移動通訊優化結構。
  • 時間表安排,例如爲一個大學安排不衝突的課程時間表。
  • 旅行推銷員問題.
  • 神經網絡的訓練,也叫做神經進化。

    參考文獻

  • Goldberg, David E (1989), 遺傳算法:搜索、優化和機器學習 Kluwer Academic Publishers, Boston, MA.
  • Goldberg, David E (2002), 創新的設計:競爭遺傳算法課程 Addison-Wesley, Reading, MA.
  • Harvey, Inman (1992), 物種適應和遺傳算法持續進行的基礎 in 'Toward a Practice of Autonomous Systems: Proceedings of the First European Conference on Artificial Life', F.J. Varela and P. Bourgine (eds.), MIT Press/Bradford Books, Cambridge, MA, pp. 346-354.
  • Koza, John (1992), 遺傳算法:通過自然選擇編寫計算機程序
  • Michalewicz, Zbigniew (1999), 遺傳算法+數據結構=進化程序 Springer-Verlag.
  • Mitchell, Melanie, (1996), 遺傳算法概論 MIT Press, Cambridge, MA.
  • Schmitt, Lothar M (2001), 遺傳算法理論 Theoretical Computer Science (259), pp. 1-61
  • Schmitt, Lothar M (2004), 遺傳算法理論(二) Theoretical Computer Science (310), pp. 181-231
  • Vose, Michael D (1999), 簡單遺傳算法:基礎和理論 MIT Press, Cambridge, MA.
  • 發表評論
    所有評論
    還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
    相關文章