k-way Hypergraph Partitioning via n-Level Recursive Bisection【2016 ALENEX】文献总结
文章目录
- 一、作者
- 二、摘要
- 三、相关工作
- 四、算法概述
- 五、实验结果
- 六、主要贡献
一、作者
Sebastian Schlag, Vitali Henne, Tobias Heuer, Henning Meyerhenke, Peter Sanders, Christian Schulz
二、摘要
我们开发了一种用于超图划分的多级算法,该算法逐个收缩顶点。在粗化和细化过程中采用多种缓存技术和懒更新技术,与适用于普通图划分的简单 n 级算法相比,运行时间减少了高达两个数量级。总体性能甚至优于广泛使用的采用经典多级算法且仅有几级的 hMetis 超图划分器。在基于组合方法的初始划分以及在递归二分法中对不平衡进行自适应预算分配的辅助下,我们实现了非常高的质量。我们收集了一个包含 310 个超图的大型基准集,这些超图来源于 VLSI(超大规模集成电路)、SAT 求解、社交网络和科学计算等应用领域。实验表明,我们的算法是广泛超图划分任务的首选方法。本文介绍的算法构成了我们的超图划分框架 KaHyPar(Karlsruhe Hypergraph Partitioning)的基础。
三、相关工作
- 超图划分工具
- hMetis:一个广泛使用的超图划分工具,基于经典的多级划分算法,适用于VLSI设计领域。
- PaToH:另一个广泛使用的超图划分工具,源自科学计算领域,以高效和高质量的划分为特点。
- Parkway:一个并行超图划分工具,适用于大规模超图。
- Mondriaan:专注于稀疏矩阵划分,采用不同的划分策略。
- Zoltan:一个并行划分工具,适用于动态负载平衡。
- UMPa:支持有向超图模型和多目标优化。
- 现有方法
- 多级范式:几乎所有现代超图划分工具都基于多级范式,包括粗化、初始划分和细化三个阶段。
- 局部搜索方法:常用的局部搜索方法包括贪心算法和Fiduccia-Mattheyses(FM)启发式算法。FM算法允许暂时恶化目标函数以逃出局部最优。
- 递归二分与直接k路划分:大多数工具使用递归二分法,而一些工具支持直接k路划分。
- 现有方法的局限性:
现有的多级超图划分工具(如hMetis、PaToH等)在处理大规模超图时存在效率和质量方面的局限性。特别是在粗化和细化阶段,现有方法的效率和划分质量有待进一步提高。 - 与本文工作的关系
- 多级算法的改进:本文提出的算法在多级范式的基础上进行了改进,特别是在粗化和细化阶段引入了新的策略。
- 性能优化:通过增益缓存和懒更新等技术,提高了算法的效率。
- 组合方法:结合多种初始划分算法和优化策略,提高了划分质量和鲁棒性。
四、算法概述
【每次递归划分两块,每次递归都执行粗化、初始划分和细化】
该论文提出了一种用于超图划分的多级算法,通过每次收缩一个顶点来实现。算法主要分为三个阶段:粗化、初始划分和细化。在粗化阶段,超图被递归地粗化,直到足够小以便进行初始划分。初始划分阶段使用一系列简单算法的组合来计算初始二分。细化阶段则通过局部搜索算法来改进划分质量。该算法通过递归二分法实现 k 路划分,使用自适应不平衡参数确保最终划分满足平衡约束。此外,算法还采用了多种优化技术,如增益缓存和懒评估策略,以提高效率。
- 粗化阶段:逐步将超图简化为更小的超图,以便后续处理。粗化通过收缩顶点对来实现,每次只收缩一对顶点。
- 顶点评分:为每个顶点计算一个评分,评估其与邻居顶点收缩的吸引力。评分函数考虑共享网的权重和顶点权重。
r ( u , v ) = 1 c ( u ) ⋅ c ( v ) ∑ e ∈ { I ( u ) ∩ I ( v ) } ω ( e ) ∣ e ∣ − 1 r(u,v)=\frac{1}{c(u)\cdot c(v)}\sum\limits_{e\in \{I(u)\cap I(v)\}}\frac{\omega(e)}{|e|-1} r(u,v)=c(u)⋅c(v)1e∈{I(u)∩I(v)}∑∣e∣−1ω(e)
其中, c ( u ) c(u) c(u) 和 c ( v ) c(v) c(v) 是顶点 u 和 v 的权重; I ( u ) I(u) I(u) 和 I ( v ) I(v) I(v) 是顶点 u 和 v 的网的集合; ω ( e ) \omega(e) ω(e) 是网 e 的权重; ∣ e ∣ |e| ∣e∣ 是网 e 的大小;
评分函数计算顶点 u 和 v 共享的网的权重总和。共享网越多且权重越大,评分越高,表示这两个顶点的收缩更有吸引力;每个共享网的贡献由 ω ( e ) ∣ e ∣ − 1 \frac{ω(e)}{∣e∣−1} ∣e∣−1ω(e) 给出。这考虑了网的大小,较大的网在收缩时可能对超图结构的影响更大。评分通过顶点权重的乘积的倒数进行调整,即 1 c ( v ) ⋅ c ( u ) \frac{1}{c(v)⋅c(u)} c(v)⋅c(u)1 。这有助于保持粗化过程中顶点权重的均匀性,防止某些顶点因权重过大而被频繁收缩。 - 选择顶点对:根据评分选择要收缩的顶点对,评分最高的顶点对优先收缩。如果顶点权重大于一定值,则不进行合并。具体公式如下:【S 是超参,t 是当顶点数小于 t 时,聚类结束, ω ( v ) \omega(v) ω(v) 表示权重,等同于 c ( v ) c(v) c(v)】
ω ( v ) ≤ S ⋅ ω ( V ) t \omega(v)\le S\cdot \frac{\omega(V)}{t} ω(v)≤S⋅tω(V) - 收缩操作:将选中的顶点对进行合并,更新超图的结构,包括顶点权重和相关网的连接。
- 收缩顶点对 (u,v) 时,顶点 v 被合并到顶点 u 中。
- 顶点 u 的权重更新为 c(u)+c(v)。
- 所有与 v 相关的网都被更新,将 v 替换为 u,并移除 v 作为独立顶点。
- 更新策略:【懒更新】每次合并完顶点不会立即更新邻居,而是将其标记为无效,如果优先队列弹出无效节点,则重新计算该值并更新优先队列。【推测应该是计算完压入有限队列中】
- 停止条件:收缩到规定的顶点阈值 t t t 或者 无法继续收缩
- 顶点评分:为每个顶点计算一个评分,评估其与邻居顶点收缩的吸引力。评分函数考虑共享网的权重和顶点权重。
- 初始划分:初始划分的目的是为粗化后的超图生成一个初始的二分划分。由于此时超图已经足够小,可以快速完成划分。初始划分采用了一系列简单但多样化的算法组合,以提高划分质量。
-
划分算法:这些算法运行多次(通常20次),选择切割最小且不平衡最低的划分作为初始划分结果。
- 随机划分:随机将顶点分配到两个块中。
- 广度优先搜索(BFS):从一个随机顶点开始,进行广度优先遍历,直到覆盖超图的一半顶点,这些顶点构成一个块,剩余顶点构成另一个块。
- 贪心超图生长(GHG):通过多种变体的贪心算法生长两个块,初始从两个伪周边顶点(用 BFS 来寻找)开始,逐步将顶点添加到块中。
- 增益计算方式:
- FM 增益:移动顶点后切割大小的变化。
- Max-Net 增益:移动顶点后影响的网的最大权重。
- Max-Pin 增益:移动顶点后影响的网的引脚数的最大变化。
- 生长策略:
- Greedy-Global:同时从两个块中选择增益最高的顶点。
- Greedy-Sequential:先生长一个块,然后再生长另一个块。
- Greedy-Round-Robin:交替生长两个块。
- 增益计算方式:
- 基于大小约束的标签传播(SCLaP):通过标签传播的方式划分顶点,初始从两个伪周边顶点及其邻居开始,然后传播标签直到所有顶点都被分配。
- 初始化
- 选择种子顶点:
- 使用BFS从随机顶点开始,找到两个伪周边顶点。
- 这两个顶点及其部分邻居(通过 τ \tau τ 参数进行控制,这篇论文取 5 )被分配到块 V0 和 V1 中。
- 初始化标签:
- 每个顶点被分配一个标签,表示其所属的块。
- 初始时,只有种子顶点及其部分邻居有标签,其他顶点的标签为空。
- 选择种子顶点:
- 标签传播
- 传播标签:
- 未标记的顶点根据其邻居的标签进行投票,选择邻居中出现最多的标签作为自己的标签。
- 如果有多个标签出现次数相同,随机选择一个。
- 大小约束:
- 在传播过程中,确保每个块的大小不超过允许的最大值(基于不平衡参数 ϵ)。
- 如果某个块的大小接近上限,限制该块的标签传播。
- 迭代传播:
- 重复标签传播过程,直到所有顶点都被标记或达到最大迭代次数。
- 传播标签:
- 检查平衡性:
- 确保每个块的大小满足平衡约束,如果不满足,调整标签分配以满足平衡性。
- 初始化
-
划分步骤:
- 自适应不平衡参数:
ϵ ′ = ( ( 1 + ϵ ) k ′ ⋅ c ( V ) k ⋅ c ( V i ) ) 1 ⌈ l o g 2 ( k ′ ) ⌉ − 1 \epsilon'=((1+\epsilon)\frac{k'\cdot c(V)}{k\cdot c(V_i)})^{\frac{1}{\lceil log_2(k') \rceil}}-1 ϵ′=((1+ϵ)k⋅c(Vi)k′⋅c(V))⌈log2(k′)⌉1−1
其中, ϵ \epsilon ϵ 是全局不平衡参数, k ′ k' k′ 是当前块的大小, k k k 是划分块数, c ( V ) c(V) c(V) 是总权重, c ( V i ) c(V_i) c(Vi) 是当前块的权重。 - 递归二分:当前块的大小为 k ′ k' k′,在每次二分时,先计算自适应不平衡参数 ϵ ′ \epsilon' ϵ′ ,然后将当前块划分为两个子块,其中一个子块的大小为 ⌊ k / 2 ⌋ ⌊k/2⌋ ⌊k/2⌋,另一个子块的大小为 ⌈ k / 2 ⌉ ⌈k/2⌉ ⌈k/2⌉。每块权重满足:
c ( V i ) ≤ ( 1 + ϵ ′ ) ⋅ c ( V ) k ′ c(V_i)\le (1+\epsilon')\cdot \frac{c(V)}{k'} c(Vi)≤(1+ϵ′)⋅k′c(V) - 个人想法:计算最终每块的权重上限,然后在递归二分的时候,该块的上限为该块大小 乘 最终每块上限。
- 自适应不平衡参数:
-
- 细化阶段:局部搜索是细化阶段的核心,用于在保持平衡约束的同时,尽可能减少切割的网数量。【一次细化展开一个节点】
- 初始化:
- 为每个块维护一个优先队列(PQ),存储可能的顶点移动及其增益。
- 将所有顶点标记为不活动和未标记。【活动节点才计算增益并放入优先队列,标记代表这个节点已经移动过】
- 禁用所有优先队列。
- 激活边界顶点(将边界顶点标记为活动),启动对应块的优先队列,计算对应增益,并放入对应块的优先队列中。【边界顶点:在孤立顶点和展开顶点中,连接多个块的顶点;孤立顶点:未被聚类的顶点;展开的顶点:刚刚展开的顶点(不包括旧的展开)】
- 增益计算:【增益缓存】
计算活动顶点移动到目标块的增益。【该点位于当前块产生的割边和 - 位于目标块产生的割边和】
g i ( v ) = ∑ e ∈ I ( v ) { ω ( e ) : Φ ( e , V i ) = ∣ e ∣ − 1 } − ∑ e ∈ I ( v ) { ω ( e ) : Φ ( e , b [ v ] ) = ∣ e ∣ } g_i(v)=\sum\limits_{e\in I(v)}\{\omega (e):\Phi(e,V_i)=|e|-1\}-\sum\limits_{e\in I(v)}\{\omega (e):\Phi(e,b[v])=|e|\} gi(v)=e∈I(v)∑{ω(e):Φ(e,Vi)=∣e∣−1}−e∈I(v)∑{ω(e):Φ(e,b[v])=∣e∣} - 移动选择:
从启用的优先队列中选择增益最高的移动,判断移动后是否满足平衡条件,满足则执行移动并更新相关数据结构。不满足,则禁用该块的优先队列。如果不存在启用的优先队列,该轮局部搜索停止。 - 更新:【懒更新】
在移动顶点后,更新其未标记的邻居顶点的增益,并将这些邻居插入对应块的优先队列,并启用对应块的优先队列。 - 终止条件:
- 局部搜索:启动的队列都为空 或者 连续 x 次无改进的移动
- 细化:所有节点都展开
- 回滚:
撤销移动,恢复到最佳划分状态,等待进行下一轮细化。
- 初始化:
五、实验结果
【310 个超图,每个超图执行 7 次划分,其中 k = 2,4,…,128】
实验在310个来自不同应用领域的超图上进行,包括VLSI、SAT求解、社交网络和科学计算等。结果表明,该算法在划分质量上优于广泛使用的hMetis系统,并且运行时间更短。具体来说,该算法在大多数情况下产生的划分切割更小,且在允许一定不平衡时性能提升更为显著。与PaToH相比,该算法在划分质量上也有显著提高,尽管PaToH在运行时间上更快。总体而言,该算法在多个应用领域的超图划分任务中表现出色,是当前最优的超图划分方法之一。
六、主要贡献
- 自适应不平衡参数:通过动态调整每次二分的不平衡参数,确保最终的k路划分满足全局平衡约束。【有点复杂,感觉可以优化】
- 增益缓存和懒更新策略:显著减少了运行时间,提高了算法的效率。【节约时间,但是可能会导致陷入局部最优】
- 高效的超图数据结构:支持快速的顶点收缩和展开操作,优化了内存使用和运行时间。
- 组合初始划分方法:通过多种初始划分算法的组合,提高了划分质量。【可以采用 V-v cycle,进一步提高划分质量】