?? my_sga_mutation.m
字號:
% 2.6 變異
%
%遺傳算法子程序
%Name: mutation.m
%變異
function [newpop]=sga_mutation(popsize,chromlength,pop,pm,up_range)
%函數說明
%入口參數:pop 當前處理的種群,
% popsize 種群大小,
% chromlength 基因位長度,
% up_range 自變量的相對上限,
%出口參數:newpop 準子代
%功能說明:變異(mutation),基因的突變普遍存在于生物的進化過程中。變異是指父代中的每個個體的每一位都以概率 pm 翻轉,即由“1”變為“0”,
% 或由“0”變為“1”。遺傳算法的變異特性可以使求解過程隨機地搜索到解可能存在的整個空間,因此可以在一定程度上求得全局最優解。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%調試用語句
% 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
newpop1(i)=rand;
end
if newpop2(i)>=up_range
newpop2(i)=rand;
end
end
newpop(1,:)=newpop1';
newpop(2,:)=newpop2';
newpop;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -