?? ga.m
字號:
function []=main(N,pcro,pmut)
%遺傳算法主函數
%用以實現求給定函數fun在給定區間[low,up]上的極大值
% pcro交叉概率,pmut變異概率,N為迭代次數
low=0; %區間下限
up=9; %區間上限
n=50; %種群個數
length=22; %求得單個變量編碼長度
pop=encode(length,n); %用解碼函數求得初始種群,n為種群個體個數
f='x+10*sin(x.*5)+7*cos(x.*4)';
gen=0; %代數初始化
vfx=[];
mfx=[];
while(gen<=N)
fval=zeros(1,n); %初始化函數值
fit=zeros(1,n); %初始化適應度
x=decode(pop(:,1:22),low,up);
fx=eval(f);
if gen==1
figure(1);fplot(f,[low,up]);grid on;hold on;
plot(x,fx,'k*');
title('(a)染色體初始位置分布圖');
xlabel('x');ylabel('f(x)');
end
fsum=sum(fx);
fmin=min(fx);
fs=fsum-n*fmin;
fit=(fx-fmin)/fs; %求個體的適應度
pfx=mean(fx);
q(1)=fit(1);
for i=2:n
q(i)=q(i-1)+fit(i); %累加個體適應度形成賭輪
end
pop=select(pop,q,n); %選擇
pop=crossover(pop,pcro,n,length); %交叉
pop=mutation(pop,pmut,n,length); %變異
gen=gen+1; %下一代
[x]=decode(pop(1,:),low,up);
fval=fun(x);
maxf=fval;
for i=1:n
[x]=decode(pop(i,:),low,up); %解碼最終得到的個體
fval=fun(x); %計算其函數值
if fval>maxf %最優點及最優值得到最終種群中的
maxf=fval;
x0=[x];
end
end
mfx=[mfx pfx];
vfx=[vfx maxf];
if gen==N
x=decode(pop(:,1:22),low,up);
fx=eval(f);
figure(2);fplot(f,[low,up]);grid on;hold on;
plot(x,fx,'k*');
title('(b)染色體最終位置分布圖');
xlabel('x');ylabel('f(x)');
end
end
figure(3);plot(vfx);
title('函數最優個體適應度值變化曲線')
xlabel('Generation');ylabel('maxf');
figure(4);plot(mfx);
title('函數平均個體適應度值變化曲線')
xlabel('Generation');ylabel('pf');
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -