?? my_sga_mutation.asv
字號:
% 2.6 變異
% 變異(mutation),基因的突變普遍存在于生物的進化過程中。變異是指父代中的每個個體的每一位都以概率 pm 翻轉,即由“1”變為“0”,
% 或由“0”變為“1”。遺傳算法的變異特性可以使求解過程隨機地搜索到解可能存在的整個空間,因此可以在一定程度上求得全局最優解。
%遺傳算法子程序
%Name: mutation.m
%變異
function [newpop]=sga_mutation(popsize,chromlength,pop,pm,up_range)
%函數說明
%入口參數:pop 當前處理的種群,
% popsize 種群大小,
% chromlength 基因位長度,
% up_range 自變量的相對上限,
% down_range 自變量的相對下限
%出口參數:best_fit 各代最有適應度值的集合
%功能說明:初始種群pop通過遺傳交叉變異在給定定義域中尋優,在遺傳最大代數dai之前得到最優值就自動退出遺傳,
% 判定最優值的標準:前后兩代間最優值之間差值連續30次小于 閾值0.00001
% 如果達到遺傳最大代數也沒有達到退出標準,則強制結束遺傳。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% popsize=10;
% pop=[1023,980,2133,726,1946,657,1702,1224,1522,807;
% 2025,2565,1773,2340,2354,1144,2061,240,1573,825]
% chromlength=12;
% pm=0.7;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
pop1=pop(1,:); %將種群矩陣拆分
pop1;
pop2=pop(2,:);
pop2;
pop1=dec2bin(pop1,chromlength); %%各自轉為二進制
pop1;
pop2=dec2bin(pop2,chromlength);
pop2;
newpop1=pop1;
newpop2=pop2;
for i=1:popsize;
if(rand<pm) %產生一隨機數與變異概率比較
mpoint=round(rand*chromlength);
% mpoint
if mpoint<=0
mpoint=1;
end
if newpop1(i,mpoint)=='0'
newpop1(i,mpoint)='1';
else
newpop1(i,mpoint)='0';
end
end
if(rand<pm) %產生一隨機數與變異概率比較
mpoint=round(rand*chromlength);
% mpoint
if mpoint<=0
mpoint=1;
end
if newpop2(i,mpoint)=='0'
newpop2(i,mpoint)='1';
else
newpop2(i,mpoint)='0';
end
end
end
newpop1=bin2dec(newpop1);
newpop2=bin2dec(newpop2);
%如果產生的個體超過了相對定義域 則取上限
for i=1:popsize
if newpop1(i)>=up_range
% pop_init=randperm(20000);
% newpop1(i)=newpop1(i)-3095;
newpop1(i)=rand;
end
if newpop2(i)>=up_range
% newpop2(i)=newpop2(i)-3095;
% pop_init=randperm(20000);
newpop2(i)=rand;
end
end
newpop(1,:)=newpop1';
newpop(2,:)=newpop2';
newpop;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -