1. 程式人生 > >進化計算之遺傳演算法的簡單介紹

進化計算之遺傳演算法的簡單介紹

作為一個演算法的初學者,最近看了一下計算智慧(人工智慧的一個重要領域)的相關內容。。。在這裡簡單介紹一下進化計算中的遺傳演算法吧大概吧。。。這種綜述性的暫且看看吧。。。

遺傳演算法(Genetic Algorithm, GA)是一種隨機自適應的全域性搜尋演算法,這種演算法正是通過模擬自然界中生物的遺傳進化過程,對優化問題的最優解進行搜尋。 這種搜尋全域性最優解的過程是一個不斷迭代的過程(每次迭代相當於生物進化中的一次迴圈),直到滿足演算法的終止條件為止。

基本思想:從一初始化的群體出發,通過一系列的遺傳操作,包括隨機的選擇(使群體中優秀的個體有更多的機會傳給下一代),交叉(群體內個體之間的資訊交換),和變異

(引入新的變種來確保資訊的多樣性),使最具有生存能力的染色體以最大可能生存,群體一代一代地進化到搜尋空間中越來越好的區域。(”人的好多靈感真的是來自大自然耶。。。“)

生物遺傳進化的基本生物要素和遺傳演算法的基本要素定義的對照關係:

生物遺傳進化 遺傳演算法
群體 問題搜尋空間的一組有效解(表現為群體規模N)
種群 經過選擇產生的新群體(規模同樣為N)
染色體 問題有效解的編碼串
基因 染色體的一個編碼單元
適應能力 染色體的適應值
交配 兩個染色體交換部分基因得到兩個新的子代染色體
變異 染色體某些基因的數值發生變化
進化結束 演算法滿足終止條件時結束,輸出全域性最優解

遺傳演算法的流程結構:

1. 染色體編碼
兩種常用的較簡單的編碼方法:二進位制編碼方法和浮點數編碼方法。
二進位制編碼方法中,產生的染色體是一個二進位制符號序列,染色體的每一個基因只能取值0或1。例如,假設[Umin,Umax][164],採用6位二進位制符號串進行編碼,則二進位制符號串000000代表數值1,符號串111111代表數值64,符號串010001代表數值18等等。
浮點數編碼方法中,染色體的長度等於問題定義的解的變數個數,染色體的每一個基因等於解的每一維變數。例如,待求解問題的一個有效解為

x1i,x2i,x3i,...,xD1i,xDi),D為維數。則該解對應的染色體編碼為x1i,x2i,x3i,...,xD1i,xDi)。這種編碼方法適用於取值範圍比較大的數值。

2. 群體的初始化
一般情況下,遺傳演算法在群體初始化階段採用的是隨機數初始方法。採用生成隨機數的方法,對染色體的每一維變數進行初始化賦值。初始化染色體時必須注意是否滿足優化問題對有效解的定義。

3. 適應值評價
評估函式用於評估各個染色體的的適應值,進而區分優劣。評估函式常常根據問題的優化目標來確定。

4. 選擇運算元
輪盤賭選擇演算法是遺傳演算法最經常使用的選擇演算法,其基本思想是基於概率的隨機選擇。輪盤賭選擇演算法首先根據群體中每個染色體的適應值得到群體所有染色體的適應值總和,並分別計算每個染色體適應值與群體適應值總和的比Pi;其次假設一個具有N個扇區的輪盤,每個扇區對應群體中的一個染色體,扇區的大小與對應染色體的Pi值成正比關係。每選擇轉動一次輪盤,輪盤轉動停止時指標停留的扇區對應的染色體即將被選中進入種群。依次進行N次選擇即可得到規模同樣為N的種群。

5. 交配運算元
在染色體交配階段,每個染色體能否進行交配由交配概率Pc(一般取值為0.4~0.99之間)決定,其具體過程為:對於每個染色體,如果Random01小於Pc則表示該染色體可進行交配操作(其中Random01為[0,1]間均勻分佈的隨機數產生器),否則染色體不參與交配直接複製到新種群中。
交配的具體操作是隨機產生一個有效的交配位置,染色體交換位於交配位置後的所有基因。
交配操作應該注意產生的子代染色體應滿足問題對有效解的定義。同時,參與交配的父代染色體個數與產生的子代染色體個數一樣,因此新種群的規模依然為N。

6. 變異運算元
對於交配後新種群中染色體的每一位基因,根據變異概率Pm判斷該基因是否進行變異。如果Random01小於Pm,則改變該基因的取值,否則該基因不發生變異,保持不變。一般地,Pm可設定在0.001~0.1之間。
7. 演算法流程
流程圖:

Created with Raphaël 2.1.0Start初始化群體適應值評價,儲存最優染色體選擇交配變異重新評價適應值,更新最優染色體滿足終止條件?Endyesno

虛擬碼:

