智能優化算法又稱現代啓發式算法,是一種具備全局優化性能、通用性強且適合於並行處理的算法。html
這種算法通常具備嚴密的理論依據,而不是單純憑藉專家經驗,理論上能夠在必定的時間內找到最優解或近似最優解。 python
經常使用的智能優化算法有:算法
遺傳算法 、模擬退火算法、禁忌搜索算法、粒子羣算法、蟻羣算法。機器學習
(本經典算法研究系列,往後將陸續闡述模擬退火算法、粒子羣算法、蟻羣算法。)函數
一、遺傳算法概述性能
在每次迭代中都保留一組候選解,並按某種指標從解羣中選取較優的個體,利用遺傳算子(選擇、交叉和變異)對這些個體進行組合,產生新一代的候選解羣,重複此過程,直到知足某種收斂指標爲止。 學習
基本遺傳算法(Simple Genetic Algorithms,GA)又稱簡單遺傳算法或標準遺傳算法),是由Goldberg總結出的一種最基本的遺傳算法,其遺傳進化操做過程簡單,容易理解,是其它一些遺傳算法的雛形和基礎。優化
二、基本遺傳算法的組成編碼
(1)編碼(產生初始種羣)url
(2)適應度函數
(3)遺傳算子(選擇、交叉、變異)
(4)運行參數
接下來,我們分門別類,分別闡述着基本遺傳算法的五個組成部分:
一、編碼
遺傳算法(GA)經過某種編碼機制把對象抽象爲由特定符號按必定順序排成的串。
正如研究生物遺傳是從染色體着手,而染色體則是由基因排成的串。
基本遺傳算法(SGA)使用二進制串進行編碼。
初始種羣:基本遺傳算法(SGA)採用隨機方法生成若干個個體的集合,該集合稱爲初始種羣。
初始種羣中個體的數量稱爲種羣規模。
二、適應度函數
遺傳算法對一個個體(解)的好壞用適應度函數值來評價,適應度函數值越大,解的質量越好。
適應度函數是遺傳算法進化過程的驅動力,也是進行天然選擇的惟一標準,
它的設計應結合求解問題自己的要求而定。
3.一、選擇算子
遺傳算法使用選擇運算對個體進行優勝劣汰操做。
適應度高的個體被遺傳到下一代羣體中的機率大;適應度低的個體,被遺傳到下一代羣體中的機率小。
選擇操做的任務就是從父代羣體中選取一些個體,遺傳到下一代羣體。
基本遺傳算法(SGA)中選擇算子採用輪盤賭選擇方法。
Ok,下面就來看下這個輪盤賭的例子,這個例子通俗易懂,對理解選擇算子幫助很大。
輪盤賭選擇方法
輪盤賭選擇又稱比例選擇算子,其基本思想是:
各個個體被選中的機率與其適應度函數值大小成正比。
設羣體大小爲N,個體xi 的適應度爲 f(xi),則個體xi的選擇機率爲:
輪盤賭選擇法可用以下過程模擬來實現:
(1)在[0, 1]內產生一個均勻分佈的隨機數r。
(2)若r≤q1,則染色體x1被選中。
(3)若qk-1<r≤qk(2≤k≤N), 則染色體xk被選中。
其中的qi稱爲染色體xi (i=1, 2, …, n)的積累機率, 其計算公式爲:
積累機率實例:
輪盤賭選擇方法的實現步驟:
(1)計算羣體中全部個體的適應度值;
(2)計算每一個個體的選擇機率;
(3)計算積累機率;
(4)採用模擬賭盤操做(即生成0到1之間的隨機數與每一個個體遺傳到下一代羣體的機率進行匹配)
來肯定各個個體是否遺傳到下一代羣體中。
例如,有染色體
s1= 13 (01101)
s2= 24 (11000)
s3= 8 (01000)
s4= 19 (10011)
假定適應度爲f(s)=s^2 ,則
f (s1) = f(13) = 13^2 = 169
f (s2) = f(24) = 24^2 = 576
f (s3) = f(8) = 8^2 = 64
f (s4) = f(19) = 19^2 = 361
染色體的選擇機率爲:
染色體的累計機率爲:
根據上面的式子,可獲得:
例如設從區間[0, 1]中產生4個隨機數:
r1 = 0.450126, r2 = 0.110347
r3 = 0.572496, r4 = 0.98503
3.二、交叉算子
交叉運算,是指對兩個相互配對的染色體依據交叉機率 Pc 按某種方式相互交換其部分基因,
從而造成兩個新的個體。
交叉運算是遺傳算法區別於其餘進化算法的重要特徵,它在遺傳算法中起關鍵做用,
是產生新個體的主要方法。
基本遺傳算法(SGA)中交叉算子採用單點交叉算子。
單點交叉運算
3.三、變異算子
變異運算,是指改變個體編碼串中的某些基因值,從而造成新的個體。
變異運算是產生新個體的輔助方法,決定遺傳算法的局部搜索能力,保持種羣多樣性。
交叉運算和變異運算的相互配合,共同完成對搜索空間的全局搜索和局部搜索。
基本遺傳算法(SGA)中變異算子採用基本位變異算子。
基本位變異算子是指對個體編碼串隨機指定的某一位或某幾位基因做變異運算。
對於二進制編碼符號串所表示的個體,若須要進行變異操做的某一基因座上的原有基因值爲0,
則將其變爲1;反之,若原有基因值爲1,則將其變爲0 。
基本位變異算子的執行過程:
四、運行參數
(1)M :種羣規模
(2)T : 遺傳運算的終止進化代數
(3)Pc :交叉機率
(4)Pm :變異機率
3、淺出遺傳算法
遺傳算法的本質
遺傳算法本質上是對染色體模式所進行的一系列運算,即經過選擇算子將當前種羣中的優良模式遺傳
到下一代種羣中,利用交叉算子進行模式重組,利用變異算子進行模式突變。
經過這些遺傳操做,模式逐步向較好的方向進化,最終獲得問題的最優解。
遺傳算法的主要有如下八方面的應用:
(1)組合優化 (2)函數優化 (3)自動控制 (4)生產調度
(5)圖像處理 (6)機器學習 (7)人工生命 (8)數據挖掘
4、遺傳算法的應用
遺傳算法的應用舉例、透析本質(這個例子簡明、但很重要)
已知x爲整數,利用遺傳算法求解區間[0, 31]上的二次函數y=x2的最大值。
[分析]
原問題可轉化爲在區間[0, 31]中搜索能使 y 取最大值的點 a 的問題。
個體:[0, 31] 中的任意點x
適應度:函數值f(x)=x2
解空間:區間[0, 31]
這樣, 只要能給出個體x的適當染色體編碼, 該問題就能夠用遺傳算法來解決。
[解]
(1) 設定種羣規模,編碼染色體,產生初始種羣。
將種羣規模設定爲4;用5位二進制數編碼染色體;取下列個體組成初始種羣S1
s1= 13 (01101), s2= 24 (11000)
s3= 8 (01000), s4= 19 (10011)
(2) 定義適應度函數, 取適應度函數
f (x)=x^2
(3) 計算各代種羣中的各個體的適應度, 並對其染色體進行遺傳操做,
直到適應度最高的個體,即31(11111)出現爲止。
首先計算種羣S1中各個體:
s1= 13(01101), s2= 24(11000)
s3= 8(01000), s4= 19(10011)
的適應度f (si), 容易求得:
f (s1) = f(13) = 13^2 = 169
f (s2) = f(24) = 24^2 = 576
f (s3) = f(8) = 8^2 = 64
f (s4) = f(19) = 19^2 = 361
再計算種羣S1中各個體的選擇機率:
由此可求得
P(s1) = P(13) = 0.14
P(s2) = P(24) = 0.49
P(s3) = P(8) = 0.06
P(s4) = P(19) = 0.31
再計算種羣S1中各個體的積累機率:
選擇-複製
設從區間[0, 1]中產生4個隨機數以下:
r1 = 0.450126, r2 = 0.110347
r3 = 0.572496, r4 = 0.98503
因而,經複製得羣體:
s1’ =11000(24), s2’ =01101(13)
s3’ =11000(24)(24被選中倆次), s4’ =10011(19)
交叉
設交叉率pc=100%,即S1中的全體染色體都參加交叉運算。
設s1’與s2’配對,s3’與s4’配對。
s1’ =11000(24), s2’ =01101(13)
s3’ =11000(24), s4’ =10011(19)
分別交換後兩位基因,得新染色體:
s1’’=11001(25), s2’’=01100(12)
s3’’=11011(27), s4’’=10000(16)
變異
設變異率pm=0.001。
這樣,羣體S1中共有
5×4×0.001=0.02
位基因能夠變異。
0.02位顯然不足1位,因此本輪遺傳操做不作變異。
因而,獲得第二代種羣S2:
s1=11001(25), s2=01100(12)
s3=11011(27), s4=10000(16)
第二代種羣S2中各染色體的狀況:
假設這一輪選擇-複製操做中,種羣S2中的4個染色體都被選中,則獲得羣體:
s1’=11001(25), s2’= 01100(12)
s3’=11011(27), s4’= 10000(16)
作交叉運算,讓s1’與s2’,s3’與s4’ 分別交換後三位基因,得
s1’’=11100(28), s2’’ = 01001(9)
s3’’ =11000(24), s4’’ = 10011(19)
這一輪仍然不會發生變異。
因而,得第三代種羣S3:
s1=11100(28), s2=01001(9)
s3=11000(24), s4=10011(19)
第三代種羣S3中各染色體的狀況:
設這一輪的選擇-複製結果爲:
s1’=11100(28), s2’=11100(28)
s3’=11000(24), s4’=10011(19)
作交叉運算,讓s1’與s4’,s2’與s3’ 分別交換後兩位基因,得
s1’’=11111(31), s2’’=11100(28)
s3’’=11000(24), s4’’=10000(16)
這一輪仍然不會發生變異。
因而,得第四代種羣S4:
s1=11111(31)(出現最優解), s2=11100(28)
s3=11000(24), s4=10000(16)
顯然,在這一代種羣中已經出現了適應度最高的染色體s1=11111。
因而,遺傳操做終止,將染色體(11111)做爲最終結果輸出。
而後,將染色體「11111」解碼爲表現型,即得所求的最優解:31。
將31代入函數y=x2中,即得原問題的解,即函數y=x2的最大值爲961。
因此,綜合以上各代羣的狀況,以下:
ok,完。
文章有誤之處,一經發現,立馬修正。同時,也望各位不吝指正。
-------------------------------------------
遺傳算法入門-博客園-蒼梧
本文主要參考,推薦!感謝做者~
經典算法研究系列:7、深刻淺出遺傳算法
July大神寫的,通俗易懂,推薦!!!
HELLO,遺傳算法!
博主語言輕鬆,用python描述了遺傳算法求解一個函數最大值的例子。
遺傳算法理論基礎與簡單應用實例
博主總結整理的內容,挺不錯的,文中的連接有實例應用。
遺傳算法入門到掌握(一) CSDN-GA代碼下載
袋鼠跳的例子來描述了GA算法,幫助理解GA。
很是好的理解遺傳算法的例子
求下述二元函數的最大值的例子
引用地址:https://blog.csdn.net/v_JULY_v/article/details/6132775