1. 程式人生 > >遺傳演算法入門(上)程式碼中的進化學說與遺傳學說

遺傳演算法入門(上)程式碼中的進化學說與遺傳學說

如果你對遺傳演算法感興趣或者正在做有關GA的研究,不妨關注部落格右側專欄 → 智慧計算-深入遺傳演算法 ,一步一步深入演算法,分享演算法每一個流程模組(如選擇策略,交叉機制等等)的眾多參考觀點。程式碼和Demo咱從來不缺。

遺傳演算法入門系列文章:

寫在之前

說明: 本想著用大量篇幅寫一篇 “關於遺傳演算法的基本原理”作為本系列入門的第一篇,但是在找尋資料的過程中,看到網路上有大量的關於遺傳演算法的介紹,覺得寫的都挺好,所以本文我就簡單寫點自己的理解。

推薦幾篇關於遺傳演算法的介紹性文章:

這裡寫圖片描述

演算法所屬領域

​ 相信每個人學習一門知識之前,都會想知道這門知識屬於哪一門學科範疇,屬於哪一類技術領域?

​ 首先對於這種問題,GA是沒有絕對的歸屬的。演算法的定義是解決問題的一種思想和指導理論。而遺傳演算法也是解決某一問題的一種思想,用某一程式語言實現這種思想的程式具有很多特點,其中一個便是智慧性和進化性,即,不需要大量的人為干涉,程式本身能夠根據一定的條件自我篩選,最終得出令人滿意的結果。所以按照這種特性,把它列為人工智慧領域下的學習門類毫無疑問是可以的 。遺傳演算法的思想是借鑑了達爾文的進化學說和孟德爾的遺傳學說,把遺傳演算法說成是一門十足的仿生學一點都不過分。然而從應用的角度出發,遺傳演算法是求最優解問題的好方法,如訊號處理中的優化、數學求解問題、工業控制引數最優解、神經網路中的啟用函式、影象處理等等,所以把遺傳演算法說成優化範疇貌似也說的過去。為了方便理解,我們可以暫時將其定位為人工智慧–智慧優化

,這也是很多書中描述遺傳演算法的慣用詞彙。

遺傳演算法的思想解析

遺傳演算法(gentic algorithms簡稱GA)是模擬生物遺傳和進化的全域性優化搜尋演算法

​ 我們知道,在人類的演化中,達爾文的進化學說與孟德爾的遺傳學說起著至關重要的理論指導。每個人作為一個個體組成一個人類種群,正是經歷著物競天擇,才會讓整個群體慢慢變的更好,即更加適應周圍的環境。而每一代正是靠著基因交叉與變異才能繁衍出更加適應大自然規律的下一代個體。總之,在漫長的迭代進化中,一個不適應環境的群體,在物競天擇和交叉變異中慢慢變的適應了環境。

​ GA的思想完全模擬了生物的進化和遺傳方式。我們在求解一個問題的最優解時,先人為的產生很多任意的解,組成一個解集(一個解是一個個體

,一個解集是一個種群),這些解有好有壞。我們的最終目的是讓這些解通過“物競天擇”慢慢演化成最終適合所求的最優解。如果說大自然中是周圍的環境對種群中的個體做出選擇,那麼在求解問題時,就可以用一個問題的模型函式來對眾多解做出選擇,即:對於一個要解決的問題,我們通過數學建模的方式將其建立為一個純數學函式F=f(x,y,..) , 該函式就能反應該問題的特性,例如我們需要求解汽車過隧道問題。可以將隧道抽象成一個倒立的拋物線函式,通過研究該拋物線的特性來研究隧道口的高度。如果我們在之前先產生一個解集,將解集中的所有解帶入拋物線,得出一個結果集,則結果集中的每個結果肯定有好有壞,好的結果所對應的解就是好解,反之亦然。所以,這個模型函式就充當了自然界中的環境因素。在遺傳演算法中,這個模型函式稱為目標函式 ,而在實際的演算法執行中,因為考慮到演算法的設計,往往會在目標函式上做一些不會改變函式特性,但是會改變函式形式的改進,例如F(x)=x+1 改為F(x)=5x+1 ,改變前和改變後,函式都是線性函式,但改變後的函式變得更加陡峭。有些改變是為讓函式在定義域內不再有負值等等。這些改變後的函式稱為適應度函式 ,總之,適應度函式是為了不改變目標函式對個體選擇的特性下為了更好的進行寫程式碼而生的。

