【计算智能实验】利用基本遗传算法进行最优计算

一、实验目的

理解谢菲尔德常见函数的使用,利用MATLAB实现函数最优运算。

二、实验内容

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

三、实验结果

1、

clc
clear all
close all
figure(1);
hold on;
lb=1/3;ub=1;
ezplot('cos(2*X)*X/sin(3*X)',[lb,ub]);
xlabel('自变量/X')
ylabel('函数值/Y')
NIND=40;
MAXGEN=20;
PRECI=20;
GGAP=0.95;
px=0.7;
pm=0.01;
trace=zeros(2,MAXGEN);
FieldD=[PRECI;lb;ub;1;0;1;1];
Chrom=crtbp(NIND,PRECI);
gen=0;
X=bs2rv(Chrom,FieldD);
ObjV=cos(2*X).*X./sin(3*X);
while gen<MAXGEN
    FitnV=ranking(-ObjV);
    SelCh=select('sus',Chrom,FitnV,GGAP);
    SelCh=recombin('xovsp',SelCh,px);
    SelCh=mut(SelCh,pm);
    X=bs2rv(SelCh,FieldD);
    ObjVSel=cos(2*X).*X./sin(3*X);
    [Chrom,ObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel);
    X=bs2rv(Chrom,FieldD);
    gen=gen+1;
    [Y,I]=max(ObjV);
    trace(1,gen)=X(I);
    trace(2,gen)=Y;
end
plot(trace(1,:),trace(2,:),'bo')
grid on;
plot(X,ObjV,'b*');
figure(2);
plot(1:MAXGEN,trace(2,:));
grid on
xlabel('遗传代数')
ylabel('解的变化')
title('进化过程')
bestY=trace(2,end);
bestX=trace(1,end);
fprintf(['最优解:\nx=',num2str(bestX),'\nx=',num2str(bestY),'\n'])

在这里插入图片描述
2、

 clc
clear all
close all
figure(1);
lbx=2;ubx=6;
lby=2;uby=6;
ezmesh('x^2+sin(y)+(exp(2*x)./y)+cos(3*x)',[lbx,ubx,lby,uby],500);
hold on;
NIND=40;
MAXGEN=50;
PRECI=20;
GGAP=0.95;
px=0.7;
pm=0.01;
trace=zeros(3,MAXGEN);
FieldD=[PRECI PRECI;lbx lbx;uby uby;1 1;0 0;1 1;1 1];
Chrom=crtbp(NIND,PRECI*2);
gen=0;
XY=bs2rv(Chrom,FieldD);
X=XY(:,1);Y=XY(:,2);
ObjV = X.*X+(exp(2*X)./Y)+sin(Y)+cos(3*X);
while gen<MAXGEN
    FitnV=ranking(-ObjV);
    SelCh=select('sus',Chrom,FitnV,GGAP);
    SelCh=recombin('xovsp',SelCh,px);
    SelCh=mut(SelCh,pm);
    XY=bs2rv(SelCh,FieldD);
    X=XY(:,1);Y=XY(:,2);
    ObjVSel=X.*X+(exp(2*X))./Y+sin(Y)+cos(3*X);
    [Chrom,ObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel);
    XY=bs2rv(Chrom,FieldD);
    gen=gen+1;
    [Y,I]=max(ObjV);
    trace(1:2,gen)=XY(I,:);
    trace(3,gen)=Y;
end
plot3(trace(1,:),trace(2,:),trace(3,:),'bo');
grid on;
plot3(XY(: , 1),XY(: , 2),ObjV,'bo');
hold off;
figure(2);
plot(1:MAXGEN,trace(3,:));
grid on
xlabel('遗传代数')
ylabel('解的变化')
title('进化过程')
bestZ=trace(3,end);
bestX=trace(1,end);
bestY=trace(2,end);
fprintf(['最优解:\nX=',num2str(bestX),'\nY=',num2str(bestY),'\nZ=',num2str(bestZ),'\n'])

在这里插入图片描述
3、

