% f = [f1 f2 ... fm]
% https://sop.tik.ee.ethz.ch/download/supplementary/testproblems/
function Units = Ab_fun(Units)
global x_num fun f_num NP
Units = Units(:, 1:x_num);
for idx = 1:NP
x = Units(idx, 1:x_num);
% --------------------ZDT1--------------------
if strcmp(fun, 'ZDT1')
f = [];
f(1) = x(1);
sum = 0;
for i = 2:x_num
sum = sum + x(i);
end
g = 1 + 9 * (sum / (x_num - 1));
f(2) = g * (1 - (f(1) / g)^0.5);
f = f(1:f_num);
% --------------------ZDT2--------------------
elseif strcmp(fun, 'ZDT2')
f = [];
f(1) = x(1);
sum = 0;
for i = 2:x_num
sum = sum + x(i);
end
g = 1 + 9 * (sum / (x_num - 1));
f(2) = g * (1 - (f(1) / g)^2);
% --------------------ZDT3--------------------
elseif strcmp(fun, 'ZDT3')
f = [];
f(1) = x(1);
sum = 0;
for i = 2:x_num
sum = sum + x(i);
end
g = 1 + 9 * (sum / (x_num - 1));
f(2) = g * (1 - (f(1) / g)^0.5 - (f(1)/g) * sin(10 * pi * f(1)));
% --------------------ZDT4--------------------
elseif strcmp(fun, 'ZDT4')
f = [];
f(1) = x(1);
sum = 0;
for i = 2:x_num
sum = sum + (x(i)^2 - 10 * cos(4 * pi * x(i)));
end
g = 1 + 9 * 10 + sum;
f(2) = g * (1 - (f(1) / g)^0.5);
% --------------------ZDT6--------------------
elseif strcmp(fun, 'ZDT6')
f = [];
f(1) = 1 - (exp(-4 * x(1))) * ((sin(6 * pi * x(1)))^6);
sum = 0;
for i = 2:x_num
sum = sum + x(i);
end
g = 1 + 9 * ((sum / (x_num - 1))^0.25);
f(2) = g * (1 - (f(1) / g)^2);
% --------------------------------------------
% --------------------DTLZ1--------------------
elseif strcmp(fun,'DTLZ1')
f = [];
sum = 0;
for i = 3:x_num
sum = sum + ((x(i) - 0.5)^2 - cos(20 * pi * (x(i) - 0.5)));
end
g = 100 * (x_num-2) + 100 * sum;
f(1) = (1 + g) * x(1) * x(2);
f(2) = (1 + g) * x(1) * (1 - x(2));
f(3) = (1 + g) * (1 - x(1));
% --------------------DTLZ2--------------------
elseif strcmp(fun,'DTLZ2')
f = [];
sum = 0;
for i = 3:x_num
sum = sum + (x(i))^2;
end
g = sum;
f(1) = (1 + g) * cos(x(1) * pi * 0.5) * cos(x(2) * pi * 0.5);
f(2) = (1 + g) * cos(x(1) * pi * 0.5) * sin(x(2) * pi * 0.5);
f(3) = (1 + g) * sin(x(1) * pi * 0.5);
end
fits(idx, :) = f;
end
Units = [Units, fits];
end
评论0