如何估算SMT在z3中SAT解决部分所花费的时间?

如何估算SMT在z3中SAT解决部分所花费的时间?,z3,smt,dpll,Z3,Smt,Dpll,我已经使用profiler gprof(stats包括调用图)分析了我的问题(伪非线性)整型实数片段,并试图将花费的时间分为两类: 一) SAT解决部分(包括[纯]布尔传播和[纯]布尔冲突子句检测、回跳、任何其他命题操作) 二) 理论解决部分(包括理论一致性检查、理论冲突子句生成和理论传播) bounded_search()中的3280-3346行是否构成顶级DPLL(X)循环 我相信在SAT解算器函数中总结时间更容易(因为它们更少) 然后剩下的就可以看作是理论求解者的时间了。我想弄清楚我应该考

我已经使用profiler gprof(stats包括调用图)分析了我的问题(伪非线性)整型实数片段,并试图将花费的时间分为两类:

一) SAT解决部分(包括[纯]布尔传播和[纯]布尔冲突子句检测、回跳、任何其他命题操作)

二) 理论解决部分(包括理论一致性检查、理论冲突子句生成和理论传播)

bounded_search()
中的3280-3346行是否构成顶级DPLL(X)循环

我相信在SAT解算器函数中总结时间更容易(因为它们更少) 然后剩下的就可以看作是理论求解者的时间了。我想弄清楚我应该考虑哪些功能在我上面的课上?它们是
smt::context::decise()
smt::context::bcp()
中的
smt::context::propagate()
?还有其他的吗?
smt::context:resolve_conflict()
似乎与对理论求解器的调用混合在一起

除了它的
bcp()
函数外,
smt::context::propagate()
似乎主要是理论传播(class II),这是正确的吗?而且,
smt::context::final_check()
似乎完全在类II中

非常感谢您的任何提示。谢谢。

你说得对,
bcp()
decision()
是“SAT解算器”的一部分。
函数
final\u check()
只是理论推理。它执行Z3“声称”过于“昂贵”的过程。
resolve\u conflict()
过程是混合的:它执行引理学习和回溯。为了生成新的引理,Z3使用布尔解析(位于“SAT部分”)。在一些情况下,
resolve\u conflict
最昂贵的部分是回溯理论解决者的状态。

需要澄清:
smt::conflict\u resolve::resolve
是您提到的引理学习部分(在SAT部分)和
smt::context::pop\u scope\u core()
理论解算器中昂贵的回溯是吗?