跳到内容

亚马逊科技/卡迪卡

 
 

许可证:麻省理工学院 生成状态

CaDiCaL简化可满足性求解器

这是的修改版本GitHub上的原始CaDiCaL存储库。我们将此版本的CaDiCaL作为原始CaDiCaL存储库的分支发布,因为这是原始作者Armin Biere的首选。此处显示的CaDiCaL版本可以将其状态的最相关部分(无冗余子句、冗余子句和重建堆栈)存储在文件中,并且它还可以在启动时从文件中读取此状态。这允许您在运行过程中停止CaDiCaL(例如,通过-t吨参数),存储其状态,然后通过加载先前存储的状态来恢复求解器运行。论文中描述了详细信息迁移求解州(Armin Biere、Md Solimul Chowdhury、Marijn J.H.Heule、Benjamin Kiesl和Michael W.Whalen;SAT 2022)。有关存储和恢复状态的使用说明,请参阅本自述文件的末尾。

开发CaDiCaL的目标是获得CDCL解算器这很容易理解和改变,但同时又不是比其他最先进的CDCL解算器慢得多。

最初我们还想从根本上简化设计和内部数据但该目标仅部分实现,例如与玲玲相比。

然而,代码有更好的文档记录,CaDiCaL实际上成为了虽然缺少一些预处理器,但总体速度比Lingeling快(主要是奇偶性和基数约束推理),这将是至关重要的解决某些情况。

使用./configure&&make(./configure&&make)配置和生成卡迪卡牌汽车和图书馆利巴迪卡尔。默认情况下建造子目录。的头文件图书馆是src/cadical.hpp并包括一个示例用于API使用。

请参见建筑.md获取与构建相关的选项和更多详细信息过程和测试/README.md用于测试库和求解器。自1.5.1版以来,我们有一个新闻.md文件。

解算器有以下用法凯迪拉克.请参见卡迪卡-h了解更多选项。

如果要引用CaDiCaL,请使用最新SAT竞赛程序:

@正在进行{Biere Fazekas Fleury Heisinger-SAT竞赛-2020解决方案,author={Armin Biere和Katalin Fazekas以及Mathias Fleury和Maximillian Heisinger},title={{CaDiCaL}、{Kissat}、}Paracooba、{Plingeling}和{Trengeling{参加{SAT竞赛2020}},页数={51--53},editor={托马斯·巴尔约(Tomas Balyo)、尼尔斯·弗罗利克斯(Nils Froleyks)和马里恩·赫勒(Marijn Heule)马库斯·伊瑟(Markus Iser)和马蒂·J(Matti J){“a}维萨洛(rvisalo)和马丁·苏达(Martin Suda}),booktitle={SAT竞赛}2020的{Proc.~——解算器和基准描述},体积={B-2020-1},series={计算机科学系报告系列B},publisher={赫尔辛基大学},年=2020年,}

您还可以在以下网址找到有关CaDiCaL的更多信息:http://fmv.jku.at/cadical网站.

阿明·比尔

存储和恢复状态

使用以下命令行参数存储和恢复状态(下面将进一步描述状态的文件格式):

  • --ic out非冗余子句文件:将无冗余子句写入文件<学习子句文件>在求解器运行结束时。
  • 从文件中读取无冗余子句,只需将它们作为输入公式传递给求解器即可。
  • --lcout<学习型子句文件>:将学习的子句写入文件<学习子句文件>在求解器运行结束时。
  • --lc-in<学习子句文件>:从文件中读取学习的子句<习得的子句文件>启动时。
  • --rsout<重建堆叠文件>:将重建堆栈写入文件<重建堆叠文件>在求解器运行结束时。
  • --rs-in<重建堆叠文件>:从文件中读取重建堆栈<重建堆叠文件>启动时。
  • --国家二进制:以二进制格式写入状态(非冗余子句、冗余子句和重建堆栈),否则使用纯文本格式。此外,如果--国家二进制传递给解算器,则以二进制格式读取重建堆栈,否则以纯文本格式读取。(对于非冗余子句和学习的子句,相应的文件包含足够的信息来区分二进制/纯文本,因此在读取它们时不需要显式标志。)

示例(运行CaDiCaL,超时100秒,并在求解器运行结束时以纯文本格式存储状态):

cadical-t 100--rsout<重建堆栈文件>--lcout<学习子句文件>--icout<非冗余子句文件>

示例(运行CaDiCaL,超时100秒,并在求解器运行结束时以二进制格式存储状态):

cadical-t 100--状态二进制--rsout<重建堆栈文件>--lcout<学习子句文件>--icout<非冗余子句文件>

示例(启动时的读取状态;重建堆栈必须以纯文本格式传递,学习子句和无冗余子句可以以纯文本或二进制格式传递):

cadical--rs-in<重建堆栈文件>--lc-in<学习子句文件>

示例(启动时的读取状态;重建堆栈必须以二进制格式传递,学习子句和无冗余子句可以以纯文本或二进制格式传递):

cadical--状态二进制--rs-in<重建堆栈文件>--lc-in<学习子句文件>

非冗余子句的文件格式

无冗余子句可以存储在常规DIMACS格式或专用二进制DIMACS格式。二进制格式依赖于与DRAT的二进制格式相同的整数编码:文字被映射到正整数,正整数又被编码为可变长度的大字节字符串(检查论文迁移解算器状态详细信息)。

二进制DIMACS文件以开头0x00个也就是说,使用0字节(这个初始的0字节允许解算器/解析器将文件标识为二进制DIMACS文件),然后是一系列子句,其中每个子句由一系列整数表示(按照上述可变长度编码编码),后面是0x00个。与DIMACS类似,正文本在编码之前映射为正整数,负文本映射为负整数。

学习子句的文件格式

learned-clause文件的每一行都包含子句的文字,然后是0,后面是LBD的非负整数,最后是另一个0。更正式地说,文件是行的列表,其定义如下:

<line>=<子句>“0”<glue>“0\n”<子句>=<文字>*<literal>=<数字>|-<数字><胶水>=<数字><数字>=[1-9][0-9]*

例子:

1 3 -2 0 1 02 1 0 2 0-3 -4 -5 0 2 0

在二进制格式中,冗余子句的序列化方式与非冗余子句类似。文件以0字节开头,然后列出子句,唯一的区别是每个子句及其相应的有用性得分U型,我们添加(的可变长度编码)U型在子句的结尾0字节之后。

重建堆栈的文件格式

重构堆栈是自下而上序列化的,这意味着堆栈中较早出现的子句-见证对也将在文件中较早出现。重构堆栈文件的每一行都包含子句的文本,然后是0然后是证人的文字,最后是另一个0。更正式地说,文件是行的列表,其定义如下:

<line>=<子句>“0”<clause>“0\n”<子句>=<文字>*<literal>=<数字>|-<数字><数字>=[1-9][0-9]*

在当前版本中,解算器仅生成具有一个文字的见证。

例子:

1 3 -2 0 1 02 1 0 2 0-3 -4 -5 0 -3 0

在二进制格式中,我们不使用0字节启动文件。这允许直接连接多个重建堆栈文件,这通常很有用。给定重建堆栈=(C)1,周1),...,(C)n个,周n个),我们可以将其作为列表C查看1,周1,...,C类n个,周n个子句,然后以与无冗余子句相同的方式进行编码,在每个子句后添加一个0字节。

关于

CaDiCaL SAT求解器

资源

许可证

行为准则

安全政策

星星

观察者

叉子

包装

未发布包

语言文字

  • C类++ 90.3%
  • C类 6.7%
  • 壳牌公司 2.9%
  • 生成文件 0.1%