clc
clear all
close all
figure(1);
lbx1=-100;ubx1=100;
lbx2=-100;ubx2=100;
ezmesh('25-(x1^(2)+x2^(2))^(0.25)*(sin(50.*(x1^(2)+x2^(2))^(0.1))^(2)+1)',[lbx1,ubx1,lbx2,ubx2],500);
hold on;
NIND=40;
MAXGEN=20;
PRECI=20;
GGAP=0.95;
px=0.7;
pm=0.01;
trace=zeros(3,MAXGEN);
FieldD=[PRECI PRECI;lbx1 lbx2;ubx1 ubx2;1 1;0 0;1 1;1 1];
Chrom=crtbp(NIND,PRECI*2);
gen=0;
X1X2=bs2rv(Chrom,FieldD);
X1=X1X2(: , 1);X2=X1X2(: , 2);
ObjV = 25-((X1.^2+X2.^2).^0.25).*((sin(50*(X1.^2+X2.^2).^0.1).^2)+1);
while gen<MAXGEN
    FitnV=ranking(-ObjV);
    SelCh=select('sus',Chrom,FitnV,GGAP);
    SelCh=recombin('xovsp',SelCh,px);
    SelCh=mut(SelCh,pm);
    X1X2=bs2rv(SelCh,FieldD);
    X1=X1X2(:,1);X2=X1X2(:,2);
    ObjVSel=25-((X1.^2+X2.^2).^0.25).*((sin(50*(X1.^2+X2.^2).^0.1).^2)+1);
    [Chrom,ObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel);
    X1X2=bs2rv(Chrom,FieldD);
    gen=gen+1;
    [X2,I]=max(ObjV);
    trace(1:2,gen)=X1X2(I,:);
    trace(3,gen)=X2;
end

plot3(trace(1,:),trace(2,:),trace(3,:),'bo')
grid on;
plot3(X1X2(: , 1),X1X2(: , 2),ObjV,'bo');
grid on
hold off;
figure(2);
plot(1:MAXGEN,trace(3,:));
grid on
xlabel('遗传代数')
ylabel('解的变化')
title('进化过程')
bestY=trace(3,end);
bestX1=trace(1,end);
bestX2=trace(2,end);
fprintf(['最优解:\nX1=',num2str(bestX1),'\nX2=',num2str(bestX2),'\nY=',num2str(bestY),'\n']) 

在这里插入图片描述

clc
clear all
close all
figure(1);
lbx1=-100;ubx1=100;
lbx2=-100;ubx2=100;
ezmesh('25-(x1^(2)+x2^(2))^(0.25)*(sin(50.*(x1^(2)+x2^(2))^(0.1))^(2)+1)',[lbx1,ubx1,lbx2,ubx2],500);
hold on;
NIND=40;
MAXGEN=20;
PRECI=20;
GGAP=0.95;
px=0.7;
pm=0.01;
trace=zeros(3,MAXGEN);
FieldD=[PRECI PRECI;lbx1 lbx2;ubx1 ubx2;1 1;0 0;1 1;1 1];
Chrom=crtbp(NIND,PRECI*2);
gen=0;
X1X2=bs2rv(Chrom,FieldD);
X1=X1X2(: , 1);X2=X1X2(: , 2);
ObjV = 25-((X1.^2+X2.^2).^0.25).*((sin(50*(X1.^2+X2.^2).^0.1).^2)+1);
while gen<MAXGEN
    FitnV=ranking(ObjV);
    SelCh=select('sus',Chrom,FitnV,GGAP);
    SelCh=recombin('xovsp',SelCh,px);
    SelCh=mut(SelCh,pm);
    X1X2=bs2rv(SelCh,FieldD);
    X1=X1X2(:,1);X2=X1X2(:,2);
    ObjVSel=25-((X1.^2+X2.^2).^0.25).*((sin(50*(X1.^2+X2.^2).^0.1).^2)+1);
    [Chrom,ObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel);
    X1X2=bs2rv(Chrom,FieldD);
    gen=gen+1;
    [X2,I]=min(ObjV);
    trace(1:2,gen)=X1X2(I,:);
    trace(3,gen)=X2;
end

plot3(trace(1,:),trace(2,:),trace(3,:),'bo')
grid on;
plot3(X1X2(: , 1),X1X2(: , 2),ObjV,'bo');
grid on
hold off;
figure(2);
plot(1:MAXGEN,trace(3,:));
grid on
xlabel('遗传代数')
ylabel('解的变化')
title('进化过程')
bestY=trace(3,end);
bestX1=trace(1,end);
bestX2=trace(2,end);
fprintf(['最优解:\nX1=',num2str(bestX1),'\nX2=',num2str(bestX2),'\nY=',num2str(bestY),'\n']) 

在这里插入图片描述


