gusucode.com > Toolbox_all_algorithms > Toolbox_all_algorithms/ALO/ALO.m
%___________________________________________________________________% % Ant Lion Optimizer (ALO) 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 % % % % Main paper: % % % % S. Mirjalili, The Ant Lion Optimizer % % Advances in Engineering Software , in press,2015 % % DOI: http://dx.doi.org/10.1016/j.advengsoft.2015.01.010 % % % %___________________________________________________________________% % You can simply define your cost in a seperate file and load its handle to fobj % The initial parameters that you need are: %__________________________________________ % fobj = @YourCostFunction % dim = number of your variables % Max_iteration = maximum number of generations % SearchAgents_no = number of search agents % lb=[lb1,lb2,...,lbn] where lbn is the lower bound of variable n % ub=[ub1,ub2,...,ubn] where ubn is the upper bound of variable n % If all the variables have equal lower bound you can just % define lb and ub as two single number numbers % To run ALO: [Best_score,Best_pos,cg_curve]=ALO(SearchAgents_no,Max_iteration,lb,ub,dim,fobj) function [Elite_antlion_fitness,Elite_antlion_position,Convergence_curve]=ALO(N,Max_iter,lb,ub,dim,fobj,handles) % Initialize the positions of antlions and ants antlion_position=initialization(N,dim,ub,lb); ant_position=initialization(N,dim,ub,lb); % Initialize variables to save the position of elite, sorted antlions, % convergence curve, antlions fitness, and ants fitness Sorted_antlions=zeros(N,dim); Elite_antlion_position=zeros(1,dim); Elite_antlion_fitness=inf; Convergence_curve=zeros(1,Max_iter); antlions_fitness=zeros(1,N); ants_fitness=zeros(1,N); % Calculate the fitness of initial antlions and sort them for i=1:size(antlion_position,1) antlions_fitness(1,i)=fobj(antlion_position(i,:)); end [sorted_antlion_fitness,sorted_indexes]=sort(antlions_fitness); for newindex=1:N Sorted_antlions(newindex,:)=antlion_position(sorted_indexes(newindex),:); end Elite_antlion_position=Sorted_antlions(1,:); Elite_antlion_fitness=sorted_antlion_fitness(1); % Main loop start from the second iteration since the first iteration % was dedicated to calculating the fitness of antlions Current_iter=2; while Current_iter<Max_iter+1 % This for loop simulate random walks for i=1:size(ant_position,1) % Select ant lions based on their fitness (the better anlion the higher chance of catching ant) Rolette_index=RouletteWheelSelection(1./sorted_antlion_fitness); if Rolette_index==-1 Rolette_index=1; end % RA is the random walk around the selected antlion by rolette wheel RA=Random_walk_around_antlion(dim,Max_iter,lb,ub, Sorted_antlions(Rolette_index,:),Current_iter); % RA is the random walk around the elite (best antlion so far) [RE]=Random_walk_around_antlion(dim,Max_iter,lb,ub, Elite_antlion_position(1,:),Current_iter); ant_position(i,:)= (RA(Current_iter,:)+RE(Current_iter,:))/2; % Equation (2.13) in the paper end for i=1:size(ant_position,1) % Boundar checking (bring back the antlions of ants inside search % space if they go beyoud the boundaries Flag4ub=ant_position(i,:)>ub; Flag4lb=ant_position(i,:)<lb; ant_position(i,:)=(ant_position(i,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb; ants_fitness(1,i)=fobj(ant_position(i,:)); All_fitness(1,i)=ants_fitness(1,i); end % Update antlion positions and fitnesses based of the ants (if an ant % becomes fitter than an antlion we assume it was cought by the antlion % and the antlion update goes to its position to build the trap) double_population=[Sorted_antlions;ant_position]; double_fitness=[sorted_antlion_fitness ants_fitness]; [double_fitness_sorted I]=sort(double_fitness); double_sorted_population=double_population(I,:); antlions_fitness=double_fitness_sorted(1:N); Sorted_antlions=double_sorted_population(1:N,:); % Update the position of elite if any antlinons becomes fitter than it if antlions_fitness(1)<Elite_antlion_fitness Elite_antlion_position=Sorted_antlions(1,:); Elite_antlion_fitness=antlions_fitness(1); end % Keep the elite in the population Sorted_antlions(1,:)=Elite_antlion_position; antlions_fitness(1)=Elite_antlion_fitness; % Update the convergence curve Convergence_curve(Current_iter)=Elite_antlion_fitness; if Current_iter>2 line([Current_iter-1 Current_iter], [Convergence_curve(Current_iter-1) Convergence_curve(Current_iter)],'Color',[0 0.4470 0.7410]) xlabel('Iteration'); ylabel('Best score obtained so far'); drawnow end results = get(handles.uitable1,'data'); results{2,1}=Current_iter; results{2,2}=Elite_antlion_fitness; set(handles.uitable1,'data',results); Current_iter=Current_iter+1; end