人工蜂群算法(Artifical Bee Colony)
最近学习了人工蜂群算法,做总结如下。karaboga于2005年提出,是一种基于群智能的全局优化算法。属于群智能算法的一种。整个算法分为雇佣蜂、观察蜂、侦查蜂三种操作。目标是寻找花蜜量最大的蜜源。
雇佣蜂:利用先前的蜜源信息寻找新的蜜源并与观察蜂分享蜜源信息;
观察蜂:在蜂房中等待并依据雇佣蜂分享的信息寻找新的蜜源;
侦查蜂:寻找一个新的有价值的蜜源,它们在蜂房附近随机的寻找蜜源。
雇佣蜂根据,
更新蜜源信息,同时确定蜜源花蜜量;观察蜂根据雇佣蜂提供的信息,采用一定的适应函数,计算每个蜜源的概率,如公式1所示(SN代表雇佣蜂的数量),然后采用轮盘赌选择一个蜜源。根据
,
更新蜜源信息,同时确定蜜源的花蜜量。侦查蜂是用来判断某一个蜜源在指定步骤内是否提高,若没有提高,则丢弃该蜜源,重新初始化一个蜜源再次搜索。
算法流程:
- 问题定义;
- 初始化;
- 重复以下过程:
- 将雇佣蜂与蜜源一一对应,根据
更新蜜源信息,同 时确定蜜源的花蜜量;
- 观察蜂根据雇佣蜂所提供的信息采用一定的选择策略(每只观察蜂依据概率,采用轮盘赌)选择蜜源,根据 更新蜜源信息,同时确定蜜源的花蜜量;
- 确定侦查蜂,并根据
寻找新的蜜源;
- 记忆目前为止找到的最好的蜜源;
- 将雇佣蜂与蜜源一一对应,根据
- 判断终止条件是否成立;
以标准ABC算法为例:https://www.mathworks.com/matlabcentral/fileexchange/52966-artificial-bee-colony-abc-in-matlab
问题定义:随机生成(-10 10)之间的5个数,使5个数的平方和最小。
算法中用到的函数如下所示:
CostFunction=@(x) Sphere(x):函数句柄,未知数是x,相当于建立了一个函数文件
round():四舍五入取整
inf:无穷大量
unifrnd(-10,10,[1 5]):产生均匀分布的随机数,产生一个1*5的随机数矩阵,其值在-10到10之间均匀分布
numel(A):返回数组A中的元素个数
randi([1 10]):生成一个1到10之间的伪随机整数
k=[1:i-1 i+1:10]:生成不包括i的1到10之间的数
mean([Pop.Cost]):求向量的均值
disp():显示文本或数组
num2str():把数值转换成字符串,转换后可以用disp输出
r=rand:随机产生0-1之间的整数
cumsum(A):A是向量,返回一个向量,该向量中第m行元素是A中第1行到第m行的所有元素的累加和
find(r<=C,1,’first’):返回满足r<=C的第一个元素在C中的位置
% 随机生成(-10 10)之间的5个数,使5个数的平方和最小
clc;
clear;
close all;
% 问题定义
CostFunction=@(x) Sphere(x);
nVar=5;
VarSize=[1 5];
VarMin=-10;
VarMax=10;
% ABC参数定义
MaxIt=200; % 种群迭代次数
nPop=100; % 雇佣蜂数量
nOnlooker=nPop; %观察蜂数量
L=round(0.6*nVar*nPop); %蜜源试验限制,侦查蜂判断
a=1; % 加速系数的最大值
%% 初始化时期
empty_bee.Position=[];
empty_bee.Cost=[]; % 蜜源
pop=repmat(empty_bee,nPop,1);
BestSol.Cost=inf;
for i=1:nPoppop(i).Position=unifrnd(VarMin,VarMax,VarSize);pop(i).Cost=CostFunction(pop(i).Position);if pop(i).Cost<BestSol.CostBestSol=pop(i)end
end
C=zeros(nPop,1); % 用来判断蜜源的试验限制
BestCost=zeros(MaxIt,1); %用来记录迄今为止最好的蜜源for it=1:MaxIt% 雇佣蜂时期for i=1:nPopK=[1:i-1 i+1:nPop];k=K(randi([1 numel(K)]));phi=a*unifrnd(-1,1,VarSize); % 加速系数newbee.Position=pop(i).Position+phi.*(pop(i).Position-pop(k).Position);newbee.Cost=CostFunction(newbee.Position);if newbee.Cost<=pop(i).Costpop(i)=newbee;elseC(i)=C(i)+1;endendF=zeros(nPop,1);MeanCost=mean([pop.Cost]);for i=1:nPopF(i)=exp(-pop(i).Cost/MeanCost); % 适应函数endP=F/sum(F);% 观察蜂时期for m=1:nOnlookeri=RouletteWheelSelection(P); % 采用轮盘赌随机选择一个蜜源K=[1:i-1 i+1:nPop];k=K(randi([1 numel(K)]));phi=a*unifrnd(-1,1,VarSize);newbee.Position=pop(i).Position+phi.*(pop(i).Position-pop(k).Position);newbee.Cost=CostFunction(newbee.Position);if newbee.Cost<=pop(i).Costpop(i)=newbee;elseC(i)=C(i)+1;endend% 侦查蜂for i=1:nPopif C(i)>=L % 判断蜜源是否到达试验限制pop(i).Position=unifrnd(VarMin,VarMax,VarSize);pop(i).Cost=CostFunction(pop(i).Position);C(i)=0;endendfor i=1:nPopif pop(i).Cost<=BestSol.CostBestSol=pop(i); %寻找最佳蜜源endendBestCost(it)=BestSol.Cost; % 存储最佳蜜源disp(['Iteration ' num2str(it) ': Best Cost= ' num2str(BestCost(it))]);
endfigure;
semilogy(BestCost,'lineWidth',2)
xlabel('Iteration');
ylabel('Best Cost');
grid on;% 代价函数
function z=Sphere(x)z=sum(x.^2);
end% 轮盘赌算法
function i=RouletteWheelSelection(P)r=rand; C=cumsum(P); i=find(r<=C,1,'first');
end
人工蜂群算法(Artifical Bee Colony)相关推荐
- 人工蜂群算法的最小搜索模型_【优化求解】人工蜂群ABC算法
一.人工蜂群算法的介绍 人工蜂群算法(Artificial Bee Colony, ABC)是由Karaboga于2005年提出的一种新颖的基于群智能的全局优化算法,其直观背景来源于蜂群的采蜜行为,蜜 ...
- 人工蜂群算法求解TSP问题
人工蜂群算法求解TSP问题 [标签] ABC TSP Matlab data:2018-10-19 author:怡宝2号 [总起]利用人工蜂群算法(Artificial Bee Colony Alg ...
- 优化算法—人工蜂群算法(ABC)
一.人工蜂群算法的介绍 人工蜂群算法(Artificial Bee Colony, ABC)是由Karaboga于2005年提出的一种新颖的基于群智能的全局优化算法,其直观背景来源于蜂群的采蜜 ...
- 【ABC算法】人工蜂群算法原理及代码
一.人工蜂群算法的介绍 人工蜂群算法(Artificial Bee Colony, ABC)是由Karaboga于2005年提出的一种新颖的基于群智能的全局优化算法,其直观背景来源于蜂群的采蜜 ...
- 优化算法——人工蜂群算法(ABC)
一.人工蜂群算法的介绍 人工蜂群算法(Artificial Bee Colony, ABC)是由Karaboga于2005年提出的一种新颖的基于群智能的全局优化算法,其直观背景来源于蜂群的采蜜 ...
- 五、python实现人工蜂群算法(简单明了版)
文章目录 一.概述 二.算法原理 三.python实现 一.概述 人工蜂群算法(Artificial Bee Colony Algorithm, 简称ABC算法)是一个由蜂群行为启发的算法,在20 ...
- [算法学习]模拟退火算法(SA)、遗传算法(GA)、布谷鸟算法(CS)、人工蜂群算法(ABC)学习笔记---附MATLAB注释代码
目录 1.模拟退火算法(Simulated Annealing,SA) 1.1 本质: 1.2 算法思想 1.3 SA流程图 1.4 模拟退火过程 1.5 SA解决TSP问题 1.6 SA改进方向 1 ...
- 【智能优化算法】基于人工蜂群算法求解多目标优化问题附matlab代码
1 简介 人工蜂群算法(Artificial Bee Colony Algorithm, 简称ABC算法)是一个由蜂群行为启发的算法,在2005年由Karaboga小组为优化代数问题而提出. 2 部 ...
- 【优化覆盖】基于matlab人工蜂群算法求解无线网络传感覆盖优化问题【含Matlab源码 1097期】
⛄一.人工蜂群算法求解无线网络传感覆盖优化问题简介 1 WSN覆盖模型 1.1 问题描述 在WSN中, 要实现较高的无线网络传感器节点覆盖率从而减少监测盲点的出现, 就必须加大无线网络传感器节点的分布 ...
- 基于改进人工蜂群算法的K均值聚类算法(附MATLAB版源代码)
其实一直以来也没有准备在园子里发这样的文章,相对来说,算法改进放在园子里还是会稍稍显得格格不入.但是最近邮箱收到的几封邮件让我觉得有必要通过我的博客把过去做过的东西分享出去更给更多需要的人.从论文刊登 ...
最新文章
- LeetCode简单题之设计停车系统
- angular2 学习笔记 ( Rxjs, Promise, Async/Await 的区别 )
- Mysql 根据一个表数据更新另外一个表
- Apache优化配置——工作模式
- ruby File类
- parents()和parent()
- 技术的不断革新也有负面影响
- 【29.70%】【codeforces 723D】Lakes in Berland
- ubunto用户切换
- 5 交换机-direct (路由)
- c++ static关键字的作用
- 音视频之使用sonic.cpp实现音频倍速播放功能
- BugkuCTF-MISC题宽带信息泄露
- js中普通函数与函数对象
- Image Pyramids
- python怎么做一个动态烟花_简单烟花效果.py python firework demo
- 系统篇: fstab 文件详解
- android虚拟pdf打印机,pdf虚拟打印机(PDF-XChange Lite Printer)
- PHP利用qq邮箱发邮件
- 从高盛的技术“开源”看金融业软件发展未来