main.
clear;clc;close all
Function_name='F6'; [lb,ub,dim,fobj]=fun_info(Function_name);
pop_num=100;
Max_iter=1000;
T = 10;
F_n = zeros(T,1);
for n = 1:T
[bestX_SCROA,fMin_SCROA,SCROA_curve]=SROA(60,40,Max_iter,5,dim,fobj,lb,ub);
Fival_compare(1,1)=fMin_SCROA;
F_n(n,:) = Fival_compare;
end
F_average = zeros(1,7);
for i = 1:1
F_average(1,i) = mean(F_n(:,i));
end
plot(F_n(:,1))
SROA.m
function [bestX,fMin,process_curve,process_X] =
SROA(Nreachable,Nvisible,NI,MF,dim,fitness,Xmin,Xmax)
Xmax = Xmax(end);
Xmin = Xmin(end);
X_r = (Xmax-Xmin);
RZR = 0.1*X_r*0.153.*ones(1,dim);
RZR = min(RZR,10);
VZR = RZR.*2;
Nop = (Nreachable+Nvisible);
%%
process_X = zeros(NI,dim);
loc_00 = zeros(Nop,dim);
RbestM0 = zeros(Nop,1);
for i = 1:dim
loc_00(:,i) = Xmin+rand(Nop,1).*(Xmax-Xmin);
end
loc_00 = max(loc_00,Xmin);
loc_00 = min(loc_00,Xmax);
for t = 1:Nop
RbestM0(t) = fitness(loc_00(t,:));
end
[~,s0] = min(RbestM0);
loc0 = loc_00(s0,:);
Gopt = loc0;
RZP0 = zeros(Nreachable,dim);
for t = 1:dim
for j = 1:Nreachable
r = round(rand(1,1));
Z1 = rand(1,1);
RZP0(j,t) = loc0(t)+(RZR(1,t))*(Z1*(-1)^r);
end
end
RZP0 = max(RZP0,Xmin);
RZP0 = min(RZP0,Xmax);
Rbest = zeros(1,Nreachable);
for i = 1:Nreachable
Rbest(i) = fitness(RZP0(i,:));
end
[~,k] = min(Rbest);
Rbest0 = RZP0(k,:);
VZP0 = zeros(Nvisible,dim);
for i=1:dim
for j=1:Nvisible
r = round(rand(1,2));
VZP0(j,i) = loc0(i)+(VZR(1,i)+(VZR(1,i)-RZR(1,i))/2)*(-1)^r(1,1)+((VZR(1,i)-
RZR(1,i))/2)*rand(1,1)*(-1)^r(1,2);
end
end
VZP0 = max(VZP0,Xmin);
VZP0 = min(VZP0,Xmax);
Vbest = zeros(1,Nvisible);
for i = 1:Nvisible
Vbest(i) = fitness(VZP0(i,:));
end
[~,k1] = min(Vbest);
Vbest0 = VZP0(k1,:);
nperseveration = 0;
Er = 1;
process_curve = zeros(1,NI);
for i = 1:NI
if (fitness(Rbest0) > fitness(Vbest0))
if (fitness(loc0) > fitness(Vbest0))
loci = Vbest0;
else
loci = loc0;
end
elseif (fitness(loc0) > fitness(Rbest0))
loci = Rbest0;
else
loci = loc0;
end
if (fitness(loci) < fitness(Gopt))
Gopt = loci;
end
if loci == loc0
nperseveration = nperseveration+1;
else
nperseveration = 0;
end
loc0 = loci;
if nperseveration == MF
Er = Er+1;
r_mf = rand(1,dim);
loc_01 = zeros(Nop,dim);
for t = 1:Nop
I=round(1+rand(1,1));
if (t==s0)
loc_01(t,:) = Xmin+(Xmax-Xmin).*rand(1,dim);%
else
for j = 1:dim
r_mf(1,j) = 4*r_mf(1,j)*(1-r_mf(1,j));
end
loc_01(t,:) = loc_00(t,:)+r_mf.*(Gopt-I.*loc_00(t,:));
end
loc_01(t,:) = max(loc_01(t,:),Xmin);
loc_01(t,:) = min(loc_01(t,:),Xmax);
F_P1 = fitness(loc_01(t,:));
if (F_P1<RbestM0(t))
RbestM0(t) = F_P1;
loc_00(t,:) = loc_01(t,:);
end
end
[~,k] = min(RbestM0);
loci = loc_00(k,:);
RZR = 0.1.*X_r*0.153.*ones(1,dim)./Er;
RZR = min(RZR,10);
RZR = max(RZR,0.05);
VZR = RZR.*2;
nperseveration = 0;
end
loco = zeros(MF,dim);
F_d = zeros(MF,1);
FGopt = fitness(Gopt);
for t = 1:dim
for j = 1:(MF)
loco(j,:) = Gopt;
loco(j,t) = Gopt(1,t)+(rand(1,1)*(Xmax-Xmin)*(-1)^(j))/(i);
loco(j,t) = max(loco(j,t),Xmin);
loco(j,t) = min(loco(j,t),Xmax);
F_d(j,1) = fitness(loco(j,:));
end
[~,ko] = min(F_d);
F_T(t,1) = F_d(ko,1);
L_T(t,:) = loco(ko,:);
end
dxt = Gopt;
for t = 1:dim
if (F_T(t,1)<FGopt)
dxt(1,t) = L_T(t,t);
end
end
Fdxt = fitness(dxt);
if (Fdxt<FGopt)
Gopt = dxt;
FGopt = Fdxt;
end
[~,k] = min(F_T);
if (F_T(k)<FGopt)
Gopt = L_T(k,:);
FGopt = F_T(k,1);
end
gX_2 = Gopt;
xi = randperm(Nop,1);
gX_2i = loc_00(xi,:);
FgX_2i = RbestM0(xi);
if (FGopt<FgX_2i)
dr = round(rand(1,1));
gX_2 = gX_2+rand(1,1).*(gX_2-gX_2i).*(-1)^(dr);
else
dr = round(rand(1,1));
gX_2 = gX_2+rand(1,1).*(gX_2i-gX_2).*(-1)^(dr);
end
gX_2 = max(gX_2,Xmin);
gX_2 = min(gX_2,Xmax);
FgX_2 = fitness(gX_2);
if (FgX_2<FGopt)
Gopt = gX_2;
end
RZPi0 = zeros(Nreachable,dim);
Rbest_0 = zeros(Nreachable,1);
for t = 1:dim
for j = 1:Nreachable
Ldu = j/Nreachable;
n_t = rand(1,1);
RZPi0(j,t) = loci(t)+n_t*Ldu*RZR(1,t);
end
end
RZPi0 = max(RZPi0,Xmin);
RZPi0 = min(RZPi0,Xmax);
for t = 1:Nreachable
Rbest_0(t) = fitness(RZPi0(t,:));
end
[~,k0] = min(Rbest_0);
Rbest0 = RZPi0(k0,:);
VZPi = zeros(Nvisible,dim);
Vbest1 = zeros(1,Nvisible);
ab_0 = rand(Nvisible,dim);
for t=1:dim
for j=1:Nvisible
r = round(rand(1,1));
R = round(rand(1,1));
VZPi(j,t) = loci(t)+(RZR(1,t)+(VZR(1,t)-RZR(1,t))/2)*(-1)^r+((VZR(1,t)-
RZR(1,t))/2)*(ab_0(j,t))*(-1)^R;
end
end
VZPi = max(VZPi,Xmin);
VZPi = min(VZPi,Xmax);
for t = 1:Nvisible
Vbest1(t) = fitness(VZPi(t,:));
end
[~,k1] = min(Vbest1);
Vbest0 = VZPi(k1,:);
process_curve(1,i) = fitness(Gopt);
process_X(i,:) = Gopt;
end
Fmin = fitness(Gopt);
bestX = Gopt;
fMin = Fmin;
end
fun_info.m
function [lowerbound,upperbound,dimension,fitness] = fun_info(F)
switch F
case 'F1'
fitness = @F1;
lowerbound=-100;
upperbound=100;
dimension=30;
case 'F2'
fitness = @F2;
lowerbound=-10;
upperbound=10;
dimension=30;
case 'F3'
fitness = @F3;
lowerbound=-5.12;
upperbound=5.12;
dimension=30;
case 'F4'
fitness = @F4;
lowerbound=-32;
upperbound=32;
dimension=30;
case 'F5'
fitness = @F5;
lowerbound=-65.536;
upperbound=65.536;
dimension=2;
case 'F6'
fitness = @F6;
lowerbound=0;
upperbound=10;
dimension=4;
end
end
% F1
function R = F1(x)
R=sum(x.^2);
end
% F2
function R = F2(x)
R=sum(abs(x))+prod(abs(x));
end
% F3
function R = F3(x)
dimension=size(x,2);
R=sum(x.^2-10*cos(2*pi.*x))+10*dimension;
end
% F4
function R = F4(x)
dimension=size(x,2);
R=-20*exp(-.2*sqrt(sum(x.^2)/dimension))-exp(sum(cos(2*pi.*x))/dimension)+20+exp(1);
end
% F5
function R = F5(x)
aS=[-32 -16 0 16 32 -32 -16 0 16 32 -32 -16 0 16 32 -32 -16 0 16 32 -32 -16 0 16 32;,...
-32 -32 -32 -32 -32 -16 -16 -16 -16 -16 0 0 0 0 0 16 16 16 16 16 32 32 32 32 32];
for j=1:25
bS(j)=sum((x'-aS(:,j)).^6);
end
R=(1/500+sum(1./([1:25]+bS))).^(-1);
end
% F6
function R = F6(x)
aSH=[4 4 4 4;1 1 1 1;8 8 8 8;6 6 6 6;3 7 3 7;2 9 2 9;5 5 3 3;8 1 8 1;6 2 6 2;7 3.6 7 3.6];
cSH=[.1 .2 .2 .4 .4 .6 .3 .7 .5 .5];
R=0;
for i=1:7
R=R-((x-aSH(i,:))*(x-aSH(i,:))'+cSH(i))^(-1);
end
end