本文參考:維基百科 華南理工大學電子講義 互聯網
-------------------------------------------------------------------------------
一、初探遺傳算法
Ok,先看維基百科對遺傳算法所給的解釋:
遺傳算法是計算數學中用於解決最優化的搜索算法,是進化算法的一種。進化算法最初是借鑒了進化生物學中的一些現象而發展起來的,這些現象包括遺傳、突變、自然選擇以及雜交等。
遺傳算法通常實現方式為一種計算機模擬。對於一個最優化問題,一定數量的候選解(稱為個體)的抽象表示(稱為染色體)的種群向更好的解進化。傳統上,解用二進制表示(即0和1的串),但也可以用其他表示方法。進化從完全隨機個體的種群開始,之後一代一代發生。在每一代中,整個種群的適應度被評價,從當前種群中隨機地選擇多個個體(基於它們的適應度),通過自然選擇和突變產生新的生命種群,該種群在算法的下一次迭代中成為當前種群。
光看定義,可能思路並不清晰,咱們來幾個清晰的圖解、步驟、公式:
基本遺傳算法的框圖:
所以,遺傳算法基本步驟是:
1) 初始化 t←0進化代數計數器;T是最大進化代數;隨機生成M個個體作為初始群體 P(t);
2) 個體評價 計算P(t)中各個個體的適應度值;
3) 選擇運算 將選擇算子作用於群體;
4) 交叉運算 將交叉算子作用於群體;
5) 變異運算 將變異算子作用於群體,並通過以上運算得到下一代群體P(t + 1);
6) 終止條件判斷 t≦T:t← t+1 轉到步驟2;
t>T:終止 輸出解。
好的,看下遺傳算法的偽代碼實現:
▲Procedures GA: 偽代碼
begin
initialize P(0);
t = 0; //t是進化的代數,一代、二代、三代...
while(t <= T) do
for i = 1 to M do //M是初始種群的個體數
Evaluate fitness of P(t); //計算P(t)中各個個體的適應度
end for
for i = 1 to M do
Select operation to P(t); //將選擇算子作用於群體
end for
for i = 1 to M/2 do
Crossover operation to P(t); //將交叉算子作用於群體
end for
for i = 1 to M do
Mutation operation to P(t); //將變異算子作用於群體
end for
for i = 1 to M do
P(t+1) = P(t); //得到下一代群體P(t + 1)
end for
t = t + 1; //終止條件判斷 t≦T:t← t+1 轉到步驟2
end while
end
二、深入遺傳算法
1、智能優化算法概述
智能優化算法又稱現代啟發式算法,是一種具有全局優化性能、通用性強且適合於並行處理的算法。
這種算法一般具有嚴密的理論依據,而不是單純憑借專家經驗,理論上可以在一定的時間內找到最優解或近似最優解。
遺傳算法屬於智能優化算法之一。
常用的智能優化算法有:
遺傳算法 、模擬退火算法、禁忌搜索算法、粒子群算法、蟻群算法。
(本經典算法研究系列,日後將陸續闡述模擬退火算法、粒子群算法、蟻群算法。)
2、遺傳算法概述
遺傳算法是由美國的J. Holland教授於1975年在他的專著《自然界和人工系統的適應性》中首先提出的。
借鑒生物界自然選擇和自然遺傳機制的隨機化搜索算法。
模擬自然選擇和自然遺傳過程中發生的繁殖、交叉和基因突變現象。
在每次迭代中都保留一組候選解,並按某種指標從解群中選取較優的個體,利用遺傳算子(選擇、交叉和變異)對這些個
體進行組合,產生新一代的候選解群,重復此過程,直到滿足某種收斂指標為止。
基本遺傳算法(Simple Genetic Algorithms,GA)又稱簡單遺傳算法或標准遺傳算法),是由Goldberg總結出的一種最基本的遺傳算法,其遺傳進化操作過程簡單,容易理解,是其它一些遺傳算法的雛形和基礎。
3、基本遺傳算法的組成
(1)編碼(產生初始種群)
(2)適應度函數
(3)遺傳算子(選擇、交叉、變異)
(4)運行參數
接下來,咱們分門別類,分別闡述著基本遺傳算法的五個組成部分:
1、編碼
遺傳算法(GA)通過某種編碼機制把對象抽象為由特定符號按一定順序排成的串。
正如研究生物遺傳是從染色體著手,而染色體則是由基因排成的串。
基本遺傳算法(SGA)使用二進制串進行編碼。
初始種群:基本遺傳算法(SGA)采用隨機方法生成若干個個體的集合,該集合稱為初始種群。
初始種群中個體的數量稱為種群規模。
2、適應度函數
遺傳算法對一個個體(解)的好壞用適應度函數值來評價,適應度函數值越大,解的質量越好。
適應度函數是遺傳算法進化過程的驅動力,也是進行自然選擇的唯一標准,
它的設計應結合求解問題本身的要求而定。
3.1、選擇算子
遺傳算法使用選擇運算對個體進行優勝劣汰操作。
適應度高的個體被遺傳到下一代群體中的概率大;適應度低的個體,被遺傳到下一代群體中的概率小。
選擇操作的任務就是從父代群體中選取一些個體,遺傳到下一代群體。
基本遺傳算法(SGA)中選擇算子采用輪盤賭選擇方法。
Ok,下面就來看下這個輪盤賭的例子,這個例子通俗易懂,對理解選擇算子幫助很大。