Matlab code for Bear Smell Search Optimization



function Convergence= bearSmellSearch(N,dim,lb,ub,maxiter,Fobj,thresh1,thresh2 )

% initialize population

bear_odour=initialization(N,dim,lb,ub);     % generate initial random population

bear_fitness=zeros(1,N);                    % Fitness

C1=zeros(N,dim);C2=zeros(N,dim);C3=zeros(N,dim);C4=zeros(N,dim);

POC=zeros(N,dim);               % probability odor component

POf=zeros(1,N);                 % Probability odor fitness                

DOC=zeros(N,dim);               % distance odor components

EOF=zeros(1,N);                 % expected odor fitness

%%

t=0;

Score=inf;

tic;

while t<maxiter

   for i=1:size(bear_odour,1)

       Flag4Upperbound=bear_odour(i,:)>ub;

       Flag4Lowerbound=bear_odour(i,:)<lb;

       bear_odour(i,:)=(bear_odour(i,:).*(~(Flag4Upperbound+Flag4Lowerbound)))+ub.*Flag4Upperbound+lb.*Flag4Lowerbound;

       bear_fitness(i)=Fobj(bear_odour(i,:));                      % evaluate fitness

       if min(bear_fitness)<Score

           Score=bear_fitness(i);

           best_odor=bear_odour(i,:);

       end

   end

  for i=1:size(bear_odour,1)

  for j=1:size(bear_odour,2)

       POC(i,j)=bear_odour(i,j)/max(bear_odour(i,:))+rand;         % probability odor component

       POf(i)=bear_fitness(i)/max(bear_fitness);                   % Probability odor fitness

       POF_global=min(POf);                                        % global solution

       DOC(i,j)=1-(sum(POC(i,j)-(POC(i,j).*POC(i,j))/sqrt(sum((POC(i,j)-(POC(i,j).*POC(i,j))))^2)));   % distance odor components

       EOF(i)=abs(POf(i)-POF_global)+rand;                         % expected odor fitness

       C1(i,j)=-EOF(i)*((2-(DOC(i,j)/thresh2)));                   % Coefficient C1

       C2(i,j)=-EOF(i)*((2-(DOC(i,j)/thresh1)));                   % Coefficient C2

       C3(i,j)=EOF(i)*((2-(DOC(i,j)/thresh2)));                    % Coefficient C3

       C4(i,j)=EOF(i)*((2-(DOC(i,j)/thresh1)));                    % Coefficient C4

  end

 

  end

for i4=1:N

   if DOC(i4)<= thresh2 && EOF(i4)<=thresh1

       bear_odour(i4,:)=C1(i4)*bear_odour(i4,:)-rand*(C2(i4))*(bear_odour(i4,:)-best_odor);

   else

       bear_odour(i4,:)=C3(i4)*bear_odour(i4,:)-rand*(C4(i4))*(bear_odour(i4,:)-best_odor);

   end

end

   t=t+1;

   Convergence(t)=Score;

%     [t Score];

   sprintf('Iteration number = %s , Best score is = %s',num2str(t),num2str(Score))

end

timec=toc;


Comments

Popular Posts