GA算法代碼
1、僞代碼
Procedure Genetic Algorithm
begin
t = 0 ;
初始化 P(t) ;
計算 P(t) 的适應值 ;
while (不滿足停止準則) do begin
t = t+1 ;
從P(t-1)中選擇 P(t) ; %selection
重組 P(t) ; % crossover and mutation
end
end
SGA執行個體講解
1、求函數最值
求函數f(x)=x^2的最大值,x為自然數且0≤x≤31。
編碼
編碼方式:二進制碼
00000 ↔ 0; 01101 ↔ 13; 11111 ↔ 31
随機初始群體 種群規模:4
“轉盤賭”選擇
一點雜交,二進制變異
2、求連續函數的最值
求f ( x) = x sin(10π x) + 2.0 x ∈ [−1, 2]

Fitness.m檔案
function [sol,eval]=fitness(sol,options)
x=sol(1);
eval = x*sin(10*pi*x)+2.0;
實數問題:變量x為實數,如何把z∈[x,y] → {a1,…,aL} ∈{0,1}L
{a1,…,aL} ∈{0,1}L 必須可逆(一個表現型對應一個基因型) .
解碼算子:Γ: {0,1}L → [x,y]
染色體長度L決定可行解的最大精度。高精度 ⇄ 長染色體(慢進化)
設定求解精确到6位小數,因區間長度位2-(-1)=3,則需将區間分為 3X106等份。因 2097152=221< 3X106≤222=4194304。故編碼 的二進制串長L=22。
比如:
<0000000000000000000000> ↔ -1;
<1111111111111111111111> ↔ 2
<1110000000111111000101> ↔ 1.627 888
1.627888 = -1+3x(1110000000111111000101) 2 /(222-1) = -1+3x3674053/(222-1)
随機初始化種群
适應度評估
适應函數
本執行個體目标函數在定義域内均大于0,且是求函數最大值, 故直接引用目标函數作為适應函數:
f(s) = f(x) 其中二進制串s對于變量x的值。
s1 =<0000001110000000010000> ↔ x1= -0.958 973 适應值: f(s1) = f(x1) =1.078 878
s2=<1110000000111111000101> ↔ x2= 1.627 888 适應值: f(s2) = f(x2) = 3.250 650
選擇操作(“輪盤賭”選擇)
交叉操作(單點交叉)
交叉前(父):
s1=<00000 | 01110000000010000>
s2=<11100 | 00000111111000101>
交叉後(子):
s’1=<00000 | 00000111111000101>
s’2=<11100 | 01110000000010000>
适應值:
f(s’1) = f(-0.998 113) =1.940 865
f(s’2) = f(1.666 028) = 3.459 245
s’2的适應值比其雙親個體的适應值高。
遺傳算法的參數
種群規模: 50
染色體長度: L=22
最大進化代數: 150
交叉機率: Pc=0.25
變異機率: Pm=0.01
模拟結果
模拟結果(最佳個體進化情況)
3、無限制優化問題
GA編碼
X=(x1,x2,…,xn)的各個變量可以按二進制編碼方法分别編碼。
對于變量xi 的上、下限限制li≤xi ≤ ui(i=1,2,…,n),依據解的精度要求(有效位數) 求得各個變量X=(x1,x2,…,xn)的二進制碼位數(m1,m2,…,mn),确定方法 類似于SGA執行個體2,
是以将n個二進制位串順序連接配接起來,構成一個個 體的染色體編碼,編碼的總位數m=m1+m2+…+mn。
GA解碼
解碼時仍按各個變量的編碼順序分别實作正常的二進制編碼解碼方法。
4、限制最優化問題
Matlab的實作之GAOT工具箱
1、核心函數:
(1) [pop]=initializega(num,bounds,eevalFN,eevalOps,options)-----初始種群的 生成函數
【輸出參數】
pop-----生成的初始種群
【輸入參數】
num-----種群中的個體數目
bounds-----代表變量的上下界的矩陣 eevalFN-----适應度函數
eevalOps-----傳遞給适應度函數的參數
options-----選擇編碼形式(浮點編碼或是二進制編碼)與精度,如 [type prec], type-----為1時選擇浮點編碼,否則為二進制編碼
prec-----變量進行二進制編碼時指定的精度,預設[1e-6 1]
(2) [x,endPop,bPop,traceInfo] =ga(bounds,evalFN,evalOps,startPop,opts,termFN,termOps,selectFN,…
selectOps,xOverFNs,xOverOps,mutFNs,mutOps)
-------遺傳算法函數
【輸出參數】
x------求得的最優解
endPop------最終得到的種群
bPop------最優種群的一個搜尋軌迹
traceInfo------每代種群中最優及平均個體構成的矩陣
【輸入參數】
bounds------代表變量上下界的矩陣 evalFN------适應度函數
evalOps------傳遞給适應度函數的參數 startPop------初始種群
opts------- [epsilon prob_ops display],opts(1:2)等同于initializega的 options參數,第三個參數控制是否輸出,一般為0。如[1e-6 1 0]
termFN-------終止函數的名稱,如['maxGenTerm']
termOps-------傳遞個終止函數的參數,如[100] selectFN-------選擇函數的名稱,如['normGeomSelect'] selectOps-------傳遞個選擇函數的參數,如[0.08]
xOverFNs-------交叉函數名稱表,以空格分開,如['arithXover heuristicXover simpleXover']
xOverOps-------傳遞給交叉函數的參數表,如[2 0;2 3;2 0] mutFNs-------變異函數表,如['boundaryMutation
multiNonUnifMutation nonUnifMutation unifMutation']
mutOps-------傳遞給交叉函數的參數表,如[4 0 0;6 100 3;4 100 3;4 0 0]