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 |
|
#137 in 算法
每月下载量 248
被 10 crate 使用
3MB
14K SLoC
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 求解器接口。目前为 cadical 、kissat 、glucose 和 minisat 提供接口。 |
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 |
更改Lit 和Var 类型的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