遺傳演算法是一種啟發式的隨機多引數優化演算法,能夠解決多種尋優問題,如揹包問題,求解函式極值點,影象配準引數優化,神經網路中的網路權係數的優化等等。
遺傳演算法可以說是模擬自然界種群的進化過程。根據達爾文進化理論,生物種群在世世代代的繁衍過程中,適應環境的優良特性會一代代遺傳下去,不適應環境的特性則逐漸被淘汰。這裡所說的特性是一種生物表現出來的特點,即表現型。表現型背後就是代表個體獨一無二的基因型,每個個體的區分真正意義上應該是基因,如每個人都有一套自己的dna。
種群的進化過程可以分為自然選擇,繁殖以及基因突變。自然選擇會按照一定的概率選擇個體進入後面的繁衍過程,而概率與個體適應環境的程度有關,即每個個體的適應度反應了該基因型存活的概率。然後父代個體進行交叉產生一片基因片段的交換。
編碼方法:
給予每個個體一種表現形式,以便於對每對引數做微量的調整。常見的有二進位制編碼、格雷碼編碼、浮點數編碼。
二進位制編碼與格雷碼都是將引數對映到以0和1表示的二進位制串。但是由於二者本質上的不同,導致兩者導致的程式優化有較大效能上的差異。兩個相鄰的二進位制數之間可能相差較多的0或者1,而格雷碼僅僅相差一位,在後續的基因突變過程中,二進位制數某一位的突變可能導致引數發生較大的變化,而格雷碼則不會。因此,二進位制編碼的全域性優化能力明顯好於格雷碼,對於目標曲線較為平緩和明顯的極值點的優化問題,事實上格雷碼編碼要好於二進位制編碼。
交叉與突變的概率選擇需要謹慎。交叉的概率遠遠大於突變概率,個體與個體之間的基因片段交換是非常常見的,而每個基因片段自身的突變概率是很低的。交叉概率設定為0.7-0.9之間是比較合適的,突變概率選擇0.02-0.08之間都可以,但最後會發現,突變概率對區域性優化能力有一定的影響。突變概率選擇低,則每次種群進化過程中的最優個體的適應度增長會很慢,但是區域性優化能力好。隨著突變概率的增加,全域性優化能力進一步增強,但是在進化到一定代數後,逐漸收斂於區域性極值,因為突變的基因位過多,很難在當前最優個體附近搜尋更好的個體。
所以,遺傳演算法對於結果有較高精度要求的問題,應該慎重選擇。當然可以針對區域性優化能弱的問題進行進一步的優化,比如以遺傳演算法作為初始的優化演算法,先搜尋到乙個精度較差的引數,在此基礎上採取別的區域性優化能力強的演算法(比如鮑威爾演算法),達到搜尋更好的引數的目的。
遺傳演算法理解
3月20 日,有個同學問我一些關於遺傳演算法的 編寫,我按照她的思路寫出來第一二,四步。但是不明白為什麼要這樣做。我今天查了一些遺傳演算法相關資料,大概明白她為什麼要我這樣寫 了。以下是我的理解。遺傳演算法的基本思想借鑑的是生物學基礎的遺傳和進化。生物進化的一般過程 1.首先要有乙個初始種群,種群的...
python遺傳演算法 Python 遺傳演算法實現
關於遺傳演算法 遺傳演算法是仿照自然界中生物進化而產生的一類優化演算法。個人感覺遺傳演算法簡單粗暴,適應性廣。關於遺傳演算法的介紹網上有很多了,這裡按照我自己的理解簡單概括一下。編碼解碼,將待優化的引數編碼為dna序列,最簡單直接的為二進位制編碼 即有兩種鹼基的dna鏈 生成隨機初代 選擇,適應度 ...
很好理解的遺傳演算法例項
遺傳演算法的手工模擬計算演示例子 為更好地理解遺傳演算法的運算過程,以下用手工計算來簡單地模擬遺傳演算法的各 個主要執行步驟。例 求下述二元函式的最大值 1 個體編碼 遺傳演算法的運算物件是表示個體的符號串,所以必須把變數 x1,x2 編碼為一種 符號串。本題中,用無符號二進位制整數來表示。因 x1...