2013SEA-(Kahip两级图分区调优算法)Think Lo

2021-07-30  本文已影响0人  Caucher

是比较新的一篇图分区算法,针对传统问题。ArxIV也有同名文章,更为详细。
标题:局部地思考,全局地执行:高度平衡的图分区

Abstract

本文提出的仍然是图分区算法中经典的局部提升模式(类似KL思想)。
让每个局部搜索,各自宽松地,可以放松平衡参数,得到一个更合适的分区,然后用一个负环检测算法,把这些不平衡的局部分区组合起来。
整个算法是多级的,并行的,称为KaFFPaE。

1 Introduction

KaHIP是一个图分区的算法家族。
最初的KaFFPa对于小型图来说性能不佳;KaFFPaE利用粗粒度的并行,达成了最佳效果,但是当平衡因子比较苛刻的时候,性能退化还是比较严重。

2 Preliminaries

本文暂假定所有点权重为1,但可以扩展到有权节点图上。

4 Globalized Local Search by Negative Cycle Detection

算法整体分为两个部分,第一部分是在成对的block(有边连接)之间做局部搜索。第二部分是基于第一部分收集到的信息构建模型,确定最终哪些movement(移动/交换节点)会被采纳,以维护整体平衡。

4.1 Basic Idea – Using a Negative Cycle Detection Algorithm

这一节首先用一个简单的例子来讲思路。每一次移动只移动单个节点。每个节点有标记和未标记两种状态,初始时未标记。当一个节点不和之前标记过的节点相邻时,该节点是有资格的
基于图的一种分区,构建图的模型,如下图,每个block是模型图的一个点,模型图是个有向图

仍然要注意两个问题:

  1. 成对的有向边权重通常都不一样,这个很好理解,因为是从两个block里面选的节点;
  2. 边的权重赋值不只有一种,改变随机取有向边的顺序,可能模型图的有向边权重就不一样了。


    image.png

正如标题所说,构建好这个模型图,我们就要去在其上找负环。注意到,一个负环代表一组节点的移动,这个移动给整个图分区带来正收益。最关键的是,这组节点的移动,完全不改变各分区权重,因为总是一个节点出,一个节点进。

作者还提到,像FM这种在相邻的block做节点交换的,实际上就是本文思想的特例,只不过FM这个负权环太小了。

4.2 Advanced Model

上面其实是一个简化的模型,真正用于负环探测的,不是一个节点,而是一坨节点(节点集合),边的权重,也是这一坨节点移动带来的收益的相反数。边的赋权是随机顺序的,而且每条边都要赋权。

4.3 Directed Local Search

这一节其实就是讲如何去给模型图的边赋权,只不过这时赋权不是找一个顶点,而是一坨。

注意到,由于标记机制,所有节点至多被移动一次。
回想起有资格节点的定义,所有在这一次Directed Local Search中移动的节点的邻居,都失去了资格。也就是说它们不会在之后的Directed Local Search被移动。这是为了收益计算的精确性。一旦它们被移动,之前计算的收益就不对了。

最后所有刚才移动的节点再移回来,只留下计算出来的权重和节点标记即可。

4.3.1 Multiple Directed Local Searches

这个思想也很简单,所有block对的边都赋权之后,也许对于某个block对,还有一些有资格的节点,他们还可以做一次Directed Local Search,甚至不止再做一次,再做\miu次也是可能的。我们最后只要取增益最大的做边权重就好了。

4.4 The Model Graph

现在这个模型图的意义更加明朗了。一个负环,实际上就是若干次Directed Local Search的全局组合,使得全局收益增加。但问题在于,这个负环不一定能保证平衡性,因为移动的不是单个节点了,而是一坨,这一坨的大小只有上界,却并不一定都相等。这一节,核心问题就在于如何设计模型图,来保证平衡性。

4.5 Conflicts

相信读者读到这里,和编者有一样的疑惑,就是跨层的环路还有很多移动是说不清楚的,作者也提到了两种矛盾,是上面的构建无法解释的。

4.5.1 Conflict 1: duplicate movement

如下图,在下面的负权回路里,注意两条红色边,它们明明就是一次Directed Local Search的移动,底层是高层的子集,怎么能移动两次?


image.png

4.5.2 Conflict 2: overload caused by 2 ways

如下图,回路里的两条红色边,一个是通过点s增加了B的权重,一个是通过跨层增加了B的权重,在同一个回路里,导致B过载。


image.png

4.5.3 Conflict resolution

作者首先说冲突情况在实验中较少遇见,一旦遇见了,也很容易检测,检测之后,随机删掉这个环的一条边,然后重新找负权环即可。
另外,如果删除了跨层的所有边,那么必然不会产生冲突,但是移动的可能就少了。但是换个角度,也就是如果初始分区是均匀平衡的,就不会有冲突。

4.6 Balancing

刚才介绍的算法可以保证在初始分区均衡时,均衡性不被打破,但是对于初始不均衡的分区,就要在负权环处理完毕之后,补充一个平衡算法。

4.7 Putting Things Together

算法实际上是一轮一轮进行的。
在每一轮中:

  1. 计算成对的边权重(directed local search)
  2. 构造模型图,找负权环,执行之,直到没有负权环。
  3. 找0权环,执行之,打破平衡以获得多样性。
  4. 对上述3步进行\lambda次迭代,之后如果图是平衡的,就停止,否则用平衡算法对其进行平衡。
  5. 平衡算法一般会引入新的负权环,由此可以开启新的一轮。

本文提出的这种细化技术,称为Karlsruhe Balanced Refinement (KaBaR).

5 Experiments

主要专注于效果的实验,有空再补充。

上一篇下一篇

猜你喜欢

热点阅读