遺傳演算法學習

2021-09-11 06:15:03 字數 1281 閱讀 7165

今天學習遺傳演算法

首先我學習的教程裡的案例是利用遺傳演算法這個群優化演算法來優化bp神經網路的權值和閾值。但它是直接呼叫的工具箱,於是我打算不呼叫工具箱寫乙個詳細點的來加深自己對演算法的理解。

**原理

簡而言之就是模仿達爾文的演化論,生成種群,通過變異交叉來進化種群,最後得到一群適應度高的優秀種群。

(我寫的**盡量是一口氣寫完,不會寫新的函式,所以會比較精簡但是缺乏適用性,僅僅是加深演算法理解)

clear all

pop=round(rand(100,10)); % 生成數目為100,編碼長度為10的種群

[num,gene]=size(pop);

newpop=pop;

count=0; % 迭代計數

while count<=100

for i=1:2:num-1 % 交叉

if rand<0.6 % 交叉概率設為0.6

crosslen=round(rand*gene);% 交叉即為隨機部分基因的交換

newpop(i,:)=[pop(i,1:crosslen),pop(i+1,crosslen+1:end)];

newpop(i+1,:)=[pop(i+1,1:crosslen),pop(i,crosslen+1:end)];

endend

for i=1:num % 變異

if rand<0.001 % 變異概率設為0.001

changpoint=round(rand*(gene-1))+1; % 變異即為隨機某一基因發生改變

newpop(i,changpoint)=abs(newpop(i,changpoint)-1);

endend

x=bin2dec(num2str(newpop)); % 二進位制轉十進位制

objvalue=10*sin(5*x)+7*abs(x-5)+10; % 計算適應度

roulette=sort(rand(num,1)); % 構造輪盤

objvalue=cumsum(objvalue./sum(objvalue));

pop=newpop; % 經過變異與交叉之後得到族群

for i=1:num % 通過輪盤賭法選擇產生新的族群

index=find(roulette(i)newpop(i,:)=pop(index(1),:);

endpop=newpop; % 得到優化後的族群

count=count+1;

enddisp(pop); % 最終得到的族群(整體適應度趨於最大)

遺傳演算法學習

遺傳演算法 ga 是模擬生物在自然環境中的遺傳和精華的過程形成的自適應全域性優化搜尋演算法。通過自然選擇,交叉 遺傳 變異等步驟來產生新一代種群,並逐步使種群精華到包含近似最優解的狀態。種群是生物進化過程中的乙個集團,表示可行解的集合。個體是組成種群的單個生命體,表示可行解。染色體是包含生命體的所有...

Matlab遺傳演算法學習 recint m

看書學習筆記 function newchrom recint oldchrom,xovr identify the population size nind and the number of variables nvar nind,nvar size oldchrom identify the ...

matalb遺傳演算法學習筆記

智慧型演算法及應用 p218遺傳演算法 初始引數 size 80 種群大小為80 g 100 迭代次數100 codel 10 染色體長度10 umax 2.048 變數上限 umin 2.048 變數下限 e round rand size,2 codel 初始隨機種群 主程式 for k 1 1...