利用蚁群算法分析TSP问题
“旅行商问题”(Traveling Salesman Problem,TSP)可简单描述为:一位销售商从n个城市中的某一城市出发,不重复地走完其余n-1个城市并回到原出发点,在所有可能路径中求出路径长度最短的一条。
旅行商的路线可以看作是对n城市所设计的一个环形,或者是对一列n个城市的排列。
由于对n个城市所有可能的遍历数目可达(n-1)!个,因此解决这个问题需要O(n!)的计算时间。
而由美国密执根大学的Holland教授发展起来的遗传算法,是一种求解问题的高效并行全局搜索方法,能够解决复杂的全局优化问题,解决TSP问题也成为遗传算法界的一个目标。
与粒子群算法相似,蚁群算法也是通过对生物的群体进行观察研究得来的。
在研究蚂蚁的行为时发现,一只蚂蚁,不论是工蚁还是蚁后,都只能完成很简单的任务,没有任何一只蚂蚁能够指挥其他蚂蚁完成筑巢等各种复杂的行为。
蚂蚁是如何分工,如何完成这些复杂的行为的这一问题引起了科学及的兴趣。
生物学家发现,蚁群具有高度的社会性。
在蚂蚁的行动过程中,蚂蚁之间不只是通过视觉和触觉进行沟通,蚂蚁之间的信息传递还可以通过释放出一种挥发性的分泌物,这是一种信息素之类的生物信息介质。
一只蚂蚁的行为极其简单,但是一个蚁群的行为则是复杂而又神奇的。
蚂蚁在觅食的过程中,如果没有发现信息素,会随机选择一个方向前进,遇见障碍物也会绕开,直到遇见食物,若果遇见的食物比较小,就即刻搬回巢穴,假如食物很大,则会释放信息素之后回去搬救兵。
在一只蚂蚁发现食物并留下信息素之后,其它的蚂蚁会跟着信息素很快找到食物。
虽然对蚂蚁的行为有了一定的了解,在实际模拟蚁群的时候仍然存在不少问题。
蚂蚁觅食过程中在没有信息素的情况下,蚂蚁会随机向一个方向前进,不能转圈或者震动。
虽然有了一个方向,蚂蚁也不能一直只向着同样方向做直线运动,这一运动需要有点随机性,由此,蚂蚁的运动在保持原有的方向的同时对外界的干扰能够做出反应,也有了新的试探。
这一点在遇到障碍物时是非常重要的。
在有了信息素之后,大多数的蚂蚁都会沿着信息素去找食物,这条路上的信息素会越来越多,但这并不一定会是最优的路径,所以还需要找到最优的路径。
好在蚂
蚁也并不是那么机械地运作,它有一定的几率开辟新的道路,而不是沿着信息素运动,这就为找到最优路径提供了可能。
当找到了最优路径,这只蚂蚁找到食物再回来会比其它的蚂蚁快,同时在路上也留下了信息素,也会吸引其他的蚂蚁走上这条更快的路。
由于这条路走起来更快,信息素也会积累得更快,因此吸引到更多的蚂蚁,渐渐地,大多数的蚂蚁都会走这条最优路径。
遗传算法具有广泛的应用领域,它借助于生物进化的思想和原理与计算机科学相结合,在解决实际问题中得到了很好的广泛应用。
遗传算法一般由选择、交叉、变异构成。
它通过不断地迭代,逐步改进当前解,直到最后搜索到最优解或满意解。
4.4.1算法原理及步骤
1991年,意大利学者Dorigo M等提出了蚁群算法,并在之后研究了蚁群算法的基本原理和数学模型。
这是一种用来在图中优化路径的机率型算法,蚁群算法提出的人工蚂蚁和真实的蚂蚁有一定的区别。
因为人工蚂蚁是为了解决实际的优化问题而提出的,为了使算法更加快速有效,人工蚂蚁比真实的蚂蚁多一些本领。
例如,人工蚂蚁的状态是离散的,不同于真实的蚂蚁的运动,人工蚂蚁的移动是从一个离散的状态到另一个离散的状态的跃迁。
人工蚂蚁还记录了这只蚂蚁的历史行为。
至于蚂蚁释放的信息素对于人工蚂蚁而言是建立的评价问题解决方案的优劣程度的函数,且人工蚂蚁释放信息素的时间不同与现实的蚂蚁要在移动的同时释放,是可以视情况而定的。
人工蚂蚁还可以进行局部优化、原路返回等现实的蚂蚁所不具备的功能。
蚁群算法之中包括了蚂蚁搜索行为的决定因素,第一,是局部搜索策略。
每一只蚂蚁在经过了有限步的移动之后都能够建立一个对于这一问题的解,在每一步的移动过程中,需要应用随机的局部搜索策略来确定移动的方向。
第二,蚂蚁的内部状态。
蚂蚁的历史记录都存储在蚂蚁的内部状态中,因此,内部状态可以通过所携带的信息判断所建立的解决方案的价值。
第三,释放信息素。
信息素包含了蚂蚁积累的信息以及一些具体问题的启发信息,能够影响蚂蚁的决策,这些信息只在蚂蚁释放过信息素的路径上,因此它是局部的,同时这些信息也是长期
的、可以共享的。
第四,蚂蚁决策表。
蚂蚁决策表指导蚂蚁搜索着向最有吸引力的区域移动,这是一种由信息素函数与启发信息函数共同决定的概率表。
蚁群算法的优点很多,比如,这一算法也适用于并行操作。
又由于没有中心的控制和数据而更具有鲁棒性,个体的问题对整个问题的求解造成影响。
系统中的通信不一定要通过个体之间的直接联系,可以通过间接的方式进行通信,这样使得系统中增加个体的开销很小,系统也因此有了更好的可扩充性。
和蚂蚁一样,系统中的个体功能十分简单,不仅实现简单,执行功能所消耗的时间也会很短。
在求解复杂优化问题的过程中,蚁群算法搜索出较优解的能力很强。
蚁群算法仍然存在一些缺陷。
由于蚂蚁的运动是随机的,当问题具有很大的规模的时候,蚂蚁需要较长的时间才能找到最优的路径,之后就需要更多的时间才能使这条最优路径上积累足够的信息素,吸引大多数的蚂蚁。
也就是说,在解决大规模优化问题时算法需要较长的时间才能收敛。
还有一种情况,可能并没有蚂蚁开辟新的道路,所有的蚂蚁发现了同样的路径,可是这条路径并不一定是最优的,而蚂蚁不可能再发现新的路径。
如果这样,蚂蚁找不到最优路径,这一问题也得不到最优解。
将这种蚁群出现停滞的现象称为早熟收敛。
蚁群算法目前还需要进一步的研究,提出完善的理论分析,论证其有效性,通过严格的数学解释作为可靠的理论依据。
蚁群算法的伪代码如下:
Procedure: ACO Algorithm
B egin
While (ACO has not been stopped) do
Schedule actives
Ant's allocation and moving(蚂蚁的分配和移动);
Local pheromone update(局部信息素的更新);
Global pheromone update(全局信息素的更新);
End schedule activities
End While
End Procedure
正如蚁群算法的伪代码所示,蚁群算法的内容主要包括蚂蚁的分配和移动、局部信息素的更新以及全局信息素的更新。
具体算法步骤如下:
(1) 系统初始化。
蚁群的蚂蚁数目为m ,将蚂蚁随机放到各个的城市之中,每只蚂蚁都有存储着自己的禁忌表,禁忌表中存放着蚂蚁经过的城市,也就是说蚂蚁在之后的搜索过程中将不会再次经过这些城市,这样也使得蚂蚁的效率得到了提高。
与禁忌表相对应的是允许访问的城市表,用来储存蚂蚁还可以访问的城市。
在初始化的过程中,清空禁忌表,允许访问的城市表中加入所有的城市节点,在蚂蚁的随机的初始位置选定之后,在禁忌表中加入起始节点,而在允许访问的城市表中删除该节点。
(2) 构造路径。
蚂蚁只能从允许访问的城市表中按照概率公式4-3搜索到下一节点。
(3) ⎪⎩⎪⎨⎧∈=∑∈0]),([*)],([)],([*)],([),()(k i J s k J j s i s i j i j i j i p k βαβ
αϕτϕτ(4-3)
(4) 式中,),(j i p k 表示t 时刻第k 只蚂蚁从城市i 到城市j 的概率;k J 表示
允许访问的城市表;α表示信息素对蚂蚁的影响程度;β表示距离对蚂蚁的影响程度;()j i ,τ表示城市i 到城市j 的这条边上的信息素强度;()j i ,ϕ表示从城市i
到城市j 的期望程度,也叫可见度;
()),(1,j i d j i =
ϕ,()j i d ,表示城市i 与城市j 之
间的距离。
(5) 更新信息素矩阵。
在所有的蚂蚁找到合适的路径之后按照下式对信息进行更新:
(6) )
1,()()1()1(+∆+-=+∑t t t t m k ij ij ij ττρτ(4-4)
(7) ⎪⎩⎪⎨⎧=+∆0),()1,(j i L Q t t k k ij 经过τ (4-5)
(8) 适中,ρ表示信息素挥发的速率,取值范围为(0,1),一般取0.5。
信息素的挥发既是对现实的蚂蚁的模拟,也是防止信息素无限累计,提高搜索效
率;ij τ∆为蚂蚁在这一运动中留在城市i 到城市j 的这条边上的信息素强度;
k ij τ∆为第k 只蚂蚁在城市i 到城市j 的这条边上留下的信息素强度;Q 表示蚂蚁留下
的轨迹是正常数,这是一个控制参数;k L是蚂蚁在这一过程中走过的路径的总长。
(9)若迭代次数达到最大数,则终止算法,输出结果。
反之,如果迭代的次数没有达到最大值,也没有每次都找到相同的解,即出现退化的行为,需要转到步骤(2)重复操作。
(10)对于蚁群算法的缺点,研究人员提出了不少的解决方案,对蚁群算法的优化研究还远远未成熟,不过这也让人们看见了这一算法的发展前景。
在实际的应用中,蚁群算法的优化研究可以关注解决问题的算法模型的收敛性或者算法的复杂度。
虽然蚁群算法有效地避免了局部最优,但如何加快求解速度这一问题仍然需要寻求有效的解决方案。
而蚁群算法和其它算法的有机结合也许会产生让人意想不到的高效的算法。
4.5程序运行结果。