來自:https://blog.csdn.net/u010451580/article/details/51178225
遺傳算法是模仿生物進化機制的隨機全局搜索和優化方法。借鑒達爾文進化論和孟德爾的遺傳學說。
相關術語:
基因型(genotype):性狀染色體的內部表現;
表現形(phenotype):性狀外部表現。或個體的外部表現。
進化(evolution):種群逐漸適應生存環境。生物進化是以種群的形式進行。
適應度(fitness):度量某個物種對生存環境的適應程度。
選擇(selection):以一定的概率從種群中選擇若干個個體。一般,選擇過程是基於適應度的優勝劣汰的過程。
復制(reproduction):細胞分裂時,DNA通過復制轉移到新細胞,新細胞繼承舊細胞的基因。
交叉(crossover):兩個染色體相同位置DNA被切斷,前后兩串分別交叉組合成兩個新染色體。
變異(mutation):復制時小概率產生差錯,產生新染色體,表現出新性狀。
編碼(coding):DNA中遺傳信息在一個長鏈上按一定模式排列。
解碼(decoding):基因型到表現型的映射。
遺傳算法中每條染色體對應遺傳算法的一個解決方案,用適應性函數衡量解決方案的優劣。所以從一個基因組到其解的適應度形成一個映射。遺傳算法過程可以看作是一個多元函數求最優解的過程。
實例:已知一元函數 f(x) = xsin(10πx)+2 x∈[-1,2],求函數最大值。
“袋鼠跳”問題
函數曲線理解成山峰和山谷的組成,設想得到的每個解就是一只袋鼠,求最大值轉換為袋鼠不斷的向更高處跳,直到最高的山峰。
爬山法:
爬山法中,袋鼠只上坡,沒下坡,但不能保證是全局最高峰。
模擬退火:
模擬退火中,袋鼠喝醉了,而且隨機地大跳很長時間。運氣好的話,從一個山峰跳過山谷,到了另外一個更高的山峰上。但最后,它漸漸清醒了並朝着它所在的峰頂跳去。
遺傳算法:
遺傳法中,有很多袋鼠,降落到不同地方,這些袋鼠不知道它們的任務是尋找全局最高峰。但每過幾年,就在一些海拔較低的山峰射殺一些袋鼠,並希望存活的袋鼠是多產的,在所處地方生兒育女。最后袋鼠都聚攏到全局最高峰上。
遺傳算法實現過程:
- 首先尋找一種對問題潛在解進行“數字化”編碼的方案。
- 然后用隨機數初始化一個種群(那么第一批袋鼠被隨意分散在山上),種群里面的個體就是這些數字化的編碼。
- 接下來,通過適當的解碼(得到袋鼠的位置坐標),用適應性函數對每個基因個體做一次適應度評估(袋鼠爬的越高,適應度越高)。
- 用選擇函數按照某種規定擇優選擇(每隔一段時間,射殺海拔較低的袋鼠,保持袋鼠總數平衡)。
- 讓個體基因變異(讓袋鼠隨機跳跳)。
- 然后產生子代(希望存活下來的袋鼠多產,在那生兒育女)。
遺傳算法並不保證獲得問題最優解,它的最大優點在於不必操心如何“找”最優,只是“否定”不好的(把表現不好的,射殺)。
遺傳算法一般步驟:
- 評估每條染色體所對應個體的適應度。
- 遵照適應度越高,選擇概率越大原則,從中群中選擇兩個個體作為父方和母方。
- 抽取父母雙方的染色體,進行交叉,產生子代。
- 對子代的染色體進行變異。
- 重復2,3,4步驟,直到新種群產生。
遺傳算法過程的細節:
繪制袋鼠的染色體——基因編碼方式
- 采用二進制編碼,如:010010011011011110111110
- 采用浮點數編碼,如:1.2 –3.3 – 2.0 –5.4 – 2.7 – 4.3
- 采用符號編碼。
在遺傳算法中關心的是袋鼠的位置(海拔低的被射殺),所以以袋鼠的位置作為特征進行編碼,具體來說位置就是橫坐標。 接着建立表現型到基因型的映射關系。就是如何用編碼來變現出袋鼠所在的橫坐標。由於橫坐標是一個實數,說透了我們就是對這個實數編碼。
袋鼠的染色體就是橫坐標上實數的二進制編碼。
物競天擇——適應性評分與選擇函數
1.物競——適應度函數
袋鼠的海拔高度作為它的適應性評分。即適應度函數直接返回函數值就行了。
2.天擇——選擇函數
常用選擇方法——輪盤賭
比如有5條染色體,他們所對應的適應度評分分別為:5,7,10,13,15。
所以累計總適應度為:
所以各個個體被選中的概率分別為:
注:還有精英選擇機制
遺傳變異——基因重組(交叉)與基因突變
這兩種遺傳操作,二進制編碼與浮點型編碼處理上很大差異。
1. 基因重組、交叉
(1)、二進制編碼
類似高中生物中同源染色體的聯會過程(隨機把其中幾個位於同一位置的編碼進行交換,產生新的個體。)
(2)、浮點數編碼