​ 我們早在設計演算法的一開始就對每個解進行了編碼,編碼的方式有很多,並不難理解,如適應度函式F(x,y,z)=x2+y2+z2 , 我們隨機生成了一個解(個體)567 ,其中x=5, y=5, z=7 ,將其帶入函式,可以得出一個適應度值,這個值的大小可以反應該解是否是好的解。567 這一個解稱之為一個個體, 你也可以形象的稱之為一個染色體 ,而三個數字中的每一個數字稱之為基因,正如許多基因組成一個染色體(人體)一樣。在上述中,將函式的每個變數對應個體中的每個基因的方式,我們稱之為實數編碼 ,當然我們可以通過某一對應法則,將十進位制的基因變成二進位制,如上述的個體567,通過某一對應法則變成0101|0110|0111 ,對於這種形式的編碼稱之為二進位制編碼 ,而此時的基因變成0或1 。

​ 自然界中,對於一個由個體(人)組成的種群(人類),通過環境的選擇會慢慢變的更好,其變好的根本依據來源於遺傳學說中的基因的交叉和變異。正是交叉和變異的存在,才為產生新的,更好的個體提供了可能性。而在遺傳演算法中,人為的模擬了交叉與變異。理解了編碼和基因後,正如自然界中基因的交叉和變異一樣,我們通過演算法以某一隨機概率通過一定策略讓兩個解(染色體/個體)中的部分基因進行交換,例如:父代個體**A(567),父代個體B(123) ,交叉後生成新的子代個體**A(527) , 子代個體B(163)。我們也同樣以某一隨機概率通過一定策略讓某個個體中的部分發生突變,這並不難理解。

種群中的個體通過遺變異和變異(遺傳學說)作為產生新個體的依據,通過適應度函式(環境)控制的選擇(物競天擇)對個體進行篩選,經過上百次的迴圈(繁殖),最終會產生非常接近符合適應度函式(使用環境)的個體(物種),而最好個體中的基因便是最好的變數,即最好的解 。

為什麼要用遺傳演算法?

為什麼要用遺傳演算法? 通過分析遺傳演算法的思想,我們知道遺傳演算法說明白了就是用來求解某適應度函式的某些特定值(如最大值,最小值)。你可能會說,既然給定了純數學的適應度函式公式,我們完全可以用數學上諸如極限、微積分、解線性方式等方法求解最大值。但是理論往往只是理論,在實際生產中,如工業、醫療、各種業中,我們通過數學建模抽象出的適應度函式往往是不可導、不連續的,這些複雜的函式根本無法用數學中的推論解決。 而遺傳演算法根本不用考慮是否連續,是否可導,只要簡單的隨機給定一個不管是好還是壞的種群,一點選執行程式碼,即可求出最終的最優解。這也是遺傳演算法得意被眾多人研究和得以被廣泛應用的根本之所在 。

科研現狀

隨著應用領域的擴充套件,遺傳演算法的研究出現了幾個引人注目的新動向: 一是基於遺傳演算法的機器學習,這一新的研究課題把遺傳演算法從歷來離散的搜尋空間的優化搜尋演算法擴充套件到具有獨特的規則生成功能的嶄新的機器學習演算法。這一新的學習機制對於解決人工智慧中知識獲取和知識優化精煉的瓶頸難題帶來了希望。二是遺傳演算法正日益和神經網路、模糊推理以及混沌理論等其它智慧計算方法相互滲透和結合,這對開拓21世紀中新的智慧計算技術將具有重要的意義。三是並行處理的遺傳演算法的研究十分活躍。這一研究不僅對遺傳演算法本身的發展,而且對於新一代智慧計算機體系結構的研究都是十分重要的。四是遺傳演算法和另一個稱為人工生命的嶄新研究領域正不斷滲透。所謂人工生命即是用計算機模擬自然界豐富多彩的生命現象,其中生物的自適應、進化和免疫等現象是人工生命的重要研究物件,而遺傳演算法在這方面將會發揮一定的作用。五是遺傳演算法和進化規劃(Evolution Programming,EP)以及進化策略(Evolution Strategy,ES)等進化計算理論日益結合。EP和ES幾乎是和遺傳演算法同時獨立發展起來的,同遺傳演算法一樣,它們也是模擬自然界生物進化機制的智慧計算方法,即同遺傳演算法具有相同之處,也有各自的特點。目前,這三者之間的比較研究和彼此結合的探討正形成熱點。

額……..,我突然發現我的綜述對現狀的描寫實在過多,而且裡面有大量其他論文引用,大家真需要看的話,去下載我的《遺傳演算法綜述》吧,下面只列出一些標題性的內容,不在貼上過多的解釋了

  • 遺傳操作的改進。體現在選擇、交叉和變異的改進上。 ………………………………..
  • 引數的自適應選取大多體現在種群規模N、交叉概率Pc和變異概率Pm的動態自適應選取上。……………
  • 混合遺傳演算法是指GA與其他演算法的融合。……………………………………
  • 小生境技術。對於多模態函式優化問題和多峰函式優化問題,往往要求搜尋多個全域性最優解和有意義的區域性最優解,傳統的GA容易陷入區域性極值。…………………………….

  • 分佈並行遺傳演算法。……………………………….

應用現狀

(1)函式優化

​ 函式優化是遺傳演算法的經典應用領域,也是對遺傳演算法進行效能評價的常用算例。許多人構造出了各種各樣複雜形式的測試函式:連續函式和離散函式、凸函式和凹函式、低維函式和高緯函式、單峰函式和多峰函式等。對於一些非線性、多模型、多目標的函式優化問題,用其它優化方法較難求解,而遺傳演算法可以方便的得到較好的結果。

(2)組合優化問題

​ 優化問題包括函式優化和組合優化兩種。函式優化是遺傳演算法的經典領域,也是對遺傳演算法進行效能評價的常用算例。對於組合優化,隨著問題規模的擴大,搜尋空間急劇擴大,這類複雜問題,人們已經意識到把精力放在尋找其滿意解上。實踐證明,遺傳演算法對於組合優化中的NP完全問題非常有效。

(3)自動控制

​ 在自動控制領域中許多與優化相關的問題需要求解,遺傳演算法的應用日益增加,並顯示了良好的效果。例如用遺傳演算法進行航空控制系統的優化、基於遺傳演算法的引數辨識、利用遺傳演算法進行人工神經網路的結構優化設計和權值學習,都顯示了遺傳演算法在這些領域中應用的可能性。

(4)機器學習

​ 學習能力是高階自適應系統所具備的能力之一,基於遺傳演算法的機器學習,特別是分類器系統,在很多領域中都得到了應用。遺傳演算法被用於學習模糊控制規則,可以更好地改進模糊系統的效能;基於遺傳演算法的機器學習不但可以用來調整人工:神經網路的連線權,也可用於人工神經網路結構的優化設計 。這一新的研究方向把遺傳演算法從歷史離散的搜尋空間的優化搜尋演算法擴充套件到具有獨特的規則生成功能的嶄新的機器學習演算法。這一新的學習機制對於解決人工智慧中知識獲取和知識優化精煉的瓶頸難題帶來了希望。

(5)影象處理

影象處理是計算機視覺中的一個重要研究領域。在影象處理過程中,如掃描、特徵提取、影象分割等不可避免地會存在一些誤差,從而影響影象的效果。如何使這些誤差最小化是計算機視覺達到實用化的重要要求。遺傳演算法可用於影象處理中的優化計算,目前已在模式識別(包括漢字識別 )、影象恢復、影象邊緣特徵提取等方面得到了應用。

(6)人工生命

人工生命是用計算機、機械等人工媒體模擬或構造出的具有自然生物系統特有行為的人造系統。自組織能力和自學習能力是人工生命的兩大主要特徵。人工生命與遺傳演算法有著密切的聯絡,基於遺傳演算法的進化模型是研究人工生命現象的重要基礎理論。雖然人工生命的研究尚處於初期階段,但遺傳演算法已在其進化模型、學習模型、行為模型、自組織模型等方面顯示出了初步的應用能力,並且必將會得到更為深入的應用和發展。人工生命與遺傳演算法相輔相成,遺傳演算法為人工生命的研究提供一個有效的工具,人工生命的研究也必將促進遺傳演算法的進一步發展。