?? 自適應(yīng)遺傳算法2.m
字號(hào):
figure(1);
fplot('abs(sin(30*variable)).*(1-variable/2)',[0,1]); %畫出函數(shù)曲線
%定義遺傳算法參數(shù)
NIND=100; %個(gè)體數(shù)目(Number of individuals)
MAXGEN=500; %最大遺傳代數(shù)(Maximum number of generations)
PRECI=32; %變量的二進(jìn)制位數(shù)(Precision of variables)
GGAP=1; %代溝(Generation gap)
trace=zeros(2, MAXGEN); %尋優(yōu)結(jié)果的初始值
FieldD=[32;0;1;1;0;1;1]; %區(qū)域描述器(Build field descriptor)
Chrom=crtbp(NIND, PRECI); %初始種群
gen=0; %代計(jì)數(shù)器
variable=bs2rv(Chrom, FieldD); %計(jì)算初始種群的十進(jìn)制轉(zhuǎn)換
ObjV=abs(sin(30*variable)).*(1-variable/2); %計(jì)算目標(biāo)函數(shù)值
Y=0;
while abs(Y-0.9739626456)>0.00000001
FitnV=ranking(-ObjV);
[c3,r3]=sort(FitnV);
for i=1:NIND*0.1
flag(i)=r3(i+NIND*0.9);
end
SelCh=select('rws', Chrom, FitnV, GGAP);
variable1=bs2rv(SelCh, FieldD);
ObjV1=abs(sin(30*variable)).*(1-variable/2);
FitnV1=ranking(-ObjV1);
avgFitnV1=sum(FitnV1)/NIND;
maxFitnV1=max(FitnV1);
for i=1:NIND/2;
ffFitnV1(i)=max(FitnV1(2*i-1),FitnV1(2*i));
end
for i=1:NIND/2;
if ffFitnV1(i)>avgFitnV1
pc(i)=0.7-((0.2*(ffFitnV1(i)-avgFitnV1))./(maxFitnV1-avgFitnV1));
else
pc(i)=0.7;
end
end
for i=1:NIND;
if FitnV1(i)>avgFitnV1
pm(i)=0.1-((0.099*(maxFitnV1-FitnV1(i)))./(maxFitnV1-avgFitnV1));
else
pm(i)=0.1;
end
end
for i=1:NIND/2
SelCh(i:2*i,:)=recombin('xovsp',SelCh(i:2*i,:),pc(i));
end
for i=1:NIND
SelCh(i)=mut(SelCh(i),pm(i));
end
Chrom=SelCh;
variable=bs2rv(SelCh, FieldD); %子代個(gè)體的十進(jìn)制轉(zhuǎn)換
ObjV=abs(sin(30*variable)).*(1-variable/2); %計(jì)算子代的目標(biāo)函數(shù)值
gen=gen+1; %代計(jì)數(shù)器增加
[Y, I]=max(ObjV);hold on;
plot(variable(I), Y, 'bo');
trace(1, gen)=max(ObjV); %遺傳算法性能跟蹤
trace(2, gen)=sum(ObjV)/length(ObjV);
end
variable=bs2rv(Chrom, FieldD); %最優(yōu)個(gè)體的十進(jìn)制轉(zhuǎn)換
hold on, grid;
plot(variable,ObjV,'b*');
figure(2);
plot(trace(1,:));
hold on;
plot(trace(2,:),'-.');grid
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -