遺傳演算法借鑑了達爾文的演化論,是一種解決最佳化的搜尋演算法
具體步驟:
(1)初始化
先初始化一堆染色體,也就是一組編碼,常見的編碼方式有二進位制、浮點數編碼
(2)適應度函式
根據要達成的目標進行乙個適應度排序(比如求要求乙個函式的最小值,那麼染色體所代表的資料越小,適應度越高),適應度決定了下乙個階段--選擇中它們被使用的概率
(3)選擇
一種比較常見的選擇方法是使用輪盤選擇法,根據適應度算出每條染色體在輪盤上所佔的面積(百分比),根據這個比例隨機選取要操作的兩個親本染色體
(4)交叉
兩個染色體各選取長度相等的一部分進行交換,得到兩個新的染色體,當然交叉的發生是有一定概率的,這個概率是可以設定的
(5)變異
一條染色體的某一位發生變異,如0->1或1->0,變異的概率也是可以設定的
(6)對新生成的染色體和原有的染色體進行適應度評估,並剔除適應度較小的染色體,如果不符合終止條件,則跳轉至步驟(3),(這裡的終止條件可以是達到了預定的遺傳次數, 也可以是適應度達到了要求)
遺傳演算法流程圖:
應用:這裡給出乙個簡單的應用:用遺傳演算法求解一元函式的最小值(最大值改一下就可以),用到了matlab中的sheffield工具箱
%遺傳演算法求y = sin(10*pi*x)/x在【1,2】內的最小值
clcclear all
close all
%畫圖figure(1);
hold on;
lb = 1;
ub = 2;
ezplot('sin(10*pi*x)/x',[lb,ub]);
xlabel('自變數/x')
ylabel('函式值/y')
%定義遺傳演算法引數
nind = 40; %種群大小
maxgen = 20; %最大遺傳代數
preci = 20; %個體長度
ggap = 0.95; %代溝
px = 0.7; %交叉概率
pm = 0.01; %變異概率
trace = zeros(2,maxgen); %尋優結果的初值
fieldd = [preci;lb;ub;1;0;1;1]; %區域描述器
chrom = crtbp(nind,preci); %建立任意離散隨機種群
%優化gen = 0; %代計數器
x = bs2rv(chrom,fieldd); %初始種群二進位製到十進位制的轉換
objv = sin(10*pi*x)./x; %計算目標函式值
while gen
遺傳演算法簡介
把電腦科學與演化論結合起來的嘗試始於50年代末,但由於缺乏一種通用的編碼方案 人們只能依賴變異而非交配來產生新的基因結構,故而收效甚微。到60年代中期,美 國michigan大學的john hol land在a s fraser和h j bremermann等人工作的基礎 上提出了位串編碼技術。這種...
遺傳演算法簡介
今天來講遺傳演算法,遺傳演算法有很多應用,比如尋路問題,八數碼問題,囚犯困境問題,動作控制,tsp問題,生產 排程問題,在乙個多邊形中尋找乙個包含在該多邊形內的乙個圓,函式求最值問題等等。之前講的模擬退火演算法是用 來求解最優化問題的,鏈結為 模擬退 火演算法用一句話概括就是 貪心過程中引入了隨機因...
遺傳演算法 簡介
遺傳演算法 genetic algorithm 是模擬達爾文生物演化論的自然選擇和遺傳學機理的生物進化過程的計算模型,是一種通過模擬自然進化過程 搜尋最優解的方法。遺傳演算法是從代表問題可能潛在的解集的乙個種群 population 開始的,而乙個種群則由經過基因 gene 編碼的一定數目的個體 i...