遺傳演算法理論,案例,以及MATLAB應用

2021-07-24 19:02:53 字數 1667 閱讀 4365

求下述二元函式的最大值:

個體編碼

遺傳演算法的運算物件是表示個體的符號串,所以必須把變數 x1

,x2編碼為一種符號串。本題中,用無符號二進位制整數來表示。 因 x

1 , x2

為 0 ~ 7之間的整數,所以分別用3位無符號二進位制整數來表示,將它們連線在一起所組成的6位無符號二進位制數就形成了個體的基因型,表示乙個可行解。例如,基因型 x=

101110

所對應的表現型是:x=

[5,6

] 。

個體的表現型x和基因型x之間可通過編碼和解碼程式相互轉換。

初始群體的產生

遺傳演算法是對群體進行的進化操作,需要給其淮備一些表示起始搜尋點的初始群體資料。

本例中,群體規模的大小取為4,即群體由4個個體組成,每個個體可通過隨機方法產生。如:

011101

,101011

,011100

,111001

適應度汁算

遺傳演算法中以個體適應度的大小來評定各個個體的優劣程度,從而決定其遺傳機會的大小。本例中,目標函式總取非負值,並且是以求函式最大值為優化目標,故可直接利用目標函式值作為個體的適應度。

選擇運算

選擇運算(或稱為複製運算)把當前群體中適應度較高的個體按某種規則或模型遺傳到下一代群體中。一般要求適應度較高的個體將有更多的機會遺傳到下一代群體中。

本例中,我們採用與適應度成正比的概率來確定各個個體複製到下一代群體中的數量。其具體操作過程是:

交叉運算

交叉運算是遺傳演算法中產生新個體的主要操作過程,它以某一概率相互交換某兩個個體之間的部分染色體。

本例採用單點交叉的方法,其具體操作過程是:

6. 變異運算

變異運算是對個體的某乙個或某一些基因座上的基因值按某一較小的概率進行改變,它也是產生新個體的一種操作方法。

本例中,我們採用基本位變異的方法來進行變異運算,其具體操作過程是:

- 首先確定出各個個體的基因變異位置,下表所示為隨機產生的變異點位置, 其中的數字表示變異點設定在該基因座處;

- 然後依照某一概率將變異點的原有基因值取反。

對群體p(t

) 進行一輪選擇、交叉、變異運算之後可得到新一代的群體p(

從上表中可以看出,群體經過一代進化之後,其適應度的最大值、平均值都得 到了明顯的改進。事實上,這裡已經找到了最佳個體「111111」。

注意:需要說明的是,表中有些欄的資料是隨機產生的。這裡為了更好地說明問題,我們特意選擇了一些較好的數值以便能夠得到較好的結果,而在實際運算過程中有可能需要一定的迴圈次數才能達到這個最優結果。

遺傳演算法理解

3月20 日,有個同學問我一些關於遺傳演算法的 編寫,我按照她的思路寫出來第一二,四步。但是不明白為什麼要這樣做。我今天查了一些遺傳演算法相關資料,大概明白她為什麼要我這樣寫 了。以下是我的理解。遺傳演算法的基本思想借鑑的是生物學基礎的遺傳和進化。生物進化的一般過程 1.首先要有乙個初始種群,種群的...

我對遺傳演算法理解

1 始祖值 2 隨機交叉 3 優秀標準 4 精英策略 5 收斂 始祖值,a 1 echo print r a echo 雜湊值 any array 2,4,7,8,10,12,51,32,11 echo print r any echo 交叉並啟動精英策略,假設後代的和越大越優秀 foreach a...

我對遺傳演算法理解

1 始祖值 2 隨機交叉 3 優秀標準 4 精英策略 5 收斂 始祖值,a 1 echo print r a echo 雜湊值 any array 2,4,7,8,10,12,51,32,11 echo print r any echo 交叉並啟動精英策略,假設後代的和越大越優秀 foreach a...