/*
  P(t)表示某一代的群體,t為當前進化代數
  Best表示目前已找到的最優解
*/
Procedure GA
begin
  t=0;
  initialize(P(t));  //初始化群體
  evaluate(P(t));    //適應值評價
  keep_best(P(t));   //儲存最優染色體
  while(不滿足終止條件)do
  begin
    P(t)=selection(P(t));   //選擇運算元
    P(t)=crossover(P(t));   //交配運算元
    P(t)=mutation(P(t));    //變異運算元
    t=t+1;
    P(t)=P(t-1);
    evaluate(P(t));
    if(P(t)的最優適應值大於Best的適應值)
      //以P(t)的最優染色體替代Best
      replace(Best);
    end if
  end
end

基本遺傳演算法

現在用一個簡單的函式優化的例子,來說明遺傳演算法的執行過程。。。
例如:用遺傳演算法求在[0,31]f(x)=x2函式的最大值。

1. 編碼
將變數x編碼為5位長的二進位制無符號整數表示形式:以00000表示x=000001表示x=1,…,11111表示x=31
2. 初始群體的生成
為了簡化,可取群體大小為4。初始群體稱作為進化的初始代,即第1代。初始群體的每個個體都是通過隨機方法產生的,例如,產生的初始種群為01101(13)、11000(24)、01000(8)和10011(19)。
3. 適應度函式
這裡可簡單地根據f(x)=x2來評估群體中各個體。
4. 選擇
首先計算群體中所有個體適應度的總和:132+242+82+192=1170,再計算每個適應度所佔的比例,如第1個個體適應度所佔比例為132/1170=169/1170=0.14,並以此作為相應的選擇概率Ps。個體的選擇概率越大,被選擇的機會就越大。則第2、3、4個個體所佔的比例為0.49,0.06,0.31,並根據累積概率,即可劃分四個區間:[00.14),[0.140.63),[0.630.69),[0.691.00)
為了從初始種群中選擇4個個體進行下一步的選擇操作,產生4個[01]區間的隨機數,假設產生的4個隨機數依次為0.12,0.49,0.32和0.75。由於0.12位於累計概率區間[00.14),因此個體1被選中,0.49位於累計概率區間

相關推薦

進化計算遺傳演算法簡單介紹

作為一個演算法的初學者,最近看了一下計算智慧(人工智慧的一個重要領域)的相關內容。。。在這裡簡單介紹一下進化計算中的遺傳演算法吧大概吧。。。這種綜述性的暫且看看吧。。。 遺傳演算法(Genetic Algorithm, GA)是一種隨機自適應的全域性搜尋

演算法--堆的簡單介紹 演算法---堆的簡單介紹

演算法之---堆的簡單介紹 一、堆的分類 大根堆:一棵完全二叉樹,滿足任一節點都比其孩子節點大小根堆:一棵完全二叉樹,滿足任一節點都比其孩子節點小 二、堆的向下調整性質 前提:節點的左右子樹都是堆,但是自身不是堆 三、堆排序-----內建

神經網路感知器演算法簡單介紹和MATLAB簡單實現

Perceptron Learning Algorithm 感知機學習演算法,在1943年被生物學家MeCulloch和數學家Pitts提出以後,面臨一個問題:引數需要依靠人工經驗選定,十分麻煩。因此人們希望找到一種能夠自己選定引數的方法。1957年,Fran

bash腳本函數簡單介紹、應用及函數的簡單遞歸調用

bash腳本bash腳本編程--函數 在bash中,函數是由命令和語句結構構成的能夠實現特定功能的集合; 為什麽要在bash中引入函數? 在bash腳本編寫過程中有可能會出現重復且不做任何改變的代碼內容,如果這類內容全靠原始代碼書寫的話不易於排錯和優化;因此我們可以選擇將此類代碼封裝在函數中,在適當的場景中可

關於計算硬件的簡單介紹

計算機硬件配置計算機硬件一、硬件組成主板 CPU 硬盤 內存 顯卡 聲卡 網卡 光驅 機箱 顯示器 鍵盤 鼠標 二、主機內部剖析1、CPU 中央處理器(針式和觸點式)性能指標:主頻、核心數、線程數、緩存主頻:CPU內核工作的時鐘頻率緩存:緩解CPU與內存之間的速度差常見品牌 Intel英特爾

旅行商問題遺傳演算法

問題描述 行商問題(Travelling Salesman Problem, 簡記TSP,亦稱貨郎擔問題):設有n個城市和距離矩陣,其中表示城市i到城市j的距離,i,j=1,2 … n,則問題是要找出遍訪每個城市恰好一次的一條迴路並使其路徑長度為最短。 演

算法--堆的簡單介紹

類型 lis 簡單介紹 com itl 調整 完全二叉樹 bsp 完全 算法之---堆的簡單介紹 一、堆的分類 大根堆:一棵完全二叉樹,滿足任一節點都比其孩子節點大小根堆:一棵完全二叉樹,滿足任一節點都比其孩子節點小 二、堆的向下調整性質 前提:節點的左右子樹都是

