用遺傳演算法求解二元函式最大值

2021-10-07 10:59:48 字數 1610 閱讀 5537

為了更好的理解遺傳演算法的運算過程,下面用手工的計算間的模擬遺傳演算法的各個主要的執行步驟:

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

max f(x1,x2) = x1^2+x2^2;

(1)個體編碼:遺傳演算法的運算物件是表示個體的符號串,所以必須把變數x1,x2編碼位一種符號串。本題中,用無符號二進位制整數來表示。

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

例如:基因型x = 101110所對應的變現性就是x = 【5,6】;個體的表現型和基因型之間可通過編碼和解碼相互轉換。

(2)初始群體的產生:遺傳演算法是對群體進行的進化操作,需要給其準備一些表示起始搜尋點的初始群體資料。本例中,群體規模的大小為4,就是群體有4個個體組成,每個個體可通過隨機方法產生。

(3)適應度計算:

遺傳演算法中以個體適應度的大小來評定各個個體的優劣程度,從而決定其遺傳機會的大小。

本例中,目標函式總取非負值,並且是以求函式最大值為優化目標,顧客直接利用目標函式作為個體的適應度。

(4)選擇運算。

本例中,我們擦用於適應度成正比的概率來確定各個個體複製到下一代群體中的數量。

先計算出群體中所有個體的適應度的總和;

其次計算出每個個體的相對適應度的大小,他級為每個個體被遺傳到下一代群體中的概率

每個概率值組成乙個區域,全部概率值之和為1;

最後在產生乙個0-1之間的隨機數,依據該隨機數出現在上述那乙個概率區域內來確定各個個體被選中的次數。

(5)交叉運算:

交叉運算是遺傳演算法中產生新個體的主要操作過程,他以某一概率相互交換某倆個個體之間的部分染色體。本列採用單點交叉的方法,其具體操作過程是:

先對群體進行隨機配對;

其次隨機設定交叉點位置;

最後相互交換配對染色體之間的部分基因

(6)變異運算

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

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

首先確定出個個個體的基因變異位置

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

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

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

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

遺傳演算法求解函式最大值c 實現

遺傳演算法求解步驟 1.使用隨機方法產生乙個有n個染色體的初始種群 2.對群體中的每乙個染色體,計算其適應值 3.從群體中隨機選擇一些染色體構成乙個新的群體 常用方法 輪盤賭選擇,錦標賽選擇 4.以一定概率進行交叉 單點交叉 多點交叉 5.以一定概率進行變異 6.返回第2步,以一定的迭代次數進行迴圈...

matlab實現基於遺傳演算法求解二元函式的最大值

1 個體編碼 遺傳演算法的運算物件是表示個體的符號串,所以必須把變數 x1,x2 編碼為一種 符號串。本題中,用無符號二進位制整數來表示。因 x1,x2 為 0 7之間的整數,所以分別用3位無符號二進位制整數來表示,將它 們連線在一起所組成的6位無符號二進位制數就形成了個體的基因型,表示乙個可 行解...

Matlab遺傳演算法求函式最大值

主函式函式main.m global bitlength 定義3個全域性變數 global boundsbegin global boundsend boundsbegin 2 boundsend 2 precision 0.0001 運算精確度 bitlength ceil log2 bounds...