clc
clear all
close all
figure(1);
lbx=2;ubx=6;
lby=2;uby=6;
ezmesh('1+X.*sin(4*pi*X)-Y.*sin(4*pi*Y+pi)+sin(6*sqrt(X.^2+Y.^2))./(6*sqrt(X.^2+Y.^2+10^-16))',[lbx,ubx,lby,uby],500);
hold on;
NIND=40;
MAXGEN=50;
PRECI=20;
GGAP=0.95;
px=0.7;
pm=0.01;
trace=zeros(3,MAXGEN);
FieldD=[PRECI PRECI;lbx lbx;uby uby;1 1;0 0;1 1;1 1];
Chrom=crtbp(NIND,PRECI*2);
gen=0;
XY=bs2rv(Chrom,FieldD);
X=XY(:,1);Y=XY(:,2);
ObjV = 1+X.*sin(4*pi*X)-Y.*sin(4*pi*Y+pi)+sin(6*sqrt(X.^2+Y.^2))./(6*sqrt(X.^2+Y.^2+10^-16));
while gen<MAXGEN
    FitnV=ranking(-ObjV);
    SelCh=select('sus',Chrom,FitnV,GGAP);
    SelCh=recombin('xovsp',SelCh,px);
    SelCh=mut(SelCh,pm);
    XY=bs2rv(SelCh,FieldD);
    X=XY(:,1);Y=XY(:,2);
    ObjVSel=1+X.*sin(4*pi*X)-Y.*sin(4*pi*Y+pi)+sin(6*sqrt(X.^2+Y.^2))./(6*sqrt(X.^2+Y.^2+10^-16));
    [Chrom,ObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel);
    XY=bs2rv(Chrom,FieldD);
    gen=gen+1;
    [Y,I]=max(ObjV);
    trace(1:2,gen)=XY(I,:);
    trace(3,gen)=Y;
end
plot3(trace(1,:),trace(2,:),trace(3,:),'bo');
grid on;
plot3(XY(: , 1),XY(: , 2),ObjV,'bo');
hold off;
figure(2);
plot(1:MAXGEN,trace(3,:));
grid on
xlabel('遗传代数')
ylabel('解的变化')
title('进化过程')
bestZ=trace(3,end);
bestX=trace(1,end);
bestY=trace(2,end);
fprintf(['最优解:\nX=',num2str(bestX),'\nY=',num2str(bestY),'\nZ=',num2str(bestZ),'\n'])

在这里插入图片描述

clc
clear all
close all
figure(1);
lbx=2;ubx=6;
lby=2;uby=6;
ezmesh('1+X.*sin(4*pi*X)-Y.*sin(4*pi*Y+pi)+sin(6*sqrt(X.^2+Y.^2))./(6*sqrt(X.^2+Y.^2+10^-16))',[lbx,ubx,lby,uby],500);
hold on;
NIND=40;
MAXGEN=50;
PRECI=20;
GGAP=0.95;
px=0.7;
pm=0.01;
trace=zeros(3,MAXGEN);
FieldD=[PRECI PRECI;lbx lbx;uby uby;1 1;0 0;1 1;1 1];
Chrom=crtbp(NIND,PRECI*2);
gen=0;
XY=bs2rv(Chrom,FieldD);
X=XY(:,1);Y=XY(:,2);
ObjV = 1+X.*sin(4*pi*X)-Y.*sin(4*pi*Y+pi)+sin(6*sqrt(X.^2+Y.^2))./(6*sqrt(X.^2+Y.^2+10^-16));
while gen<MAXGEN
    FitnV=ranking(ObjV);
    SelCh=select('sus',Chrom,FitnV,GGAP);
    SelCh=recombin('xovsp',SelCh,px);
    SelCh=mut(SelCh,pm);
    XY=bs2rv(SelCh,FieldD);
    X=XY(:,1);Y=XY(:,2);
    ObjVSel=1+X.*sin(4*pi*X)-Y.*sin(4*pi*Y+pi)+sin(6*sqrt(X.^2+Y.^2))./(6*sqrt(X.^2+Y.^2+10^-16));
    [Chrom,ObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel);
    XY=bs2rv(Chrom,FieldD);
    gen=gen+1;
    [Y,I]=min(ObjV);
    trace(1:2,gen)=XY(I,:);
    trace(3,gen)=Y;
end
plot3(trace(1,:),trace(2,:),trace(3,:),'bo');
grid on;
plot3(XY(: , 1),XY(: , 2),ObjV,'bo');
hold off;
figure(2);
plot(1:MAXGEN,trace(3,:));
grid on
xlabel('遗传代数')
ylabel('解的变化')
title('进化过程')
bestZ=trace(3,end);
bestX=trace(1,end);
bestY=trace(2,end);
fprintf(['最优解:\nX=',num2str(bestX),'\nY=',num2str(bestY),'\nZ=',num2str(bestZ),'\n'])

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_44762986/article/details/112610220