搜档网
当前位置:搜档网 › 基于matlab gatbx的三个遗传算法程序

基于matlab gatbx的三个遗传算法程序


%基于matlab gatbx的三个遗传算法程序

%简单一元函数优化实例
figure(1);
fplot('variable.*sin(10*pi*variable)+2.0',[-1,2]);
NIND=40;
MAXGEN=25;
PRECI=20;
GGAP=0.9;
trace=zeros(2,MAXGEN);
FieldD=[20;-1;2;1;0;1;1];
Chrom=crtbp(NIND,PRECI);
gen=0;
variable=bs2rv(Chrom,FieldD);
ObjV=variable.*sin(10*pi*variable)+2.0;
while genFitnV=ranking(-ObjV);
SelCh=select('sus',Chrom,FitnV,GGAP);
SelCh=recombin('xovsp',SelCh,0.7);
SelCh=mut(SelCh);
variable=bs2rv(SelCh,FieldD);
ObjVSel=variable.*sin(10*pi*variable)+2.0;
[Chrom ObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel);
variable=bs2rv(Chrom,FieldD);
gen=gen+1;
[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);
hold on,grid
plot(variable',ObjV','b*');
figure(2); plot(trace(1,:)');
hold on;
plot(trace(2,:)','-.');
grid;
legend('解的变化','种群均值的变化')



%多元单峰函数
function [X Y]=ga_7_2()
NIND=40;
MAXGEN=500;
NVAR=20;
PRECI=20;
GGAP=0.9;
trace=zeros(MAXGEN,2);
FieldD=[rep([PRECI],[1 NVAR]);rep([-512;512],[1 NVAR]);rep([1;0;1;1],[1 NVAR])];
Chrom=crtbp(NIND,NVAR*PRECI);
gen=0;
ObjV=fun(bs2rv(Chrom,FieldD));
while genFitnV=ranking(ObjV);
SelCh=select('sus',Chrom,FitnV,GGAP);
SelCh=recombin('xovsp',SelCh,0.7);
SelCh=mut(SelCh);
ObjVSel=fun(bs2rv(SelCh,FieldD));
[Chrom ObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel);
gen=gen+1;
[Y I]=min(ObjV);
X=bs2rv(Chrom(I,:),FieldD)';
trace(gen,1)=min(ObjV);
trace(gen,2)=sum(ObjV)/length(ObjV);
end
plot(trace(:,1));
hold on;
plot(trace(:,2),'r-.');grid;
legend('解的变化','种群均值的变化')

function y=fun(x)
[m n]=size(x);
y=zeros(m,1);
for i=1:m
y(i,1)=sum((x(i,:)).^2);
end



%多元多峰函数
function [X Y]=ga_7_3()
[x1,x2]=meshgrid(-10:0.1:10);
figure(1);
mesh(x1,x2,Shubert(x1,x2));
NIND=40;
MAXGEN=500;
NVAR=2;
PRECI=25;
GGAP=0.9;
FieldD=[rep([PRECI],[1 NVAR]);rep([-3;3],[1 NVAR]);rep([1;0;1;1],[1 NVAR])];
Chrom=crtbp(NIND,NVAR*PRECI);
gen=0;
trace=zeros(MAXGEN,2);
x=bs2rv(Chrom,FieldD);
ObjV=Shubert(x(:,1),x(:,2));
while genFitnV=ranking(ObjV);
SelCh=select('sus',Chrom,FitnV,GGAP);
SelCh=recombin('xovsp',SelCh,0.7);
SelCh=mut(SelCh);
x=bs2rv(SelCh,FieldD);
ObjVSel=Shubert(x(:,1),x(:,2));
[Chrom ObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel);
gen=gen+1;
[Y I]=min(ObjVSel);
X=bs2rv(Chrom(I,:),FieldD);
trace(gen,1)=min(ObjV);
trace(gen,2)=sum(ObjV)/length(ObjV);
end
figure(2);
plot(ObjV);hold on;
plot(ObjV,'b*');grid
figure(3);clf
plot(trace(:,1));hold on;
plot(trace(:,2),'-.');grid;
legend('解的变化','种群均值的变化')

function z=Shubert(x,y) %目标函数
z=((1*cos((1+1)*x+1))+(2*cos((2+1)*x+2))+(3*cos((3+1)*x+3))...
+(4*co

s((4+1)*x+4))+(5*cos((5+1)*x+5))).*((1*cos((1+1)*y+1))...
+(2*cos((2+1)*y+2))+(3*cos((3+1)*y+3))+(4*cos((4+1)*y+4))...
+(5*cos((5+1)*y+5)));

相关主题