% %
% Author and programmer: Jaza Mahmood abdullah %
% %
% e-Mail: jazamahmood@gmail.com %
% jaza.abdullah.univsul.edu.iq %
% %
% %
% %
% this code is an implementation of this paper work %
% %
% J. M. Abdullah and T. A. Rashid, "Fitness Dependent Optimizer:
function [dimensions,fitness,upper_bound, lower_bound] = Select_Functions(func)
k=30;
switch func
case 'cec01'
fitness = @cec01;
lower_bound= -8192;
upper_bound = 8192;
dimensions = 9;
case 'cec02'
fitness = @cec02;
lower_bound= -16384;
upper_bound = 16384;
dimensions = 16;
case 'cec03'
fitness = @cec03;
lower_bound= -4;
upper_bound = 4;
dimensions = 18;
case 'cec04'
fitness = @cec04;
lower_bound= -100;
upper_bound = 100;
dimensions = 10;
case 'cec05'
fitness = @cec05;
lower_bound= -100;
upper_bound = 100;
dimensions = 10;
case 'cec06'
fitness = @cec06;
lower_bound= -100;
upper_bound = 100;
dimensions = 10;
case 'cec07'
fitness = @cec07;
lower_bound= -100;
upper_bound = 100;
dimensions = 10;
case 'cec08'
fitness = @cec08;
lower_bound= -100;
upper_bound = 100;
dimensions = 10;
case 'cec09'
fitness = @cec09;
lower_bound= -100;
upper_bound = 100;
dimensions = 10;
case 'cec10'
fitness = @cec10;
lower_bound= -100;
upper_bound = 100;
dimensions = 10;
case 'F1'
fitness = @F1;
lower_bound=-100;
upper_bound=100;
dimensions=k;
case 'F2'
fitness = @F2;
lower_bound=-10;
upper_bound=10;
dimensions=k;
case 'F3'
fitness = @F3;
lower_bound=-100;
upper_bound=100;
dimensions=k;
case 'F4'
fitness = @F4;
lower_bound=-100;
upper_bound=100;
dimensions=k;
case 'F5'
fitness = @F5;
lower_bound=-30;
upper_bound=30;
dimensions=k;
case 'F6'
fitness = @F6;
lower_bound=-100;
upper_bound=100;
dimensions=k;
case 'F7'
fitness = @F7;
lower_bound=-1.28;
upper_bound=1.28;
dimensions=k;
case 'F8'
fitness = @F8;
lower_bound=-500;
upper_bound=500;
dimensions=k;
case 'F9'
fitness = @F9;
lower_bound=-5.12;
upper_bound=5.12;
dimensions=k;
case 'F10'
fitness = @F10;
lower_bound=-32;
upper_bound=32;
dimensions=k;
case 'F11'
fitness = @F11;
lower_bound=-600;
upper_bound=600;
dimensions=k;
case 'F12'
fitness = @F12;
lower_bound=-50;
upper_bound=50;
dimensions=k;
case 'F13'
fitness = @F13;
lower_bound=-50;
upper_bound=50;
dimensions=k;
end
end
% F1
function o = F1(x)
global NFE
NFE=NFE+1;
o=sum(x.^2);
end
% F2
function o = F2(x)
global NFE
NFE=NFE+1;
o=sum(abs(x))+prod(abs(x));
end
% F3
function o = F3(x)
global NFE
NFE=NFE+1;
dim=size(x,2);
o=0;
for i=1:dim
o=o+sum(x(1:i))^2;
end
end
% F4
function o = F4(x)
global NFE
NFE=NFE+1;
o=max(abs(x));
end
% F5
function o = F5(x)
global NFE
NFE=NFE+1;
dim=size(x,2);
o=sum(100*(x(2:dim)-(x(1:dim-1).^2)).^2+(x(1:dim-1)-1).^2);
end
% F6
function o = F6(x)
global NFE
NFE=NFE+1;
o=sum(abs((x+.5)).^2);
end
% F7
function o = F7(x)
global NFE
NFE=NFE+1;
dim=size(x,2);
o=sum([1:dim].*(x.^4))+rand;
end
% F8
function o = F8(x)
global NFE
NFE=NFE+1;
o=sum(-x.*sin(sqrt(abs(x))));
end
% F9
function o = F9(x)
global NFE
NFE=NFE+1;
dim=size(x,2);
o=sum(x.^2-10*cos(2*pi.*x))+10*dim;
end
% F10
function o = F10(x)
global NFE
NFE=NFE+1;
dim=size(x,2);
o=-20*exp(-.2*sqrt(sum(x.^2)/dim))-exp(sum(cos(2*pi.*x))/dim)+20+exp(1);
end
% F11
function o = F11(x)
global NFE
NFE=NFE+1;
dim=size(x,2);
o=sum(x.^2)/4000-prod(cos(x./sqrt([1:dim])))+1;
end
% F12
function o = F12(x)
global NFE
NFE=NFE+1;
dim=size(x,2);
o=(pi/dim)*(10*((sin(pi*(1+(x(1)+1)/4)))^2)+sum((((x(1:dim-1)+1)./4).^2).*...
(1+10.*((sin(pi.*(1+(x(2:dim)+1)./4)))).^2))+((x(dim)+1)/4)^2)+sum(Ufun(x,10,100,4));
end
% F13
function o = F13(x)
global NFE
NFE=NFE+1;
dim=size(x,2);
o=.1*((sin(3*pi*x(1)))^2+sum((x(1:dim-1)-1).^2.*(1+(sin(3.*pi.*x(2:dim))).^2))+...
((x(dim)-1)^2)*(1+(sin(2*pi*x(dim)))^2))+sum(Ufun(x,5,100,4));
end
function o=Ufun(x,a,k,m)
o=k.*((x-a).^m).*(x>a)+k.*((-x-a).^m).*(x<(-a));
end
function o = cec01(x)
global NFE
NFE=NFE+1;
dim =9;
p1 = 0.0;
p2 = 0.0;
p3 = 0.0;
d = 72.661;
u = 0.0;
v = 0.0;
wk = 0.0;
pk= 0.0;
m = 32*dim;
for i=1 : dim
u = u+ x(1,i) * (1.2)^(dim-i);
end
if u < d
p1 = (u-d)^2;
end
for i=1 : dim
v = v+ x(1,i) * (-1.2)^(dim-i);
end
if v < d
p2 = (v-d)^2;
end
for k=0 :m
for i=1 : dim
wk = wk+ x(1,i) * ((2*k/m)-1)^(dim-i);
end
if wk > d
pk = pk+ (wk-d)^2;
elseif wk < d
pk = pk +(wk+d)^2;
else
pk = pk +0.0;
end
end
p3 = pk;
o = p1 + p2 + p3;
end
function o = cec02(x)
global NFE
NFE=NFE+1;
n = sqrt(16);
W = 0.0;
I =0;
H = 0.0;
Z = 0.0;
for i=1:n
xi = x(1,i);
for k=1:n
if i == k
I =1;
else
I =0;
end
H = 1/(i+k-1);
Z = xi+(n*(k-1));
W = W + abs(H*Z-I);
end
end
o = W;
end
function o = cec03(x)
global NFE
NFE=NFE+1;
n = 18/3;
d = 0.0;
sum =0.0;
for i=1 :n-1
xi = x(1, 3*i-1);
for j=i+1: n
tmp=0.0;
xj = x(1, 3*j-1);
for k=0 :2
tmp = tmp + (xi+k-2-xj+k-2)^ 2;
end
d = d + tmp^3;
sum = sum + (1/ d^2 )- (2/d);
end
end
o = 12.7120622568+sum;
end
function o = cec04(x)
global NFE
NFE=NFE+1;
dim = 10;
sum =0.0;
shiftedMatrix = [4.3453613502650342e+01 -7.5117860955706732e+01 5.4110917436941946e+01 2.1893626834216349e+00 -3.3813797325740467e+00 -3.0849165372014589e+01 7.8077592550813023e+01 -6.9901998485392895e+01 3.7111456001695004e+01 5.2241020487733664e+01];
rotatedMatrix = [
8.8970810825119684e-01 1.9871231543356224e-01 3.5531377300377703e-01 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -2.0660353462835387e-0 0.0000000000000000e+00 0.0000000000000000e+00;
1.0419879983757413e-01 -6.6358499459221376e-01 4.5164451523757104e-01 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 5.8720932972857365e-01 0.0000000000000000e+00 0.0000000000000000e+00;
-4.3941933258454113e-01 3.4165627723133662e-01 8.1471256710105333e-01 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1.6255790164428213e-01 0.0000000000000000e+00 0.0000000000
- 1
- 2
前往页