#sat-solver #sat #satisfiability #encoding

rustsat

本库旨在为软件在可满足性问题解决领域的开发提供常用元素的实现。该库的焦点是提供尽可能方便的使用方式,同时不牺牲性能。

10 个不稳定版本 (4 个破坏性更新)

0.5.1 2024年6月12日
0.4.3 2024年2月23日
0.4.0 2023年12月18日
0.3.0 2023年10月30日
0.1.0 2023年7月11日

#137 in 算法

Download history 163/week @ 2024-04-27 10/week @ 2024-05-04 13/week @ 2024-05-11 36/week @ 2024-05-18 31/week @ 2024-05-25 51/week @ 2024-06-01 268/week @ 2024-06-08 87/week @ 2024-06-15 29/week @ 2024-06-22 26/week @ 2024-06-29 54/week @ 2024-07-06 23/week @ 2024-07-13 90/week @ 2024-07-20 130/week @ 2024-07-27 13/week @ 2024-08-03 9/week @ 2024-08-10

每月下载量 248
10 crate 使用

MIT 许可证

3MB
14K SLoC

Build & Test crates.io docs.rs PyPI License

rustsat - Rust 的全面 SAT 库

rustsat 是一个用于在 Rust 中处理布尔可满足性问题的一组接口和工具。本库旨在为可满足性问题解决领域的软件开发提供常用元素的实现。该库的焦点是提供尽可能方便的使用方式,同时不牺牲性能。

示例

let mut instance: SatInstance = SatInstance::new();
let l1 = instance.new_lit();
let l2 = instance.new_lit();
instance.add_binary(l1, l2);
instance.add_binary(!l1, l2);
instance.add_unit(l1);
let mut solver = rustsat_minisat::core::Minisat::default();
solver.add_cnf(instance.as_cnf().0).unwrap();
let res = solver.solve().unwrap();
assert_eq!(res, SolverResult::Sat);
let sol = solver.full_solution().unwrap();
assert_eq!(sol[l1.var()], TernaryVal::True);
assert_eq!(sol[l2.var()], TernaryVal::True);

crate

RustSAT 项目分为多个 crate,它们都包含在 这个仓库 中。以下是该项目包含的 crate:

Crate 描述
rustsat 主库,包含基本类型、特质、编码、解析器等。
rustsat-tools 基于 RustSAT 的小型实用工具集合,可以作为二进制文件安装。有关可用工具的列表,请参阅 此目录,文件头部有工具的简要描述。
rustsat-<satsolver> 用于与 rustsat 一起使用的 SAT 求解器接口。目前为 cadicalkissatglucoseminisat 提供接口。
rustsat-ipasir IPASIR 绑定,用于使用任何符合规范的求解器与 rustsat 一起使用。

安装

要将RustSAT库作为项目依赖项使用,只需运行以下命令:cargo add rustsat。要在项目中使用SAT求解器接口,请运行以下命令:cargo add rustsat-<satsolver>。通常,可以通过crate功能选择SAT求解器的版本,有关详细信息,请参阅相应SAT求解器crate的文档。

要安装rustsat-tools中的二进制工具,请运行以下命令:cargo install rustsat-tools

功能

功能名称 描述
optimization 包括优化(MaxSAT)数据结构等。
multiopt 包括多目标优化数据结构等。
compression 启用解析和写入压缩输入。
fxhash rustsat中使用来自rustc-hash的更快的firefox哈希函数。
rand 启用随机化功能。(例如,打乱子句等。)
ipasir-display 更改LitVar类型的Display trait,以遵循IPASIR变量索引。
bench 启用基准测试。由于需要不稳定Rust,因此位于功能标志之后。
internals 使一些内部数据结构(例如编码)公开。当基于另一个编码的rustsat实现构建更复杂的编码时,这很有用。请注意,内部API可能在发布之间发生变化。

示例

有关示例用法,请参阅rustsat-tools crate中的小型示例工具,位于tools/src/bin。对于更大的示例,您可以查看这个多目标优化求解器

Python绑定

此库还附带实验性的Python绑定,以便从Python使用其编码。Python绑定可在PyPI找到。有关详细信息,请参阅Python API文档

贡献

我们欢迎以拉取请求和建议的形式进行贡献。请首先阅读CONTRIBUTING.md

依赖项

~1.2–3MB
~50K SLoC