%_________________________________________________________________________%
% Multi-Objective Ant Lion Optimizer (MALO) source codes demo %
% version 1.0 %
% %
% Developed in MATLAB R2011b(7.13) %
% %
% Author and programmer: Seyedali Mirjalili %
% %
% e-Mail: ali.mirjalili@gmail.com %
% seyedali.mirjalili@griffithuni.edu.au %
% %
% Homepage: http://www.alimirjalili.com %
% Paper: Mirjalili, Seyedali, Pradeep Jangir, and Shahrzad Saremi. %
% Multi-objective ant lion optimizer: a multi-objective optimization %
% algorithm for solving engineering problems." Applied Intelligence %
% (2016): 1-17, DOI: http://dx.doi.org/10.1007/s10489-016-0825-8 %
%_________________________________________________________________________%
% This function creates random walks
function [RWs]=Random_walk_around_antlion(Dim,max_iter,lb, ub,antlion,current_iter)
if size(lb,1) ==1 && size(lb,2)==1 %Check if the bounds are scalar
lb=ones(1,Dim)*lb;
ub=ones(1,Dim)*ub;
end
if size(lb,1) > size(lb,2) %Check if boundary vectors are horizontal or vertical
lb=lb';
ub=ub';
end
I=1; % I is the ratio in Equations (2.10) and (2.11)
if current_iter>max_iter/10
I=1+100*(current_iter/max_iter);
end
if current_iter>max_iter/2
I=1+1000*(current_iter/max_iter);
end
if current_iter>max_iter*(3/4)
I=1+10000*(current_iter/max_iter);
end
if current_iter>max_iter*(0.9)
I=1+100000*(current_iter/max_iter);
end
if current_iter>max_iter*(0.95)
I=1+1000000*(current_iter/max_iter);
end
% Dicrease boundaries to converge towards antlion
lb=lb/(I); % Equation (2.10) in the paper
ub=ub/(I); % Equation (2.11) in the paper
% Move the interval of [lb ub] around the antlion [lb+anlion ub+antlion]
if rand<0.5
lb=lb+antlion; % Equation (2.8) in the paper
else
lb=-lb+antlion;
end
if rand>=0.5
ub=ub+antlion; % Equation (2.9) in the paper
else
ub=-ub+antlion;
end
% This function creates n random walks and normalize accroding to lb and ub
% vectors
for i=1:Dim
X = [0 cumsum(2*(rand(max_iter,1)>0.5)-1)']; % Equation (2.1) in the paper
%[a b]--->[c d]
a=min(X);
b=max(X);
c=lb(i);
d=ub(i);
X_norm=((X-a).*(d-c))./(b-a)+c; % Equation (2.7) in the paper
RWs(:,i)=X_norm;
end