簡單例項
matlab**參考
遺傳演算法屬於優化演算法的一種,也歸屬於啟發式演算法,具體而言,它是模擬達爾文生物演化論的自然選擇和遺傳學機理的生物進化過程的計算模型,是一種通過模擬自然進化過程搜尋最優解的方法。
在講述之前,回憶一下高中生物所學到的自然選擇學說總體上是怎麼樣的:對於乙個種群,當其過度繁殖之後,該種群數目已超過生存環境的環境容納量,為此需要進行生存鬥爭。該種群中越優越(「優越」的語境與生存環境密切相關)的個體,會有更大的概率能成功繁衍後代(把基因遺傳給後代),後代的基因也會越來越優秀,越能夠適應環境。另外值得一提的是,在遺傳的過程中,基因會經歷重組和變異兩個過程。
有二進位制編碼、格雷碼、浮點數編碼方法等。具體的編碼策略需要根據具體問題來分析。
根據目標函式的值以及題中所給的最大值或最小值等要求,來設定評價函式,例如根據不同個體求算的目標函式值(實現方法:二進位制的編碼轉化為實數,代入目標函式)來進行從大到小或從小到大排序。值越大,其「染色體」越可能遺傳給下一代【不妨想想,這不就是往想要達到的目標(最大值或最小值)靠攏嘛,但為了防止區域性過早收斂,給一些看起來弱的個體一點生存空間,說不定它才是未來幾十年後進化的方向呢】
有輪盤賭方法、隨機競爭選擇、最佳保留選擇等等,其目的是把優秀個體篩選出來,準備遺傳給下一代【相當於準備交配】
關鍵:crossover !交叉
方法:單點交叉、多點交叉等等
方法:基本位變異、均勻變異等
關鍵問題:應用遺傳演算法時如何處理數學模型中的約束條件???
一般有:懲罰函式法、修復不可行解(可行解變換)法、搜尋空間限定法**
利用遺傳演算法計算下面函式的最大值: f(
x)=x
sin(10π
x)+2.0x∈
[−1,
2]f (x
)=
xsin(
10πx)
+2.0x∈
[−1,
2]
選擇二進位制編碼,種群中個體數目為40,個體的染色體長度為15,父代與子代的代溝為0.9,最大遺傳數為25。
nind=40; %
maxgen=25; %最大遺傳數
preci=15;
ggap=0.9;
fieldd=[perci;-1;2;1;0;1;1];
chrom=crtbp(nind,perci); %create a binary population
gen=0;
variable=bs2rv(chrom,fieldd); %binary string to real vector 關鍵點:binary to real(實數)
objv=variable.*sin(10*pi.*variable)+2;
y=zeros(maxgen+1,1);
while gen<=maxgen
fitnv=ranking(-objv); %ranking函式根據目標函式值從小到大排列,函式值越小,其適應度越強,繁殖下一代越容易被篩選出來。因此如果最終想要得到最大值,那麼需要把objv取相反數
selch=select('rws',chrom,fitnv,ggap); %rws 輪盤賭 sus 隨機遍歷抽樣,這個過程相當於交配
selch=recombin('xovsp',selch,0.7); %基因重組,xovsp 單點交叉crossover single-point 多點交叉crossover multi-point xov etc. 0.7 表示交叉概率
selch=mut(selch); %變異;
variable=bs2rv(selch,fieldd);
objvsel=variable.*sin(10*pi.*variable)+2; %篩選過後的目標函式值
[chrom,objv]=reins(chrom,selch,1,1,objv,objvsel); %子群重插入到種群中去以便進行下一次進化,此時需要淘汰一些競爭力弱的父代
y(gen+1,1)=max(objv);
gen=gen+1;
endplot([1:maxgen+1]',y,'.')
遺傳演算法簡單例項
遺傳演算法的手工模擬計算示例 為更好地理解遺傳演算法的運算過程,下面用手工計算來簡單地模擬遺傳演算法的各 個主要執行步驟。例 求下述二元函式的最大值 1 個體編碼 遺傳演算法的運算物件是表示個體的符號串,所以必須把變數 x1,x2 編碼為一種符號串。本題中,用無符號二進位制整數來表示。因 x1,x2...
遺傳演算法概述
遺傳演算法模擬自然界的進化過程,選擇 selection 交叉 crossover 變異 mutation 每次迭代過程,都保留部分上一組的個體,經過許多次這樣的迭代,就能求得最優解的近似解。遺傳演算法在函式優化 模式識別 生產排程等方面有許多應用。編碼編碼有兩種,一種是實數編碼,一種是二進位制編碼...
Matlab遺傳演算法例項
clear clc popsize input 輸入種群大小 n lengh input 請輸入染色體長度 n popsize 100 lengh 10 a 1 b 2 y x sin 10 pi x 1.0 初始種群 pop round rand popsize,lengh 行 種群大小,列 染色...