遺傳算法原理簡介

遺傳算法(Genetic Algorithm, GA)是一種進化計算(Evolutionary Computing)算法,屬于人工智能技術(shù)的一部分稿械。遺傳算法最早是由John Holland和他的學(xué)生發(fā)明并改進的浙芙,源于對達芬奇物種進化理論的模仿。在物種進化過程中,為了適應(yīng)環(huán)境断国,好的基因得到保留撕彤,不好的基因被淘汰鱼鸠,這樣經(jīng)過很多代基因的變化,物種的基因就是當前自然環(huán)境下適應(yīng)度最好的基因羹铅。該算法被廣泛應(yīng)用于優(yōu)化和搜索中蚀狰,用于尋求最優(yōu)解(或最優(yōu)解的近似),其最主要的步驟包括交叉(crossover)和突變(mutation)职员。

所有的生物體都由細胞組成麻蹋,每個細胞中都包含了同樣的染色體(chromosome)。染色體由一串DNA組成焊切,我們可以簡單地把一個生物個體表示為一條染色體扮授。每條染色體上都包含著基因,而基因又是由多個DNA組成的专肪。每個基因都控制著個體某個性狀的表達刹勃,例如眼睛的顏色、眼皮的單雙等嚎尤。在物種繁衍的過程中荔仁,首先發(fā)生交叉,來自于父母的染色體經(jīng)過分裂和重組,形成后代的染色體乏梁。之后次洼,后代有一定概率發(fā)生基因突變,即染色體上某個位置處的基因以一定概率發(fā)生變化遇骑。之后滓玖,對每一代都重復(fù)進行交叉和突變兩個步驟。對于每一個后代质蕉,我們可以通過一定的方式測量其適應(yīng)度势篡。適應(yīng)度越好的個體,在下一次交叉中被選中的概率越大模暗,它的基因越容易傳給下一代禁悠。這樣,后代的適應(yīng)度就會越來越好兑宇,直到收斂到一個穩(wěn)定值碍侦。

在優(yōu)化問題中,可行解總是有很多個隶糕,我們希望尋找一個最優(yōu)解瓷产,它相對于其他可行解來說具有更好的適應(yīng)度(即目標函數(shù)值更大或更小)枚驻。每個可行解就是一個“生物個體”濒旦,可以表示為狀態(tài)空間中的一個點和適應(yīng)度。每個解都是一個經(jīng)過編碼的序列再登,已二進制編碼為例尔邓,每個解都是一個二進制序列。這樣每個染色體就是一個二進制序列锉矢。遺傳算法從從一組可行解開始梯嗽,稱為population,從population中隨機選擇染色體進行交叉產(chǎn)生下一代沽损。這一做法的基于下一代的適應(yīng)度會好于上一代灯节。遺傳算法的過程如下:

  1. 初始化,隨機生成n個染色體绵估;
  2. 根據(jù)目標函數(shù)炎疆,計算每個染色體的函數(shù)值,即適應(yīng)度壹士;
  3. 產(chǎn)生下一代:
    • 隨機選擇兩個染色體磷雇,且適應(yīng)度越好的染色體被選中的概率越大偿警;
    • 按照一定的交叉概率使兩個染色體發(fā)生交叉躏救,產(chǎn)生兩個新后代;如果沒有發(fā)生交叉,則后代即為這兩個染色體本身盒使;
    • 按照一定的突變概率使后代發(fā)生基因突變崩掘;
    • 把后代放入新的population中;
  4. 使用新的population少办,重復(fù)步驟2和3苞慢,直到達到終止條件。

終止條件可以是達到了最大迭代次數(shù)英妓,或者是前后連續(xù)幾代的最優(yōu)染色體的適應(yīng)度差值小于一個閾值挽放。以上算法描述也許還不夠直觀,我們舉例說明蔓纠。假設(shè)解可以用二進制編碼表示辑畦,則每個染色體都是一個二進制序列。假設(shè)序列長度為16腿倚,則每個染色體都是一個16位的二進制序列:

染色體

首先纯出,我們隨機生成一個population,假設(shè)population size為20敷燎,則有20個長度為16的二進制序列暂筝。計算每個染色體的適應(yīng)度,然后選取兩個染色體進行交叉硬贯,如下圖所示焕襟。下圖在第6為上將染色體斷開再重組,斷開的位置是可以隨機選擇的饭豹。當然胧洒,斷裂位置也可以不止一個∧矗可以根據(jù)具體問題選擇具體的交叉方式來提升算法性能卫漫。

交叉

之后,隨機選取后代染色體上某個基因發(fā)生基因突變肾砂,突變的位置是隨機選取的列赎。并且,基因突變并不是在每個后代上都會發(fā)生镐确,只是有一定的概率包吝。對于二進制編碼,基因突變的方式是按位取反:

基因突變

上述例子是關(guān)于二進制編碼的源葫,像求解一元函數(shù)在某個區(qū)間內(nèi)的最大最小值就可以使用二進制編碼诗越。例如,求解函數(shù)f(x)=x+sin(3x)+cos(3x)在區(qū)間[0,6]內(nèi)的最小值息堂。假設(shè)我們需要最小值點x保留4位小數(shù)嚷狞,那么求解區(qū)間被離散成60000個數(shù)块促。因為2{15}<60000<2{16},所以床未,需要16位二進制數(shù)來表示這60000個可能的解竭翠。其中0x0000表示0,0x0001表示0.0001薇搁,以此類推斋扰。針對這個例子,文末給出了demo code.

