人工蜂群算法

原文:http://blog.csdn.net/fashionxu/article/details/7823290

前言

人工蜂群算法(Artifical Bee Colony)是一种元启发式智能算法,由Karaboga in 2005在2005年引入,用来求解数值优化问题。它受启发于蜜蜂的觅食行为。这种算法主要基于 Tereshko 和Loengarov (2005) 提出的蜂群觅食行为模型。这个模型包含了三种核心元素:雇佣蜂(employed bees),非雇佣蜂(unemployed bees)和食物源(food sources)。前两者负责搜寻蜂巢附近的富源(rich food sources)。这种模型也定义了两种指引模式:富源会反馈会积极信号,从而引导更多的蜜蜂来采蜜;贫源(poor food sources)会反馈消极信号,会导致放弃这个食物源。这两种行为是自组织的和群智能的。

在ABC中,把待求解的问题的解看做是人工食物,食物越充足(rich),表示解的质量越好,然后一群人工蜜蜂会去搜寻富源,从而找到一个相关问题的比较好的解。为了应用ABC,待求解的问题首先要转化为最优化问题,也就是找到一组参数向量,使得目标函数最小化。人工蜂群就会随机初始化一些解,然后通过迭代,使用邻居搜索的策略来向更好的解靠近,并放弃差的解,逐步提高解的质量。

全局优化问题

一个全局优化问题可以定义为寻找参数向量,使得目标函数最小化,如下式所示:

              (1)

这个函数会带有如下的等式和/或不等式约束:

                    (2)

subject to:

for                   (3)

for                  (4)

定义了一个上的n维的搜索空间S。变量取值范围被限定在起上下限中,如式(2)所示。这也是一个带约束的优化问题。如果,则变为一个无约束优化问题。

人工蜂群元启发式算法

在ABC中,人工蜂群由三种蜜蜂组成:雇佣蜂(employed bees)同特定的食物源相关联;观察蜂(onlooker bees)观察蜂巢内雇佣蜂的舞蹈以决定选择某个食物源;侦察蜂(scout bees)会随机的搜索食物。侦察蜂和观察蜂又叫做未雇佣蜂。算法初始的时候,所有的食物源会被侦察蜂搜索到,然后,食物源会被雇佣蜂和观察蜂所开发利用。持续性的开发利用会使得食物源很快被消耗尽,于是消耗尽食物源的雇佣蜂会转变成为侦察蜂。在ABC中,食物源的位置代表了问题的一个可行解,食物源处的蜂蜜的数量代表了相关问题解的质量。雇佣蜂的数量等于食物源的数量,因为每只雇佣蜂会关联到一个且仅一个食物源。

通用ABC算法框架如下所示:

 

初始化时期;

Repeat

雇佣蜂时期;

观察蜂时期;

侦察蜂时期;

记录找到的最好解;

Util (达到最大循环次数或者达到cpu时间)

 

初始化时期

利用侦察蜂初始化所有代表食物源的向量,SN是种群的大小,设定控制参数。由于每个食物源都是待优化问题的解向量,因此每个都含有n个变量。这些向量将要被优化,从而使得目标函数最小化。可以利用下式进行初始化:

                       (5)

其中是参数取值的上下限。

雇佣蜂时期

雇佣蜂会依据其记忆中的食物源的位置进行邻居搜索,找食物源附近的更好的食物源。当雇佣蜂找到一个食物源之后,会评估其适应值。此处,它们可以采用下述公式来确定邻居食物源:

                     (6)

其中是一个随机选择的食物源,i是随机选择的一个位置索引,是一个[-a,a]之间的一个随机数。当产生新的食物源之后,会计算出它的适应值,并且在之间应用贪心法做出选择。

解的适应值,可以通过下式转化为最小化问题来求解:

                (7)

其中是待解问题的目标函数值。

观察蜂时期

非雇佣蜂由两部分群体组成:观察蜂和侦察蜂。雇佣蜂会向在蜂巢中等待的观察蜂来分享它们获得的食物源信息。观察蜂会根据这些信息进行一种随机的选择。为此,需要一种基于适应值的选择方法,比如轮盘赌。被选中的概率可以用下述表达式计算:

                           (8)

当食物源被一只观察蜂选中后,利用(6)式产生邻居食物源,再计算其适应值。在雇佣蜂时期,在之间用贪心法来做出选择。因此,更多的观察蜂会选择富源并反馈回积极信号。

侦察蜂时期

未雇佣蜂随机搜索食物源,称为侦察蜂。如果雇佣蜂通过实现给定的尝试次数之后,仍然未能提高解的质量,则雇佣蜂就变成为侦察蜂,其拥有的解就会被放弃。(尝试次数是由ABC使用者事先给定的,称为“limit”或者“放弃阈值”(abandonment criteria))转换后的侦察蜂开始随机搜索新的解,比如,如果被放弃了,那么原来拥有的雇佣蜂就会利用(5)式来产生新的解。因此那些随机产生的贫源或者近期形成的贫源就会被放弃,产生消极的信号,以来平衡积极的信号。

ABC算法总结起来,有以下几点:

1)      根据蜜蜂的觅食行为而得到;

2)      是全局优化算法;

3)      为了数值优化而设计;

4)      也可以用来求解组合优化问题;

5)      可以用于有约束的和无约束的优化问题;

6)      只使用了三个参数(种群数量,最大循环次数以及阈值),这些参数是用户事先确定的;

7)      非常的简单,具有柔性和鲁棒性。

人工蜂群算法源代码的获取

人工蜂群算法的源代码可以从下面两个地方获取:

1.http://mf.erciyes.edu.tr/abc/index.htm

这里面包含了JAVA、C、Matlab的源代码。我看过其JAVA的代码,感觉仅仅是利用了JAVA语言,没有用到多少面向对象的东西,所以如果按照http://blog.csdn.net/fashionxu/article/details/7823290  里面介绍的算法流程来看代码,还需要下点功夫琢磨琢磨。此处的源代码侧重于数值优化。


        2.http://msdn.microsoft.com/zh-cn/magazine/gg983491.aspx

此处的源代码侧重求解组合优化问题。这里用的是TSP问题。



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值