ParLS-PBO 阅读笔记
ParLS-PBO: A Parallel Local Search Solver for Pseudo Boolean Optimization#
Abstract
As a broadly applied technique in numerous optimization problems, recently, local search has been employed to solve Pseudo-Boolean Optimization (PBO) problem. A representative local search solver for PBO is LSPBO. In this paper, firstly, we improve LSPBO by a dynamic scoring mechanism, which dynamically strikes a balance between score on hard constraints and score on the objective function. Moreover, on top of this improved LSPBO , we develop the first parallel local search PBO solver. The main idea is to share good solutions among different threads to guide the search, by maintaining a pool of feasible solutions. For evaluating solutions when updating the pool, we propose a function that considers both the solution quality and the diversity of the pool. Furthermore, we calculate the polarity density in the pool to enhance the scoring function of local search. Our empirical experiments show clear benefits of the proposed parallel approach, making it competitive with the parallel version of the famous commercial solver Gurobi.
PBO Problem#
我们首先给定什么是 PBO 问题:
\begin{aligned}
\min_{\{x_1, \dots, x_n\}} \, &\sum^n_{i=1}c_i \cdot l_i, \quad c_i \in \mathbb{Z} \\
s.t. \quad &\bigwedge^m_{j=1}\sum^n_{i=1}a_{ji}\cdot l_i \geq b_j, \quad a_{ji}, b_{j} \in \mathbb{N^+_0}
\end{aligned}
Related Work#
解决 PBO 的算法主要分为以下几类:
- PB 求解器,代表为 Sat4J,RoundingSAT,HYBRID
- 分支限界法(BnB),例如最大碰集,线性规划(松弛约束)
- 编码为 SAT 求解,例如 MINISAT+, OpenWBO
- 混合整数规划期,例如 SCIP,Gurobi
- 不完备的局部搜索算法
对于局部搜索算法,最有代表性的莫过于 LS-PBO SAT'21 算法; 随后,在此基础上,DeciLS-PBO FCS'23 提出了通过使用基于单位传播的方法产生更好的初始解的方式,改进了 LS-PBO ; 最近,NuPBO CP'23 提出了一种新的打分函数与加权策略,进一步提高了 LS-PBO,成为 SOTA 的求解器
对此,本文首先提出一种 LS-PBO 的改进 DLS-PBO,并在此基础上提出它的并行版本 ParLS-PBO
Review of LS-PBO#
LS-PBO 作为 PBO 局部搜索求解器中的代表(也是其他局部搜索求解器的核心部件),其核心的思想为以下两点:
例如一个 PBO 问题,LS-PBO 期望找到这样一个解(假定目标为最小化):
LS-PBO 使用加权技术来增加未满足的约束的权重,使搜索过程偏向于满足它们,具体而言,其动态调整这些权重,这里我们用
对于打分函数,在 LS-PBO 中,对于翻转一个变量
score(x) = hscore(x) + oscore(x)
其中,
我们将硬约束的惩罚定义为
DLS-PBO#
但我们发现,LS-PBO 缺少对软硬约束比例的动态调整,换而言之,在长时间找不到可行解时,我们应该提高硬约束的在打分中的占比,使得我们能够快速找到一个可行解;相反,如果我们能够快速找到可行解,那么我们应该提高软约束在打分中的比例,使得我们能够寻找到更好的可行解
于是,我们提出一种动态评分机制,定义如下:
score^*(x) = hscore(x) + p \cdot oscore(x)
其中,
- 如果我们在最近的
次迭代中,都没有找到可行解,我们将 调整为 ,其中 - 否则,我们将其调整为
Example
\begin{aligned}
\min_{\{x_1, x_2, x_3\}} &10 \cdot x_1 + 20 \cdot x_2 + 30 \cdot x_3 \\
s.t. \quad &2 \cdot x_1 + 3 \cdot x_2 + 4 \cdot x_3 \geq 5
\end{aligned}假设此时,
| -4 | 6 | 6 | |
| 10 | -20 | -30 |
考虑以下两种情况:
- 如果最近
次搜索中我们已经发现过可行解,此时的 会增大,不妨假设现在的 ,于是, ,于是我们选择 做翻转(即使翻转之后变成不可行解了) - 否则,我们会减小
,不妨设此时的 ,于是我们得到 ,随后,我们翻转
并行化 ParLS-PBO#
框架#
ParLS-PBO1 的总体框架如下所示
具体而言,并行框架由一个 master2 线程和多个 worker 线程组成,其中 master 线程负责读取实例并通过 literal assume 为 worker 初始化不同的赋值(部分赋值),当时间耗尽后,master 线程会给出搜索到的最优解。
每个 worker 线程收到一个文字 worker 开始局部搜索,也就是上文提到的 #DLS-PBO
Solution Pool#
为了使得不同的 worker 线程能够获取各自的信息(以求得更好的解),这里引入了解池的概念
当一个 worker 线程的搜索过程在翻转一定数量的变量后卡在局部最优时,就会尝试使用解池中的高质量的可行解,然后重启,继续进行搜索。
那么这里,如何评价一个解是否够好(是否需要被加入到解池中)呢?我们考虑一个混合质量排名函数:
r_{mix}(S) = rank_{obj}(S)\cdot p^* + rank_{div}(S) \cdot(1-p^*)
其中,
最优解的目标函数值时最小的,于是
当 worker 线程找到一个新的可行解时,如果解池未满,则直接加入,否则,计算这个解的
如何使用 Solution Pool#
我们在 前文 中提到了,解池能够指导搜索,具体而言,解池通过以下两个策略来指导搜索过程
Solution Sharing#
当 worker 线程在一段时间内未能找到较好的可行解,即可能陷入局部最优时,从解池中选择目标函数值较小的可行解并替换当前可行解
在实际应用中,每个工作线程保存当前最优可行解(记为
为了防止不同线程之间搜索空间的过度重叠,我们采用基于概率的方法来选择池中的解决方案,而不是直接选择池中的最佳解决方案。具体地,假设
Polarity Density Weight#
我们提出了变量
最开始时,我们将其初始化为
w_{pd}(x) = \begin{cases}
&\max (w_{pd}(x) - \beta, 1-\epsilon), \, if \, x = 0 \in S \\
&\min (w_{pd}(x) + \beta, 1+\epsilon), \, if \, x = 1 \in S
\end{cases}
极性密度权重用于增强搜索过程中挑选一个变量进行翻转的打分函数。由此得到的增强型得分函数,记为
score^{**}(x) = \begin{cases}
&score^*(x) \times w_{pd}(x), \, if \, x=0 \in S_{cur}\\
&score^*(x) / w_{pd}(x), \, otherwise
\end{cases}
其中
实验#
使用 Benchmark 为:
- 真实世界的例子,Minimum-Width Confidence Band Problem, Seating Arrangements Problem, Wireless Sensor Network Optimization Problem
- MIPLIB 中的例子
- PB16 中的例子
对比了以下算法:
其中,HYBRID 与 PBO-IHS 都是基于 RoundingSAT 更改的 PBO 版本
选择的参数如下表:
| Parameter | |||||||
|---|---|---|---|---|---|---|---|
| Value | 566024 | 56295 | 1.15 | 18 | 0.58 | 0.03 | 0.144 |
#win 表示求解器在被测试的求解器输出的所有解中找到最优解的实例数(获胜实例的数量)
DLS-PBO 的实验的结果如下表:
ParLS-PBO 的表现如下表
脚注#
-
一个小趣事,
master这个词在分布式中经常使用,但近年来由于某种政治正确,似乎会改口为coordinator(在github中以前的主分支默认master,后来变为main) ↩ -
源代码可见 DeciLS-PBO(commit: 3dce881) ↩
-
https://zenodo.org/record/4043124 (version 2) ↩
-
https://bitbucket.org/coreo-group/pbo-ihs-solver (version 1.1) ↩
-
https://www.gurobi.com/solutions/gurobi-optimizer (version 10.0.0) ↩
-
https://www.scipopt.org/index.php#download (version 8.0.1) ↩
-
https://ug.zib.de/index.php#download (version 1.0.0) ↩



讨论
想法、补充,或只是打个招呼。