標籤:如何 字串 需要 個人 二進位 公司 色子 簡單 迴圈
遺傳演算法,網上大把資料,但是總是說得雲裡來霧裡去的,本來很簡單的一個演算法,當初研究的時候也弄了好久才初步入門。最近公司實行KPI,每個月需要發文一篇,好久之前就想寫一寫演算法類的文章,剛剛剛好有這樣的機會,寫個系列,首先拿遺傳演算法來開刀。
【故事背景】:上帝造人,要求儘可能的達到完美狀態。
【基因編碼】:假設每一個人都是一個二進位的“位元組”,即10101010這樣的串,0代表缺點,1代表優點,即“位元組”中的每一位當成是一個基因。即一個人的基因就是10101010這樣的串,一個完美的人表示為:11111111。
【初始種群】:上帝造了亞當(10101010)與夏娃(01010101)
【種群大小】:確定種群的大小,為了方便計算,把種群大小確定為4,即以亞當夏娃的四個後代作為種,分別為ABCD。
A:10111000 、B:00011001、C:10110111 、D:00111111
【適應度計算】:個體的優點越多,評價越高,(題外話,比如第一位1代表有錢,第二個1代表帥,它們基本上是上面所有優點的總和,哈哈哈哈)。按照適應度來計算,ABCD四個個體所對應的數值:
A:10111000,184
B:00011001,25
C:10110111,183
D:00111111,63
【適者生存】:優點越多,越能得到繁衍後代的機會,選中繁衍後代的機率,以種群中所有優點數值的總和即A,B,C,D總和為:455。即每個個體被選中的機率為
A:184/455=40.43%。
B:25/445=5.49%。
C: 183/455=40.21%。
D: 63/455=13.84%。
然後,上帝開始擲色子,(產生一個0到1之間的隨機數,依據該隨機數,進行機率的選擇)。這裡面存在的機率問題,優點越大越有機率選中,而不是必然,也存在優點巨大,而沒有被選中的個體。假定通過機率選出的個體是:AACD,即B被社會所淘汰了,而A憑藉著強大的基因,獲得了兩次繁衍後代的機會。
【基因交換】是產生新個體的主要操作過程,它以某一機率相互交換某兩個個體之間的部分染色體,其交叉點的位置為隨機確定。先對群體進行隨機配對,其次隨機設定交叉點位置, 最後再相互交換配對染色體之間的部分基因,擷取新的結果作為個體。
AC:
10111* 000
10110 *111
以左數第五位(隨機)為交換點,即繁衍出來的新個體分別為:10111* 111、10110 *000
AD:
101*10111
001*11111
以左數第三位(隨機)為交換點,即繁衍出來的新個體分別為:101*11111、001*10111
【個體變異】:變異運算是對個體的某一個或某一些基因座上的基因值按某一較小的機率進行改變。
繁衍後代中出來的四個個體,重新號為ABCD。A:10111111、B:10110000、C:10111111、D:00110111.四個個體中,隨機找出一個位進行變異,即取後操作。
假設通過隨機運算,確定
A:第三位取反10111111->10011111,
B:第二位取反10110000->11110000,
C:第七位取反10111111->10111101,
D:第一位取反00110111->10110111
【適應度評價】通過第一次迭代,產生的新的個體為:
A:10011111,159
B:11110000,240
C:10111101,189
D:10110111,183
從ABCD四個個體的種群中可以看出,其中,產生的新的群體,適應度的評價比前一代高,此演算法為了尋找合格個體,進行最終的選擇。
【迴圈】:產生的新的個體,以種群設定的大小,從【適應度計算】->【適者生存】->【基因交換】->【個體變異】->【適應度評價】這幾個關鍵步驟重複迴圈,尋找符合完美條件的,如果有,即完成任務,如果沒有,即進行下一次的迭代。
【總結】:遺傳演算法就是幾個點:
1.基因的編碼,即如何將問題解變成基因序列的形式,並不一定是本文中所用到的10101010這樣的字串
2.適應度評價,即如何評價出個體是否符合最優的個體,如何衡量出具體的數值
3.基因交換中,如何保證所交換出來的個體,也是屬於問題的解。
4.種群的大小確定與迭代次數的確定及最優條件確定。
演算法系列之-【遺傳演算法】