• 大小: 5KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2021-05-29
  • 语言: Matlab
  • 标签: 细菌  觅食  算法  

资源简介

细菌觅食算法(matlab)

资源截图

代码片段和文件信息

%% Bacterial foraging
% Animiation of bacteria movement to get the global minimum solution every chemotactic
%
% Author: Wael Mansour (wael192@yahoo.com)
%
% MSc Student Electrical Enginering Dept
% Faculty of Engineering Cairo University Egypt


%%
%Initialization
clear all  
clc
p=2;                         % dimension of search space
s=26;                        % The number of bacteria
Nc=50;                       % Number of chemotactic steps
Ns=4;                        % Limits the length of a swim
Nre=4;                       % The number of reproduction steps
Ned=2;                       % The number of elimination-dispersal events
Sr=s/2;                      % The number of bacteria reproductions (splits) per generation
Ped=0.25;                    % The probabilty that each bacteria will be eliminated/dispersed
c(:1)=0.05*ones(s1);       % the run length 
for m=1:s                    % the initital posistions
    P(1:111)= 50*rand(s1)‘;
    P(2:111)= .2*rand(s1)‘;
   %P(3:111)= .2*rand(s1)‘;
end                                                                 
    
%%
%Main loop
   

%Elimination and dispersal loop
for ell=1:Ned
   

%Reprodution loop


    for K=1:Nre   

%  swim/tumble(chemotaxis)loop  

        for j=1:Nc
           
            for i=1:s       
                J(ijKell)=Live_fn(P(:ijKell));        

% Tumble

                       
                Jlast=J(ijKell);  
                Delta(:i)=(2*round(rand(p1))-1).*rand(p1);                     
                P(:ij+1Kell)=P(:ijKell)+c(iK)*Delta(:i)/sqrt(Delta(:i)‘*Delta(:i)); % This adds a unit vector in the random direction           
 
% Swim (for bacteria that seem to be headed in the right direction)    
               
                J(ij+1Kell)=Live_fn(P(:ij+1Kell)); 
                m=0;         % Initialize counter for swim length
                    while m                          m=m+1;
                          if J(ij+1Kell)                             Jlast=J(ij+1Kell);   
                             P(:ij+1Kell)=P(:ij+1Kell)+c(iK)*Delta(:i)/sqrt(Delta(:i)‘*Delta(:i)) ; 
                             J(ij+1Kell)=Live_fn(P(:ij+1Kell)); 
                          else     

评论

共有 条评论