LVW(Las Vegas Wrapper)特徵選擇演算法簡單介紹

  LVW(Las Vegas Wrapper)是一種典型的包裹式特徵選擇方法,它在拉斯維加斯方法框架下使用隨機策略來進行子集搜尋,並以最終分類器的誤差為特徵子集評價準則。 1、拉斯維加斯方法概述   LVW 基於拉斯維加斯方法的框架,拉斯維加斯方法是

Relief 特徵選擇演算法簡單介紹

  Relief(Relevant Features)是著名的過濾式特徵選擇方法,Relief 為一系列演算法,它包括最早提出的 Relief 以及後來拓展的 Relief-F 和 RRelief-F ,其中最早提出的 Relief 針對的是二分類問題,RR

軟體測試功能測試簡單介紹

一、功能測試的定義: 功能測試就是對產品的各功能進行驗證,根據功能測試用例,逐項測試,檢查產品是否達到使用者要求的功能。 二、如何做好功能測試 1、首先學習軟體測試基本知識和軟體流程。功能測試最開始最基礎的就是分析需求編寫測試用例,測試是把握質量的守關人,保證不漏測的第

Golangweb框架簡單介紹與對比

golang—-web框架簡單介紹與對比 martini 框架 martini 功能列表 - 無侵入式的設計. - 很好的與其他的Go語言包協同使用. - 超讚的路徑匹配和路由. - 模組化的設計 - 容易插入功能件,也容易將其拔出來. -

遺傳演算法 簡單函式優化

基本原理: 遺傳演算法是一種典型的啟發式演算法,屬於非數值演算法範疇。它是模擬達爾文的自然選擇學說和自然界的生物進化過程的一種計算模型。它是採用簡單的編碼技術來表示各種複雜的結構,並通過對一組編碼表示進行簡單的遺傳操作和優勝劣汰的自然選擇來指導學習和確定搜尋的方向。遺傳演算法的操作物件是一群二進位制串(稱為

通俗解釋matlab遺傳演算法程式部分(二)

(1)程式怎麼開始 從哪裡開始程式比較好了?直接先主函式吧,然後再分著說: %-------------函式說明---------------- %             主函式       %---------------------------------------

啟發式演算法遺傳演算法

剛開學便被拉去參加了研究生數模比賽,賽題是一個航班排班的優化問題,所以第一反映便是遺傳演算法,比賽期間三個問題都使用單目標遺傳演算法,趁著還比較熟悉,特此記錄,以便後續複習。本篇文章使用Python進行實現。 ## 啟發式演算法 > 啟發式演算法是一種技術,這種技術使得在可接受的計算成本內去搜尋最好

遺傳演算法框架Geatpy學習——基於網格化處理的多種群進化優化及其在含等式約束的優化問題中的應用

Geatpy是由華南理工大學、華南農業大學、德州奧斯汀公立大學學生聯合團隊開發的一款Python上的遺傳和進化演算法高效能權威框架。其效能遠高於matlab遺傳演算法工具箱及類似的諸如gatbx、GEATbx、gaot等第三方工具箱。尤其適合需要應用遺傳或其他進化演算法求解建

C#out修飾符、ref修飾符、params修飾符的簡單介紹

c# 一個 邏輯 本地 style 逗號 註意 可變 修飾 一、out修飾符   1、調用一個帶有輸出參數的方法也需要使用out 修飾符,但是作為輸出變量傳遞的本地變量在將他們作為輸出變量傳遞前不需要賦值(因為調用後會改變或丟失),編譯器允 許你傳遞未分

qt-qml移動開發在ios上開發和部署app流程簡單介紹

mod target auto 100% rda 自己 color ans ora qt5.3已經全面支持移動開發,除了mac,windows,linux。還支持ios,android,wp,meego等移動平臺,本教程是作者依據自己的經驗,從頭講怎麽樣在ios上公布

[python路]簡單介紹

發展 開發 gui ipython 優缺點 開始 嵌入 網絡 線程 python介紹 #python是一個什麽樣的語言?編譯型和解釋型靜態語言和動態語言強類型定義語言和弱類型定義語言python是一門動態解釋性的強類型定義語言。 #Python的優缺點##優點Python的

Linux運維計算機硬件組成與基本工作原理+服務器簡單介紹

linux 服務器 運維 第1章 計算硬件組成與基本工作原理1.1 計算機組成 1.顯示器2.機箱(主機) | |-----CPU |-----硬盤 |-----內存 |-----電源

Linux環境編程共享內存區(一):共享內存區簡單介紹

介紹 fcn 等於 statistic ont %d sync out 同步 共享內存區是可用IPC形式中最快的。一旦內存區映射到共享它的進程的地址空間,進程間數據的傳遞就不再涉及內核。然而往該共享內存區存放信息或從中取走