[go: up one dir, main page]

0% found this document useful (0 votes)
6 views6 pages

Matlab Total1 Code

The document contains MATLAB code for a function named 'SROA' which implements an optimization algorithm. It includes functions for various benchmark optimization problems (F1 to F6) and sets up parameters for the algorithm's execution. The main script initializes parameters, runs the optimization multiple times, and plots the results.

Uploaded by

diemlanngoc
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
6 views6 pages

Matlab Total1 Code

The document contains MATLAB code for a function named 'SROA' which implements an optimization algorithm. It includes functions for various benchmark optimization problems (F1 to F6) and sets up parameters for the algorithm's execution. The main script initializes parameters, runs the optimization multiple times, and plots the results.

Uploaded by

diemlanngoc
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 6

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

You might also like