【优化求解】基于人工蜂群算法ABC求解最优目标matlab源码

244 阅读1分钟

1 简介

人工蜂群算法(Artificial Bee Colony Algorithm, 简称ABC算法)是一个由蜂群行为启发的算法,在2005年由Karaboga小组为优化代数问题而提出。

2 部分代码

clc;
clear;
close all;

%% Problem Definition

CostFunction=@(x) Sphere(x);        % Cost Function

nVar=5;             % Number of Decision Variables

VarSize=[1 nVar];   % Decision Variables Matrix Size

VarMin=-10;         % Decision Variables Lower Bound
VarMax10;         % Decision Variables Upper Bound

%% ABC Settings

MaxIt=200;              % Maximum Number of Iterations

nPop=100;               % Population Size (Colony Size)

nOnlooker=nPop;         % Number of Onlooker Bees

L=round(0.6*nVar*nPop); % Abandonment Limit Parameter (Trial Limit)

a=1;                    % Acceleration Coefficient Upper Bound

%% Initialization

% Empty Bee Structure
empty_bee.Position=[];
empty_bee.Cost=[];

% Initialize Population Array
pop=repmat(empty_bee,nPop,1);

% Initialize Best Solution Ever Found
BestSol.Cost=inf;

% Create Initial Population
for i=1:nPop
   pop(i).Position=unifrnd(VarMin,VarMax,VarSize);
   pop(i).Cost=CostFunction(pop(i).Position);
   if pop(i).Cost<=BestSol.Cost
       BestSol=pop(i);
   end
end

% Abandonment Counter
C=zeros(nPop,1);

% Array to Hold Best Cost Values
BestCost=zeros(MaxIt,1);

%% ABC Main Loop

for it=1:MaxIt
   
   % Recruited Bees
   for i=1:nPop
       
 
   end
   
   % Scout Bees
   for i=1:nPop
       if C(i)>=L
           pop(i).Position=unifrnd(VarMin,VarMax,VarSize);
           pop(i).Cost=CostFunction(pop(i).Position);
           C(i)=0;
       end
   end
   
   % Update Best Solution Ever Found
   for i=1:nPop
       if pop(i).Cost<=BestSol.Cost
           BestSol=pop(i);
       end
   end
   
   % Store Best Cost Ever Found
   BestCost(it)=BestSol.Cost;
   
   % Display Iteration Information
   disp(['Iteration ' num2str(it) ': Best Cost = ' num2str(BestCost(it))]);
   
end
   
%% Results

figure;
%plot(BestCost,'LineWidth',2);
semilogy(BestCost,'LineWidth',2);
xlabel('Iteration');
ylabel('Best Cost');
grid on;
img =gcf;  %获取当前画图的句柄
print(img, '-dpng', '-r600', './运行结果.png')         %即可得到对应格式和期望dpi的图像

3 仿真结果

4 参考文献

[1]刘三阳, 张平, 朱明敏. 基于局部搜索的人工蜂群算法[J]. 控制与决策, 2014, 000(001):123-128.

部分理论引用网络文献,若有侵权联系博主删除。

5 MATLAB代码与数据下载地址

见博客主页