Házik megoldása:

Contents

Rastrigin függvény

function ki=rastrigin(x)

ki=10+x(1)^2-10.*cos(2*pi*x(1))+x(2)^2-10*cos(2*pi*x(2));


Ismert, hogy az abszolút minimuma a [-5.12,5.12]X[-5.12,5.12] tartományon az origóban van. Mindegyik megoldóval 100-szor keresve:

futasokszama=100;

for i=1:futasokszama

    xminH(i,:)=hutes(1,1,5,2,0.1,1000,@rastrigin);
    xminR(i,:)=rechenberg(@rastrigin,[1,1]);
    xmin1(i,:)=esUc1(@rastrigin,2);
    xminU(i,:)=esUcn(@rastrigin,2);

end

Hányszor találta meg a helyes minimumot:

sikeres=zeros(futasokszama,4);

for i=1:futasokszama

 if norm(xminH(i,:),2)<10^-2
     sikeres(i,1)=1;
 end
 if norm(xminR(i,:),2)<10^-2
     sikeres(i,2)=1;
 end
 if norm(xmin1(i,1:2),2)<10^-2
     sikeres(i,3)=1;
 end
 if norm(xminU(i,1:2),2)<10^-2
     sikeres(i,4)=1;
 end
end

 sum(sikeres)
ans =

    11    20    83    81

Ackley függvény

function ki=ackley(x)

ki=-20*exp(-0.2*sqrt(0.5*x(1)^2+x(2)^2))...
    -exp(0.5*cos(2*pi*x(1))+cos(2*pi*x(2)))+exp(1)+20;


Ismert, hogy az abszolút minimuma a [-5,5]X[-5,5] tartományon az origóban van. Mindegyik megoldóval 100-szor keresve:

futasokszama=100;

for i=1:futasokszama

    xminH(i,:)=hutes(1,1,5,2,0.1,1000,@ackley);
    xminR(i,:)=rechenberg(@ackley,[1,1]);
    xmin1(i,:)=esUc1(@ackley,2);
    xminU(i,:)=esUcn(@ackley,2);

end

Hányszor találta meg a helyes minimumot:

sikeres=zeros(futasokszama,4);

for i=1:futasokszama

 if norm(xminH(i,:),2)<10^-2
     sikeres(i,1)=1;
 end
 if norm(xminR(i,:),2)<10^-2
     sikeres(i,2)=1;
 end
 if norm(xmin1(i,1:2),2)<10^-2
     sikeres(i,3)=1;
 end
 if norm(xminU(i,1:2),2)<10^-2
     sikeres(i,4)=1;
 end
end

 sum(sikeres)
ans =

    96    99   100   100

Rosenbrock függvény

function ki=rosenbrock(x)

ki=100*(x(2)-x(1)^2)^2+(x(1)-1)^2;

Ismert, hogy az abszolút minimuma a [-5,5]X[-5,5] tartományon az [1,1]-ben van. Mindegyik megoldóval 100-szor keresve:

futasokszama=100;

for i=1:futasokszama

    xminH(i,:)=hutes(0,0,5,2,0.1,1000,@rosenbrock);
    xminR(i,:)=rechenberg(@rosenbrock,[0,0]);
    xmin1(i,:)=esUc1(@rosenbrock,2);
    xminU(i,:)=esUcn(@rosenbrock,2);

end

Hányszor találta meg a helyes minimumot:

sikeres=zeros(futasokszama,4);

for i=1:futasokszama

 if norm(xminH(i,:)-[1,1],2)<10^-2
     sikeres(i,1)=1;
 end
 if norm(xminR(i,:)-[1,1],2)<10^-2
     sikeres(i,2)=1;
 end
 if norm(xmin1(i,1:2)-[1,1],2)<10^-2
     sikeres(i,3)=1;
 end
 if norm(xminU(i,1:2)-[1,1],2)<10^-2
     sikeres(i,4)=1;
 end
end

 sum(sikeres)
ans =

    24   100     0     0

Beale függvény

function ki=beale(x)

ki=(1.5-x(1)+x(1)*x(2))^2+(2.25-x(1)+x(1)*x(2)^2)^2+(2.625-x(1)+x(1)*x(2)^3)^2;


Ismert, hogy az abszolút minimuma a [-4.5,4.5]X[-4.5,4.5] tartományon az [3,0.5]-ben van. Mindegyik megoldóval 100-szor keresve:

futasokszama=100;

for i=1:futasokszama

    xminH(i,:)=hutes(0,0,5,2,0.1,1000,@beale);
    xminR(i,:)=rechenberg(@beale,[0,0]);
    xmin1(i,:)=esUc1(@beale,2);
    xminU(i,:)=esUcn(@beale,2);

end

Hányszor találta meg a helyes minimumot:

sikeres=zeros(futasokszama,4);

for i=1:futasokszama

 if norm(xminH(i,:)-[3,0.5],2)<10^-2
     sikeres(i,1)=1;
 end
 if norm(xminR(i,:)-[3,0.5],2)<10^-2
     sikeres(i,2)=1;
 end
 if norm(xmin1(i,1:2)-[3,0.5],2)<10^-2
     sikeres(i,3)=1;
 end
 if norm(xminU(i,1:2)-[3,0.5],2)<10^-2
     sikeres(i,4)=1;
 end
end

 sum(sikeres)
ans =

    82    87   100   100

Booth függvény

function ki=booth(x)

ki=(x(1)+2*x(2)-7)^2+(2*x(1)+x(2)-5)^2;

Ismert, hogy az abszolút minimuma a [-10,10]X[-10,10] tartományon az [1,3]-ben van. Mindegyik megoldóval 100-szor keresve:

futasokszama=100;

for i=1:futasokszama

    xminH(i,:)=hutes(0,0,5,2,0.1,1000,@booth);
    xminR(i,:)=rechenberg(@booth,[0,0]);
    xmin1(i,:)=esUc1(@booth,2);
    xminU(i,:)=esUcn(@booth,2);

end

Hányszor találta meg a helyes minimumot:

sikeres=zeros(futasokszama,4);

for i=1:futasokszama

 if norm(xminH(i,:)-[1,3],2)<10^-2
     sikeres(i,1)=1;
 end
 if norm(xminR(i,:)-[1,3],2)<10^-2
     sikeres(i,2)=1;
 end
 if norm(xmin1(i,1:2)-[1,3],2)<10^-2
     sikeres(i,3)=1;
 end
 if norm(xminU(i,1:2)-[1,3],2)<10^-2
     sikeres(i,4)=1;
 end
end

 sum(sikeres)
ans =

   100   100   100   100

Matyas függvény

function ki=matyas(x)

ki=0.26*(x(1)^2+x(2)^2)-0.48*x(1)*x(2);

Ismert, hogy az abszolút minimuma a [-10,10]X[-10,10] tartományon az [0,0]-ben van. Mindegyik megoldóval 100-szor keresve:

futasokszama=100;

for i=1:futasokszama

    xminH(i,:)=hutes(1,1,5,2,0.1,1000,@matyas);
    xminR(i,:)=rechenberg(@matyas,[1,1]);
    xmin1(i,:)=esUc1(@matyas,2);
    xminU(i,:)=esUcn(@matyas,2);

end

Hányszor találta meg a helyes minimumot:

sikeres=zeros(futasokszama,4);

for i=1:futasokszama

 if norm(xminH(i,:)-[0,0],2)<10^-2
     sikeres(i,1)=1;
 end
 if norm(xminR(i,:)-[0,0],2)<10^-2
     sikeres(i,2)=1;
 end
 if norm(xmin1(i,1:2)-[0,0],2)<10^-2
     sikeres(i,3)=1;
 end
 if norm(xminU(i,1:2)-[0,0],2)<10^-2
     sikeres(i,4)=1;
 end
end

 sum(sikeres)
ans =

   100   100   100   100

Three-hump camel függvény

function ki=thCamel(x)

ki=2*x(1)^2-1.05*x(1)^4+x(1)^6/6+x(1)*x(2)+x(2)^2;

Ismert, hogy az abszolút minimuma a [-10,10]X[-10,10] tartományon az [0,0]-ben van. Mindegyik megoldóval 100-szor keresve:

futasokszama=100;

for i=1:futasokszama

    xminH(i,:)=hutes(1,1,5,2,0.1,1000,@thCamel);
    xminR(i,:)=rechenberg(@thCamel,[1,1]);
    xmin1(i,:)=esUc1(@thCamel,2);
    xminU(i,:)=esUcn(@thCamel,2);

end

Hányszor találta meg a helyes minimumot:

sikeres=zeros(futasokszama,4);

for i=1:futasokszama

 if norm(xminH(i,:)-[0,0],2)<10^-2
     sikeres(i,1)=1;
 end
 if norm(xminR(i,:)-[0,0],2)<10^-2
     sikeres(i,2)=1;
 end
 if norm(xmin1(i,1:2)-[0,0],2)<10^-2
     sikeres(i,3)=1;
 end
 if norm(xminU(i,1:2)-[0,0],2)<10^-2
     sikeres(i,4)=1;
 end
