Skip to content

VSIDS 分支启发式

VSIDS branching heuristic · Variable state independent decaying sum · VSIDS

按近期冲突中变量的指数衰减活动度选择 CDCL 决策变量的分支启发式。

条目类型
方法

形式陈述

VSIDS 为尚未赋值的变量维护活动度,并优先选择分数最高者作为下一决策变量。原始 Chaff 版本按文字出现和周期衰减更新;现代求解器更常采用 EVSIDS:在每次CDCL冲突分析后,对参与冲突或学习子句的变量 bump,并让旧贡献按指数速度衰减。一个便于分析的规范化递推是

At(x)=ρAt1(x)+1[xBt],0<ρ<1,

其中 Bt 是第 t 次冲突选定的 bump 集。实现不必在每轮乘遍所有变量:可保持变量分数不衰减,却把全局 bump increment 除以 ρ;所有分数只差同一正缩放,排序不变。为避免浮点溢出,可在分数过大时统一缩放。

变量选择与极性选择是两个接口。VSIDS 决定“下一次问哪个变量”,saved phase、phase caching 或随机相位决定“先试真还是假”。优先队列中的键必须随 bump 更新;已经赋值的高分变量暂时跳过,回溯后再恢复候选资格。活动度只改变搜索顺序,不增添子句,也不作为传播理由。

直觉

一次冲突暴露了当前公式中刚刚活跃的一片约束。若变量反复出现在近期冲突原因里,围绕它作新决策往往能较快触发传播或新的冲突,从而继续细化这一局部结构。指数衰减让很久以前的热点逐渐让位,而不是让早期偶然事件永久统治队列。

VSIDS 的“state independent”不表示它与求解状态无关;名称强调分数不直接按变量当前真、假、未赋值三态定义。实际活动度高度依赖已学子句、冲突分析和 restart 历史。它是一种在线反馈控制,而不是对变量语义重要性的静态测量。

例子与边界

ρ=1/2,变量初始活动度均为零。三次冲突的 bump 集依次为

B1={a,b},B2={b,c},B3={b}.

按递推计算,(A(a),A(b),A(c)) 依次为

(1,1,0),(0.5,1.5,1),(0.25,1.75,0.5).

若三者均未赋值,第三次冲突后选择 b。这个计算还说明一次旧 bump 的权重每过一轮减半。若实现使用不断增大的 increment,数值会不同,但除以共同尺度后排序一致;把两种表示的原始数值直接比较没有意义。

边界在于“近期活跃”不等于“应取真”,也不保证产生最小搜索树。某些构造实例会诱导启发式长期关注错误区域,改变 tie-breaking 或随机种子即可令运行时间大幅变化。VSIDS 不承担可靠性:即使分数更新有 bug,只要求解器仍公平探索并验证冲突,可能只是变慢;若启发式永久饿死某些必要决策,则终止性和完备性才会受损。活动度也不是概率,不能解释为变量属于模型的置信度。

推论与应用

高活动变量与 learned clauses 共同形成短期搜索焦点。Restart 后 trail 被清空而活动度通常保留,使下一阶段围绕刚才的冲突区域重新排列决策;若连活动度也清零,restart 就失去这部分跨阶段记忆。Clause activity 与 variable activity 是不同队列:前者常用于决定保留哪些 learned clauses,后者用于分支,不能混用阈值。

实际评估需固定衰减率、bump 集定义、phase policy、restart 与子句删除,因为这些机制相互反馈。只报告“启用了 VSIDS”不足以复现实验。自适应分支算法可以混合活动度、学习率或随机探索,但任何更换都应通过运行分布而非单个最快样例比较。

参考资料
  • Matthew W. Moskewicz, Conor F. Madigan, Ying Zhao, Lintao Zhang, and Sharad Malik, “Chaff: Engineering an Efficient SAT Solver,” DAC, 2001, pp. 530–535。
  • Niklas Eén and Niklas Sörensson, “An Extensible SAT-solver,” Theory and Applications of Satisfiability Testing, LNCS 2919, Springer, 2004, pp. 502–518。
  • Armin Biere, Marijn Heule, Hans van Maaren, and Toby Walsh, eds., Handbook of Satisfiability, 2nd ed., IOS Press, 2021, Chapter 4。
关系图谱3 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系

被这些条目使用