程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 經典算法研究系列:七、深入淺出遺傳算法,透析GA本質

經典算法研究系列:七、深入淺出遺傳算法,透析GA本質

編輯:關於C語言

本文參考:維基百科  華南理工大學電子講義  互聯網

-------------------------------------------------------------------------------

 

一、初探遺傳算法

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,下面就來看下這個輪盤賭的例子,這個例子通俗易懂,對理解選擇算子幫助很大。

\

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved