matalb遺傳演算法學習筆記

2021-08-21 13:28:11 字數 3016 閱讀 2432

%《智慧型演算法及應用》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:g

time(k)=k;          %迭代迴圈

for s=1:1:size

m=e(s,:);         %每次取出矩陣一行

y1=0;y2=0;          

%解碼方法

%*****x1******

m1=m(1:1:codel);

for i=1:1:codel

y1=y1+m1(i)*2^(i-1);

endx1=(umax-umin)*y1/1023+umin;

%*****x2*******

m2=m(codel+1:1:2*codel);

for i=1:1:codel

y2=y2+m2(i)*2^(i-1);

endx2=(umax-umin)*y2/1023+umin;

%******目標函式值,個體適應度*****

f(s)=100 * (x1^2 - x2)^2 + (1 - x1)^2;

end%***********1:選擇最佳個體***********

bestj(k)=max(f);

fi=f;                                %適應度函式

[orderfi,indexfi]=sort(fi);  %排序

bestfi=orderfi(size);         %最後乙個即為最大值

bests=e(indexfi(size),:);    %index(x)從小到大排第x位的值在fi中對應位置,記錄每一代中最優個體0.1編碼

bfi(k)=bestfi;                    %記錄每一代中最優個體適應度,此演算法中等於每一代最大函式值

%************2:選擇與複製操作i***********

fi_sum=sum(fi);

fi_size=(orderfi/fi_sum)*size;%計算個體相對適應度

fi_s=floor(fi_size);                 %floor向負無窮四捨五入,依據相對適應度給個體分級

kk=1;

for i=1:1:size

for j=1:1:fi_s(i)                           %分級為0的個體剔除,分級為2的被選擇兩次。

tempe(kk,:)=e(indexfi(i),:);     %選擇進入下一代個體的個數,顯然不足80。

kk=kk+1;

endend

%********3:interlace operation***********

pc=0.9;

n=ceil(20*rand);

for i=1:2:(size-1)

temp=rand;

if pc>temp                                   %交叉條件

tempe(i,n:end)=e(i+1,n:end);     %染色體交叉

tempe(i+1,n:end)=e(i,n:end);

endend

tempe(size,:)=bests;                         %記錄最優個體

e=tempe;

%***************4:mutation operation***********

%pm=0.001---------------------------------------低變異率

%pm=0.001-p[1:1:size]*(0.001)/size-------------自適應變異率

%pm=0.0;----------------------------------------無變異

pm=0.1;

for i=1:1:size

for j=1:1:2*codel

temp=rand;

if pm>temp                              %變異條件

if tempe(i,j)==0                    %變異實現,0.1反轉

tempe(i,j)=1;

else

tempe(i,j)=0;

endend

endend

tempe(size,:)=bests;                       %最優個體保留

e=tempe;                                       %種群替換

end%********************result output******************

max_value=bestfi

bests

x1x2

plot(time,bestj);

xlabel('time');

ylabel('best j');

figure

plot(time,bfi);

xlabel('times');

ylabel('best f');

hold off

sort用法

floor:向負無窮四捨五入

ceil:向正無窮四捨五入

遺傳演算法學習

今天學習遺傳演算法 首先我學習的教程裡的案例是利用遺傳演算法這個群優化演算法來優化bp神經網路的權值和閾值。但它是直接呼叫的工具箱,於是我打算不呼叫工具箱寫乙個詳細點的來加深自己對演算法的理解。原理 簡而言之就是模仿達爾文的演化論,生成種群,通過變異交叉來進化種群,最後得到一群適應度高的優秀種群。我...

遺傳演算法學習

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

遺傳演算法學習筆記(1)

學概率的時候提到有這樣乙個 無限猴子定律 乙個具有無限生命的猴子 它不懂人類的語言 隨機的敲擊打字機,總有一天它會打出一本莎士比亞的書來。這只猴子能打出任意的書來,有意義的無意義的,無意義的遠多於有意義,猴子定律只是指出了得到這種有意義的書的可能性,不保證他的現實性,也許整個宇宙從誕生到現在的時間,...