我正在尝试使用Z3 API
for python寻找最佳解决方案。我已经使用set_option("verbose", 1)
打印Z3
在检查sat时生成的语句。它打印的语句之一是 pb.conflict 语句。语句看起来像这样-
pb.conflict statements。
我想知道 pb.conflict 到底是什么。这些陈述意味着什么?另外,与它一起打印的两个数字是什么?
答案 0 :(得分:0)
pb
代表伪布尔值。伪布尔函数是从布尔值到其他域(通常为Real
)的函数。当选择变量导致不满意的子句集时,发生conflict
,此时求解器必须回溯。将回溯保持在最低水平对于提高效率至关重要,许多SAT引擎都会仔细跟踪该数字。尽管详细信息完全是特定于求解器的(即您要询问的那两个数字),但数字通常越大,求解器遇到的冲突越多,因此可能决定完全重置状态或采取其他措施。通常,用户可以设置一些参数来指定何时采取此类措施以及确切采取何种措施。但是,这完全是求解器和实现的专用。
通过Google搜索伪布尔优化,您可能会想读一堆学术文章。
如果您真的想找到Z3对伪布尔的处理方式,那么最好的选择就是看一下实现本身:https://github.com/Z3Prover/z3/blob/master/src/smt/theory_pb.cpp