1.遺傳算法(Genetic Algorithms,GA)
基於自然選擇和自然遺傳機制的搜索算法,它是一種有效的解決最優化問題的方法,進化算法的一種。最早由美國Michigan大學的John Holland和他的同事及學生提出的。類似於自然界演化的基本法則,“適者生存”是遺傳算法的核心機制:複製(reproduce)、雜交(crossover)、變異(mutation)等自然界的生物演化規則在遺傳算法中都得到類似的體現。
2. 基本概念
遺傳(Heredity)
是生物的普遍特徵,親代把生物信息交給子代,子代按照所得信息而發育、分化,因而子代總是和親代具有相同或者相似的性狀。生物有這個特徵,物種才能穩定存在。
變異(Variation)
親代和子代之間,子代和子代的不同個體之間總有些差異,這種現象稱爲變異,變異是隨機發生的,變異的選擇和積累是生命多樣性和進化的根源。
染色體,chromosome
是生物細胞中含有的一種微小的絲狀化合物,是遺傳物質的主要載體,由多個遺傳因子——基因組成。
遺傳因子,gene
DNA長鏈結構中佔有一定位置的基本遺傳單位,也稱基因。生物的基因根據物種的不同而多少不一。
個體,individual
指染色體帶有特徵的實體。
種羣,population
染色體帶有特徵的個體的集合。
進化,evolution
生物在其延續生命的過程中,逐漸適應其生存環境使得其品質不斷得到改良,這種生命現象稱爲進化。生物的進化是以種羣的形式進行的。
適應度,fitness
度量某個物種對於生存環境的適應程度。
選擇,selection
指以一定的概率從種羣中選擇若干個體的操作。
複製,reproduction
細胞在分裂時,遺傳物質DNA通過複製而轉移到新產生的細胞中,新的細胞就集成了舊細胞的基因。
交叉,crossover
有性生殖生物在繁殖下一代時,兩個同源染色體之間通過交叉而重組,亦即在兩個染色體的某一相同位置處DNA被截斷,其前後兩串分別交叉組合而形成兩個新的染色體。
變異,mutation
複製時很小的概率產生的某些複製差錯。
編碼,coding
DNA中遺傳信息在一個長鏈上按一定的模式排列,也即進行了遺傳編碼。遺傳編碼可以看成是從表現型到遺傳子型的映射。
解碼,decoding
從遺傳子型到表現型的映射。
3.遺傳算法原理
遺傳算法是從代表問題可能潛在解集的一個種羣開始的。
初代種羣產生之後,按照適者生存、優勝劣汰的原理,逐代進化產生出越來越好的近似種羣在每一代中,根據問題域中個體適應度大小挑選個體,並藉助自然遺傳學的遺傳算子進行組合交叉和變異,產生出代表解的解集的種羣。
這個過程將導致種羣像自然進化一樣的後生代種羣比前代更加適應於環境,末代種羣中的最優個體經過解碼可以作爲問題近似最優解。
4.遺傳算法實例——求函數最大值
考慮一元函數求最大值的優化問題
爲什麼選擇這個函數?看下函數曲線就知道了,這麼多波峯波谷,就看算法能否找到某一範圍的極大值:
5.遺傳算法求解詳細過程
(1)編碼
變量x作爲實數,可以視爲遺傳算法的表現形式。從表現型到基因型的映射稱爲編碼。二進制編碼將某個變量值代表的個體表示爲一個[0,1]二進制串(遺傳算法最簡單、最經典的編碼方法)。
若設定求解精確到6位小數,由於區間長度爲2-(-1)=3,必須將區間[-1,2]分爲3*10^6等份。因爲2097152=2^21<3*10^6<=2^22=4194304,所以編碼的二進制串長至少需要22位。
(2)產生初始種羣
個體由串長爲22的隨機產生的二進制串組成染色體的基因碼,產生一定數目的個體組成種羣,種羣的大小(規模)就是指種羣中的個體數目。
(3)計算適應度
適應度大的個體其存活和被選中的概率大。適應度的計算就是對個體的計算,本例求函數最大值,目標函數值大的個體適應度大,所以直接引用目標函數作爲適應度函數f(s)=f(x)。
例如x1=0.637197通過編碼得到的二進制串是s1=[1000101110110101000111],這個串就是個體。此個體的適應度就是:
假設這裏選擇種羣數量爲3 ,每個個體爲:
s1=[1000101110110101000111]
s2=[0000001110000000010000]
s3=[1110000000111111000101]
分別對應於數量值
x1=0.637197, x2=-0.958973, x3=1.627888
另兩個個體的適應度計算如下
(4)選擇
輪盤賭選擇法,最常用,最直觀
f(s1)=2.286345,f(s2)=1.078878,f(s3)=3.250650
把三個適應度依比例畫在輪盤上,轉動輪盤,最後停在哪裏,就選擇誰,適應度大的被選中概率大:
選擇方法的實現:產生[0,1]間的隨機數,以隨機數落在那個範圍進行選擇:
[0,0.16)
[0.16,0.51)
[0.51,1]
(5)遺傳操作
n下面是經過選擇操作後的兩個個體:
s2=[00000 01110000000010000]
s3=[11100 00000111111000101]
首先執行單點交叉,隨機隨機選擇交叉點,將之後的串交叉
s2'=[00000 00000111111000101]
s3'=[11100 01110000000010000]
n這兩個個體的適應度分別爲:
(6)變異操作
假定以一小概率選擇S3的第5個遺傳因子(第5位)變異,遺傳因子由原來的0變爲1,產生新個體
s3'=[1110100000111111000101]
該個體適應度
個體的適應度比它的父個體的適應度減小了。
但如果選中第11個遺傳因子變異,產生新個體爲
s3''= [11100000001111111000101]
又發現s3''的適應度比其父個體的適應度改善了。這說明變異操作的“擾動”作用(全局搜索)。
6.結果分析
編制基本遺傳算法(SGA)程序求解上述函數在區域[-1.0,2.0]的全局最大值。我們採用二進制編碼,隨機產生初始種羣,適應度函數取函數體本身。取種羣大小爲50,染色體長度爲22(精度爲6位小數),交叉概率爲0.6,變異概率爲0.02,迭代100代。獨立運行5次,繪製種羣最大適應度(函數最優解)平均曲線值如下圖:
由圖可以看出遺傳算法可以有效地跳出局部最優值且收斂速度較快,程序運行30代左右即可得到最大值3.850274,與實際最大值相差不大,可以作爲問題的全局最優解。
轉自:http://www.cnblogs.com/littlelucky/articles/1745801.html
轉自:http://hi.baidu.com/lewutian/blog/item/40bae709fbc01fa42fddd43c.html