然而啃洋,在排序問題中無法使用二進制編碼传货,應(yīng)該采用排列編碼(permutation encoding)。例如有下面兩個染色體:

排列編碼

交叉:隨機選取一個交叉點宏娄,從該出將兩個染色體斷開损离。染色體A的前部分組成后代1的前部分,然后掃描染色體B绝编,如果出現(xiàn)了后代1中不包含的基因僻澎,則將其順序加入后代1中。同理十饥,染色體B的前部分組成了后代2的前部分窟勃,掃描染色體A獲得后代2的后部分。注意逗堵,交叉的方式多種多樣秉氧,此處只是舉出其中一種方式。

(1 5 3 2 6 | 4 7 9 8) + (8 5 6 7 2 | 3 1 4 9) => (1 5 3 2 6 8 7 4 9) + (8 5 6 7 2 1 3 4 9)

突變:對于一個染色體蜒秤,隨機選中兩個基因互換位置汁咏。例如第3個基因和倒數(shù)第2個基因互換:

(1 5 3 2 6 8 7 4 9) => (1 5 4 2 6 8 7 3 9)

此外還有值編碼(value encoding)和樹編碼(tree encoding)等,具體例子可以參考這個鏈接:http://obitko.com/tutorials/genetic-algorithms/encoding.php

在實際的遺傳算法中作媚,往往會保留上一代中的少數(shù)幾個精英(elite)攘滩,即將上一代population中適應(yīng)度最好的幾個染色體加入到后代的poulation中,同時去除后代population中適應(yīng)度最差的幾個染色體纸泡。通過這個策略漂问,如果在某次迭代中產(chǎn)生了最優(yōu)解,則最優(yōu)解能夠一直保留到迭代結(jié)束女揭。

用GA求函數(shù)最小值的demo code:https://github.com/JiaxYau/GA_test

參考資料

[1] Introduction to Genetic Algorithm,http://obitko.com/tutorials/genetic-algorithms/index.php

[2] Holland J H. Adaption in natural and artificial systems

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蚤假,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子吧兔,更是在濱河造成了極大的恐慌磷仰,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,692評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件境蔼,死亡現(xiàn)場離奇詭異灶平,居然都是意外死亡伺通,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評論 3 392
  • 文/潘曉璐 我一進店門民逼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人涮帘,你說我怎么就攤上這事拼苍。” “怎么了调缨?”我有些...
    開封第一講書人閱讀 162,995評論 0 353
  • 文/不壞的土叔 我叫張陵疮鲫,是天一觀的道長。 經(jīng)常有香客問我弦叶,道長俊犯,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,223評論 1 292
  • 正文 為了忘掉前任伤哺,我火速辦了婚禮燕侠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘立莉。我一直安慰自己绢彤,他們只是感情好,可當我...
    茶點故事閱讀 67,245評論 6 388
  • 文/花漫 我一把揭開白布蜓耻。 她就那樣靜靜地躺著茫舶,像睡著了一般。 火紅的嫁衣襯著肌膚如雪刹淌。 梳的紋絲不亂的頭發(fā)上饶氏,一...
    開封第一講書人閱讀 51,208評論 1 299
  • 那天,我揣著相機與錄音有勾,去河邊找鬼疹启。 笑死,一個胖子當著我的面吹牛蔼卡,可吹牛的內(nèi)容都是我干的皮仁。 我是一名探鬼主播,決...
    沈念sama閱讀 40,091評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼菲宴,長吁一口氣:“原來是場噩夢啊……” “哼贷祈!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起喝峦,我...
    開封第一講書人閱讀 38,929評論 0 274
  • 序言:老撾萬榮一對情侶失蹤势誊,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后谣蠢,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體粟耻,經(jīng)...
    沈念sama閱讀 45,346評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡查近,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,570評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了挤忙。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片霜威。...
    茶點故事閱讀 39,739評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖册烈,靈堂內(nèi)的尸體忽然破棺而出戈泼,到底是詐尸還是另有隱情,我是刑警寧澤赏僧,帶...
    沈念sama閱讀 35,437評論 5 344
  • 正文 年R本政府宣布大猛,位于F島的核電站,受9級特大地震影響淀零,放射性物質(zhì)發(fā)生泄漏挽绩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,037評論 3 326
  • 文/蒙蒙 一驾中、第九天 我趴在偏房一處隱蔽的房頂上張望唉堪。 院中可真熱鬧,春花似錦肩民、人聲如沸巨坊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽趾撵。三九已至,卻和暖如春共啃,著一層夾襖步出監(jiān)牢的瞬間占调,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評論 1 269
  • 我被黑心中介騙來泰國打工移剪, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留究珊,地道東北人。 一個月前我還...
    沈念sama閱讀 47,760評論 2 369
  • 正文 我出身青樓纵苛,卻偏偏與公主長得像剿涮,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子攻人,可洞房花燭夜當晚...
    茶點故事閱讀 44,647評論 2 354

推薦閱讀更多精彩內(nèi)容