end

 sum(sikeres)
ans =

    89    96   100   100

Easom függvény

function ki=easom(x)

ki=-cos(x(1))*cos(x(2))*exp(-(x(1)-pi)^2-(x(2)-pi)^2);

Ismert, hogy az abszolút minimuma a [-10,10]X[-10,10] tartományon az [pi,pi]-ben van. Mindegyik megoldóval 100-szor keresve:

futasokszama=100;

for i=1:futasokszama

    xminH(i,:)=hutes(1,1,5,2,0.1,1000,@easom);
    xminR(i,:)=rechenberg(@easom,[1,1]);
    xmin1(i,:)=esUc1(@easom,2);
    xminU(i,:)=esUcn(@easom,2);

end

Hányszor találta meg a helyes minimumot:

sikeres=zeros(futasokszama,4);

for i=1:futasokszama

 if norm(xminH(i,:)-[pi,pi],2)<10^-2
     sikeres(i,1)=1;
 end
 if norm(xminR(i,:)-[pi,pi],2)<10^-2
     sikeres(i,2)=1;
 end
 if norm(xmin1(i,1:2)-[pi,pi],2)<10^-2
     sikeres(i,3)=1;
 end
 if norm(xminU(i,1:2)-[pi,pi],2)<10^-2
     sikeres(i,4)=1;
 end
end

 sum(sikeres)
ans =

    99   100   100   100

McCormick függvény

function ki=mcCormick(x)

ki=sin(x(1)+x(2))+(x(1)-x(2))^2-1.5*x(1)+2.5*x(2)+1;

Ismert, hogy az abszolút minimuma a [-10,10]X[-10,10] tartományon az x=-0.54719, y=-1.54719-ben van. Mindegyik megoldóval 100-szor keresve:

futasokszama=100;

for i=1:futasokszama

    xminH(i,:)=hutes(1,1,5,2,0.1,1000,@mcCormick);
    xminR(i,:)=rechenberg(@mcCormick,[1,1]);
    xmin1(i,:)=esUc1(@mcCormick,2);
    xminU(i,:)=esUcn(@mcCormick,2);

end

Hányszor találta meg a helyes minimumot:

sikeres=zeros(futasokszama,4);

for i=1:futasokszama

 if norm(xminH(i,:)-[-0.54719,-1.54719],2)<10^-2
     sikeres(i,1)=1;
 end
 if norm(xminR(i,:)-[-0.54719,-1.54719],2)<10^-2
     sikeres(i,2)=1;
 end
 if norm(xmin1(i,1:2)-[-0.54719,-1.54719],2)<10^-2
     sikeres(i,3)=1;
 end
 if norm(xminU(i,1:2)-[-0.54719,-1.54719],2)<10^-2
     sikeres(i,4)=1;
 end
end

 sum(sikeres)
ans =

     0    55     3     4

Styblinski-Tang függvény

function ki=sTang(x)

ki=(x(1)^4-16*x(1)^2+5*x(1))/2+(x(2)^4-16*x(2)^2+5*x(2))/2;

Ismert, hogy az abszolút minimuma a [-10,10]X[-10,10] tartományon az x=-2.903534, y=-2.903534-ben van. Mindegyik megoldóval 100-szor keresve:

futasokszama=100;

for i=1:futasokszama

    xminH(i,:)=hutes(1,1,5,2,0.1,1000,@sTang);
    xminR(i,:)=rechenberg(@sTang,[1,1]);
    xmin1(i,:)=esUc1(@sTang,2);
    xminU(i,:)=esUcn(@sTang,2);

end

Hányszor találta meg a helyes minimumot:

sikeres=zeros(futasokszama,4);

for i=1:futasokszama

 if norm(xminH(i,:)-[-2.903534,-2.903534],2)<10^-2
     sikeres(i,1)=1;
 end
 if norm(xminR(i,:)-[-2.903534,-2.903534],2)<10^-2
     sikeres(i,2)=1;
 end
 if norm(xmin1(i,1:2)-[-2.903534,-2.903534],2)<10^-2
     sikeres(i,3)=1;
 end
 if norm(xminU(i,1:2)-[-2.903534,-2.903534],2)<10^-2
     sikeres(i,4)=1;
 end
end
 sum(sikeres)
ans =

    76     1   100    99