An ant-based algorithm for coloring graphs
1.研究背景
图的着色问题涉及到任务调度、时间制表、通信网络中的频率分配、寄存器分配、PCB设计中的短路测试以及传统的地图着色等问题。
由于图的着色问题是NP难题的,逼近算法也不是很有前途,因此很多工作都集中在启发式算法的设计上。图着色问题的启发式使用各种算法设计技术,包括构造方法、迭代方法、遗传算法、局部搜索方法、禁忌技术和蚂蚁系统算法。
图着色:
设G =(V,E)是顶点集V和边集E的无向图,图着色即相邻顶点必须具有不同的颜色。 G具有适当的k着色的最小k被称为G的色数。顶点v处的冲突是与v相邻的具有与v相同的颜色的顶点。图G中的总冲突是具有相同颜色的相邻顶点对的数量。图着色问题是找到最小k的问题。
2.国内外研究现状
Costa和Hertz 蚂蚁可以从一个顶点移动到图中的任何其他顶点
Comellas和Ozon 蚂蚁系统算法,每只蚂蚁得到的结果都是基于RLF或DSATUR等传统的序列方法。
3.创新点
① 使用蚂蚁的方式不同,算法中的每个蚂蚁只使用局部信息给图的一部分着色。每只蚂蚁的着色动作构成了整个图的着色。通过这种方式,ABAC更适合分布式实现
优势:每个测试图的标准差都非常小
② 在我们的算法中蚂蚁没有信息素的铺设能力。经过试验发现,在这个算法中,信息素对解决方案的质量没有显示出明显或显著的影响。所以,在有限的实验中,这有助于减少运行时间。
4.具体算法
参数解释
nJoltCycles:陷入局部最优的连续循环数量,我们设置nJoltCycles = max{n/2,600}。
nBreakCycles:在算法终止之前,有效值没有改进的连续循环数。
a:是由MXRLF生成的颜色类的百分比,这些颜色类可供蚂蚁最初使用。我们准备 a= 80%。
b:MXRLF中的颜色类的百分比,这些类用于在ant开始之前为图形创建初始颜色。 b= 50%。
y:是MXRLF中颜色类的百分比,用于着色在初始 中没有着色的顶点。 y= 70%
MXRLF_SET_LIMIT:是MXRLF中的颜色类/分区大小限制。我们设置MXRLF_SET_LIMIT = 0.7n
nMoves:是蚂蚁在停止之前可以访问的顶点数。我们定义nMoves如下。
nChangeCycle:允许的连续循环的数量,其中在可用颜色(可用颜色)的数量增加之前没有任何改进。我们设置nChangeCycle = 20。
nAnts:是一个蚁群中的蚂蚁数量,它被设置为图中顶点数量的20%。为了提高效率,不允许nant超过100
nCycles:是整个着色过程中的循环数,设置为min{6n,4000}
n = |V|是顶点集的基数
R_SIZE_LIMIT:最近访问的顶点列表的长度。蚂蚁将避免重新访问它的禁忌列表中的那些顶点,从而允许对图进行更多样化的探索。我们设置R_SIZE_LIMIT = nMoves/3。
步骤1:得到图G的颜色上界K
设G = (V,E)为输入图。我们首先运行MXRLF,获得适当图G的k着色。K是图G上颜色数的上界。
MXRLF:
将图G未着色的点分为两组:
P组顶点:不相邻于任何已着色的顶点,R组顶点:相邻于至少一个已着色的顶点。MXRLF在构建color类时不使用来自R的顶点。按顺序选择P中最大度数的顶点添加到第一个color类中,更新P,R组,重复上述过程,直到P是空的或者颜色类大小受到限制,整个图形着色。
步骤2:初始化参数
K为图G的颜色种类上界。最初设置可以选择的给蚂蚁上色的颜色记为 ,a=80%。
k个颜色类中随机选择 个颜色类保留。其余顶点清除颜色,用 个颜色随机分布上色, 。颜色类被重新编号,以便所有颜色都在集合 中。现在我们有了一个有 个颜色的有色图G,这个颜色可能不是g的正确颜色。
步骤3:进入循环
然后将一群蚂蚁随机分布到图的顶点。
在每个循环中,一次激活一个蚂蚁,蚂蚁只知道局部情况。当蚂蚁在顶点时,判断该点处是否有冲突,如果有冲突,从颜色集中选择临近点未使用的颜色进行重新着色,当满足要求的几种可用颜色中有选择时,蚂蚁只是随机选择一种颜色。
如果不存在附近点未使用的颜色,则选择附近点使用数量最少的颜色进行着色,以最小化该顶点处的冲突。
然后更新该顶点处的冲突。
ant不知道整个图的总冲突。在蚂蚁完成对当前顶点的着色后,蚂蚁会选择该点的临近点中冲突最小的那个点,移动到该点,继续解决冲突。
此外,每个蚂蚁还有一个禁忌列表,其中包含他们无法重访的最近访问过的顶点。 禁忌列表有助于防止蚂蚁卡在循环中。
步骤4:情况判断
如果陷入局部最优,进行“震动”法。
局部最优:蚂蚁从当前顶点到下一顶点时,选择临近点中冲突最小的顶点。但很有可能冲突值一样,导致蚂蚁陷入局部最优。
振动法:为了帮助蚂蚁解决局部最优,我们通过一种“震动”的方法扰乱图形的当前着色。选择图中在前10%中存在冲突的顶点,并使用当前可用颜色集的80%随机重新着色它们的相邻点。“震动”的想法是注入足够的干扰进入当前的着色,使其移出当前的局部最佳,但不足以破坏已建立到那一点的着色。
当所有蚂蚁都完成一个循环时,如果当前图G没有冲突,那么可用颜色的数量将减少一个,更新颜色种类最优值和可用颜色集,然后我们开始另一个循环。
如果在允许连续的循环中,当前颜色种类的最优值一直没变,则输出最优值。
5.实验结果:
对于每个图,我们列出了图的名称、颜色数上界、算法在50次试验中产生的边界结果的最小值、最大值、平均值和标准差。我们还列出了每个图的50次运行中的平均运行时间(以秒为单位)。对于一些图,运行时间太小,无法记录,并且被记录为0。需要注意的是,结果的标准差非常小,除三幅图外,其余均小于1,并且这三幅图的标准差小于2。在这119幅图中,我们的算法找到了56幅图的最优k值。有7个图,我们的算法得到了较差的结果,但都在允许范围内。
6.结论:
在本文中,我们提出了一种基于蚁群算法的图着色算法,它在119个DIMACS基准图上运行良好。为解决图着色问题提供了一个新思路。