Skip to content

v2.15.0

Choose a tag to compare

@rcrida rcrida released this 02 Jun 13:51
· 84 commits to main since this release

What's new

AllDiff GAC propagator (Régin 1994)

Implements the classic bipartite-matching + Tarjan-SCC filter for AllDifferent. Detects naked pairs, triples, and any other Hall-set violation without backtracking — fully replacing pairwise ≠ arc consistency for AllDiff constraints.

Propagation fixpoint loop

AC3 and AllDiff GAC now run in a combined fixpoint loop (PropagationFixpointSolver). Each propagator can enable the other to make further reductions. Many heavily-constrained problems are now solved entirely by propagation with no backtracking at all (e.g. Zebra: 5.5 s → 0.1 s, 66,515 → 20 constraint checks).

Solver chain short-circuit

When any preprocessing step reduces all domains to singletons the forced assignment is validated and returned immediately, skipping IndependentSubproblemSolver, TreeDecompositionSolver, and backtracking entirely.

Tree decomposition guard: minimum-degree pre-check

TreeDecompositionSolver now skips the junction-tree computation when the constraint graph's minimum degree ≥ targetTreewidth. This is an exact early exit: minimum-degree elimination would always produce a clique too large for the decomposer to use. Avoids the expensive graph-elimination computation for dense problems like Sudoku.