Files
SAT-SOLVING-EXAMPREP/Decision Heuristics.md
T
2026-08-09 14:08:05 +02:00

77 lines
4.3 KiB
Markdown

- Most important heuristic, as it can steer the entire solver
## Types
- Static heuristics (pre-computed once)
- Ex.: Natural Order
- Dynamic heuristics
- Ex.: Dynamic Largest Individual Sum (DLIS) (chose most common variable + phase)
- Expensive, needs (full) scanning of (all) clauses
- Second order dynamic heuristics
- Ex.: VSIDS, ESIDS
- Less expensive, good measurement
# Look-ahead
- Instead of scanning static clause counts (DLIS) or scores (VSIDS), actually try each candidate variable
- For a candidate $x$: tentatively assign $x$ and separately $\overline x$, run full [propagation (BCP)](Solvers#Boolean Constraint Propagation (BCP)) for each, and measure the effect (# clauses reduced/simplified, # new units)
- If one polarity's propagation conflicts -> failed literal -> the other polarity is forced (same primitive as [Variable instantiation](Preprocessing_Inprocessing#Variable instantiation)/[Vivification](Preprocessing_Inprocessing#Vivification / Distillation))
- Pick the variable (and often the polarity) that maximizes the combined look-ahead effect of both branches (e.g. product/sum of the two reduction counts, as in march/kcnfs)
- Very informative but expensive (full propagation per candidate, both polarities) -> basis of dedicated look-ahead solvers, rather than per-decision use inside CDCL
# Cut heuristic
- Find a variables that 'cuts' the CNF into parts without overlapping variables
- Solve parts separately (for all assignments of the cut)
- Divide & Conquer approach
# Horn Form
## Definition
- A clause is positive if it contains at least 1 positive literal, otherwise it's negative
- A Horn clause is a clause with at most one positive literal
- A CNF is in Horn Form if all clauses are Horn clauses
## Facts
- If all clauses in a Horn Form CNF are positive there is a minimal satisfying assignment
- This assignment can be found using BCP
- The minimal satisfying assignment of the positive part of a Horn Form CNF IFF it is SAT
- I.e. if not it is UNSAT
## Usefulness/ Heuristic
- DP can transform a non Horn from CNF into one by **choosing variables** from clauses with more than one positive literal (non horn clauses) and doing resolution on them.
- [BCP](SAT_in_general#Special Case Unit Resolution) runs through a HORN CNF in polynomial time
# Variable State Independent Decaying Sum (VSIDS)
- Count occurrence of variables in conflict clauses
- Priority Queue is updated, and VSIDS is taken from it
- Decay/ re-score values after i conflicts (Chaff: $f = 1/2, i = 256$)
- multiply all by some $f < 1$
- Emphasizes literals contributing to recent conflicts
#### Additional idea:
- Use VSIDS only as secondary heuristic, primarily try to satisfy must recently added clauses
## Normalized VSIDS (NVSIDS)
- Keep the score between $[0, 1]$
- Pick $f = 0.95$ and calculate score like this:
`new_score = old_score * f + in_conflict? (1 - f) : 0`
- You can defer the re-scoring to later, i.e. only update variables in conflict and then re-score all later on to save time
- Can also Bump resolved literals on conflict level, not just learned lits (good for heuristic?!)
## Exponential VSIDS (EVSIDS)
- Bump by exponential value $g^i = \frac{1}{f}^i$
- `new_score = old_score + (1/f)^i`
- EVSIDS is just NVSIDS but without scaling
$$\frac{f^{-n}}{1-f} \cdot \text{NVSIDS}$$
# Decision heuristic Summary table
- Old score: s
- decay $0 < f < 1$
| STRATEGY | Bumped | not-bumped | |
| -------- | ------------------- | ----------- | -------------------------------------- |
| STATIC | $s$ | $s$ | |
| INC | $s + 1$ | $s$ | |
| SUM | $s + i$ | $s$ | |
| VSIDS | $s / 2 + 1$ | $s / 2$ | Only half every so often (every 256) |
| NVSIDS | $f \cdot s + (1-f)$ | $f \cdot s$ | |
| EVSIDS | $s + f^{-i}$ | $s$ | |
| AVG | $(s+i)/2$ | $s$ | average conflict-index decision scheme |
| VMTF | $i$ | $s$ | Variable Move to Front |
- Turns out AVG (moving average) and EVSIDS are very good
## Variable Move to Front
- Cheap to implement, aggressive