Skip to main content

Revisiting SATZilla in 2024

Code for the paper: "Revisiting SATZilla Features in 2024" by Hadar Shavit and Holger H. Hoos accepted to SAT 2024.

Abstract

Boolean satisfiability (SAT) is an $\mathcal{NP}$-complete problem with important applications, notably in hardware and software verification. Characterising a SAT instance by a set of features has shown great potential for various tasks, ranging from algorithm selection to benchmark generation. In this work, we revisit the widely used SATZilla features and introduce a new version of the tool used to compute them.
In particular, we utilise a new preprocessor and SAT solvers, adjust the code to accommodate larger formulas, and determine better settings of the feature extraction time limits. We evaluate the extracted features on three downstream tasks: satisfiability prediction, running time prediction, and algorithm selection. We observe that our new tool is able to extract features from a broader range of instances than before. We show that the new version of the feature extractor produces features that achieve up to $25%$ lower RMSE for running time prediction, up to $5%$ higher accuracy for satisfiability prediction, and up to $80%$ higher closed gap for algorithm selection on benchmarks from recent SAT competitions.

Usage

We provide precompiled binaries for the SATZilla feature extraction tool for linux. Currently the SATZilla features extractor supports only linux.

SAT-feature-computation code contains the new SATZilla feature extraction tool.

Recompile by running make, then the executable features will be created.

To run a package-level smoke test for the extractor, use make test inside SAT-features-competition2024.

To compute features, simply run ./features [--timeout SECONDS] [--group-timeout SECONDS] [--preprocess-timeout SECONDS] [-base] [-structure] [-ncnf-graphs] [-ncnf-constraints] [-ncnf-rwh] [-dia] [-ls] [-lp] [-lobjois] INFILE OUTFILE Where -lp, -dia etc are the feature groups:

  • base: Base feature group, including pre, KLB, and clause graph
  • structure: Structural features from SATfeatPy
  • ncnf-graphs: New-CNF graph features
  • ncnf-constraints: New-CNF constraint features
  • ncnf-rwh: New-CNF recursive weight heuristic features
  • dia: Diameter
  • ls: Local search (both GSAT and Sparrow)
  • lp: Linear programming
  • lobjois: Lobjois
  • cl: Clause learning
  • unit: Unit propagation
  • sp: Survey propagation

To compute all features use the -all option. The input INFILE is a DIMACS CNF file. NOTE: currently, only raw CNF files are supported, and not compressed one (like .cnf.xz) The output is a CSV file containing the features for one instance.

Timeout controls:

  • --timeout: total extraction timeout
  • --group-timeout: per-feature-group timeout override; timed-out groups emit reserved values and extraction continues with the next selected group
  • --preprocess-timeout: timeout override for the preprocessing step

Python Interface

Install from PyPI:

pip install satzilla

An importable Python interface is available in the satzilla_features package. It accepts PySAT CNF formulas directly and calls the extractor through a bundled shared library using ctypes; it does not shell out to the CLI.

PySAT documents that pysat.formula.CNF exposes clauses and nv, and supports DIMACS I/O: https://pysathq.github.io/docs/html/api/formula.html

Example:

from pysat.formula import CNF
from satzilla_features import extract_features

cnf = CNF(from_clauses=[[-1, 2], [-2, 3], [1, 3]])
features = extract_features(
    cnf,
    groups=["base", "structure", "ncnf-graphs"],
    group_timeout=180,
)
print(features["variable_alpha"])

You can also extract directly from a CNF file path with extract_features_from_path(...). Both Python entry points accept timeout=..., group_timeout=..., and preprocess_timeout=....

When building the Python package, the C/C++ extractor is compiled into libsatzilla_features.so and packaged together with the solver binaries it needs at runtime. The direct Python interface is currently Linux-only.

Experiments

rt_pred.py contains the code for running time prediction. sat_pred.py contains the code for satisfiability prediction. Both are using submitit for execution on a SLURM cluster. For algorithm selection, the scenarios are available in the aslib directory. The AutoFolio code is available at https://github.com/hadarshavit/AutoFolio.

Contact

To contact us, please send an email to shavit@aim.rwth-aachen.de

Metadata

Release files for satzilla 0.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for satzilla 0.0.1
File Size Uploaded
satzilla-0.0.1.tar.gz 7.6 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for satzilla 0.0.1
File Interpreter ABI Platform
satzilla-0.0.1-py3-none-any.whl Python 3 none any Details

Total release size: 12.7 MB

Release files / satzilla-0.0.1.tar.gz

Download URL satzilla-0.0.1.tar.gz
Size 7.6 MB
Tags Source
SHA-256 checksum
How to use checksums
154912eb0f39e14ac381e199b9ad0ea4517e0c80bd13f7e29c7ba2c969e3f496
BLAKE2b-256 checksum
How to use checksums
aa54205e91b74ec1981e123c04ec79b100e6a698d02042c594bade32b42dd138
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.12.9

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Mar 23, 2026.

Transparency log

Release files / satzilla-0.0.1-py3-none-any.whl

Download URL satzilla-0.0.1-py3-none-any.whl
Size 5.1 MB
Tags Python 3
SHA-256 checksum
How to use checksums
ee0ae593e6441a8ddfc53b044dde9acfd0cbc3472d95cc47c50e6decbd5c5aa9
BLAKE2b-256 checksum
How to use checksums
fe23198c3d031cb216fa2c78a2a0f1bd83d3810ce6436206edcc9b2925f3bea8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.12.9

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Mar 23, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.0.1 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page