蚁群算法思想论文:蚁群算法的0-1背包问题求解研究

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

蚁群算法思想论文:蚁群算法的0-1背包问题求解研究摘要:提出解决背包问题的蚁群算法思想及求解0-1背包问题问题描述,给出了改进常规的蚁群算法的方法。

关键词:

背包问题,蚁群算法,问题设计,算法改进

1 问题描述

0/1背包问题是指有不同价值、不同重量的物品n件,求从这n 件物品中选取一部分物品且对每一物品,要么选,要么不选,满足被选物品的总重量不超过背包指定的限制重量且达到被选物品的价值总和最大的问题。如果所有物品的重量之和小于背包的容量,则问题极其简单,所得利益也就是所有物品的价值之和。

2 蚁群算法的思想

蚁群算法是模仿真实的蚁群行为而提出的一种模拟进化算法.蚂蚁之间是通过一种称为信息素(Pheromone)的物质传递信息的,蚂蚁在运动过程中能够在经过的路径上留下该种物质,而且能够感知这种物质的存在及其强度,并以此指导自己的运动方向.因此,由大量蚂蚁组成的集体行为便表现出一种信息正反馈现象:某一条路径上走过的蚂蚁越多,该路径上留下的信息素就越多,则后来者选择该路径的概率就越大.蚂蚁个体之间就是通过这种信息素的交流,搜索到一条从蚁巢到食物源的最短路径.

3 利用蚁群算法求解0-1背包问题设计

设有n个城市,d,(i,J=l,2,…,n)表示城市i和J间的距离,t.ij(t)表示在t时刻城市i和j之间的信息量,以此来模拟实际蚂蚁的分泌物。设共有m只蚂蚁,用P.ij k表示在t时刻蚂蚁k由城市i转移到城市J的概率,则

Pk.ij k(t)由城市i转移到城市J的概率,则.ij (t).ij(t)∑r∈allowedk.ir(t).ir(t)j∈allowdk

0 otherwise

其中,allowedk表示蚂蚁k下一步允许走过的城市的集合,表示路径上的信息量对蚂蚁选择路径所起的作用大小,η,为由城市i转移到城市j的期望程度,例如,可以取η.ij=1/d.ij。β表示η.ij的作用。当a=0时,算法就是传统的贪心算法;而当p=O时,就成了纯粹的正反馈的启发式算法。经过n个时刻,蚂蚁走完所有的城市,完成一次循环。每只蚂蚁所走过的路径就是一个解。此时,要根据式(3)对各路径上的信息量作更新:

τ.ij(t+1)=(1-ρ)•τ.ij+Δτ.ij(2)

其中p∈(0,I),表示信息量r.ij随时间的推移而衰减的程度。信息增量Δτ.i可表示为

Δτ.ij=∑mk=1k.ij

其中Δij k表示蚂蚁k在本次循环中在城市i和之间留下的信息量,它的计算公式根据计算模型而定,例如在最常用的ant circle

system模型中.

蚂蚁k在本次循环中经过城市i和j之间

Δt′Q/L.k 蚂蚁k在本次循环中经过城市i和j之间Δτ'0 otherwise 其中Q为常数,为蚂蚁k在本次循环中所走路径的长度。经过若干次循环以后,可以根据适当的停止条件来结束计算。

4 算法描述

蚁群算法的主要步骤如下:

步骤1:初始化。

步骤2:生成M只蚂蚁,并将其置于节点1。

步骤3:for每只蚂蚁do

{

按照式(1)计算并选择下一条有向线段;

如果没有有向线段满足背包问题的约束条件,则该蚂蚁就死掉:如果蚂蚁没有死亡.则将选择有向线段的序号加入蚂蚁的禁忌表中;

}.

步骤4:计算本次迭代的最好解.如果其优于当前的最好

解。则用其替代当前的最好解。

步骤5:按照式(2)更新路径的信息素。

步骤6:if(未达到NCmax)&&(没有进入停滞状态)then

{

(1)清空所有蚂蚁禁忌表中的数据;

(2)AT(t);

(3)NC”;

(4)转至步骤2;

else

输出最优解}

5 分析及改进常规的蚁群算法

因为每种物品是一个信息单位,信息素积累在物品上,蚂蚁k按转移概率选择下一个物品,信息素的全局更新形成了正反馈机制,自然就降低了搜索的随机性。蚁群算法求解多维0-1背包问题的突出弊端.就是搜索时间长,并且很容易陷入局部最优解。因此可以考虑在蚁群算法中增加局部优化算法,这样就可以对每一代构造的解进行改进.从而进一步提高解的质量,以加快算法的收敛度,在求解TSP 问题时,用于启发式局部优化的算法有很多.主要包括2一opt、3-opt、定点重定位、交换和交叉等。这些局部算法都采用顶点交换的策略,所以本文尝试在求解多维0-1背包时也加入定点交换的策略,以求提高求解速度和解的质量。我们对以上算法进行优化及改进:一方面,我们简化概率公式,去掉概率公式中的分母,用改变后的公式来计算物品的被选择的概率;另一方面,我们加入顶点交换的策略,即修改上述算法的步骤4,加入一个标志位flag,并初始化为0,计算本次迭代的最优解G,以后每次计算出一个解,都要和上次的最优解进行比

较,最后通过多次交换,得到一个符合要求的最优解。具体的基于交换策略的蚁群算法实现如下:

步骤1:初始化。.

步骤2:生成M只蚂蚁,并将其置于节点1.

步骤3:for每只蚂蚁do

{

按照式(1)计算转移概率并选择下一条有向线段;

如果没有有向线段满足背包问题的约束条件。则该蚂蚁就死掉:如果蚂蚁没有死亡。则将选择有向线段的序号加人蚂蚁的禁忌表中:

}

步骤4:

(1)计算本次迭代的最好解G;

(2)定义标志位flag,并初始化为0;

(3)While(flag==0)

{

将标志位flag置为1;

for每个属于禁忌表中的有向线段序号i do

f0r每个不属于禁忌表中的有向线段序号j do

{

交换i,j,并根据新的概率公式计算得到G';

相关文档
最新文档