如何在建模/检查Z3py中的可满足性时找到所消耗的内存?

时间:2015-05-25 19:50:28

标签: z3 z3py

我正在使用z3py。我试图检查不同大小的不同问题的可满足性,并验证所提方法的可扩展性。但是,要做到这一点,我需要知道解决方案为每个问题消耗的内存。有没有办法访问内存或让z3py在STATISTICS部分打印它。非常感谢你。

更新-27/5/2015:

我尝试使用paython内存分析器,但似乎生成的内存非常大。我不确定,但报告的内存类似于python应用程序消耗的内存,而不仅仅是Z3(构建z3模型并检查sat然后生成模型)。此外,我使用正式的建模检查工具已有多年了。我期待Z3更高效并且具有更好的可扩展性,但是,我得到的内存比paython产生的内存少得多。 我想要做的是尝试使用除内存之外的因素来测量设计大小或可伸缩性。在z3py统计中,生成了许多细节来描述设计大小和复杂性。但是,我无法在教程,网页或z3论文中找到这些参数的任何解释。 例如,您能帮我理解我所拥有的基本模型的统计数据中生成的以下参数。还有任何参数/参数可以取代内存或是Z3门槛大小/复杂性的良好指示。

  • :added-eqs 152
  • :assert-lower 2
  • :assert-upper 2
  • :binary-propagations 59
  • :冲突6
  • :datatype-accessor-ax 12
  • :datatype-constructor-ax 14
  • :datatype-happen-check 19
  • :datatype-splits 12
  • :决定35
  • :del-clause 2
  • :eq-adapter 2
  • :最终检查1
  • :mk-clause 9
  • :offset-eqs 2
  • :传播61

再次感谢您的时间。

2 个答案:

答案 0 :(得分:0)

Z3近似于全局最大内存使用量,但它没有用于跟踪对API的一个特定调用的内存使用情况的工具。在全局内存使用量减少的情况下,这不够(例如,它应该是否定的?)。我认为像Python memory_profiler这样的外部工具可以做得更好。

更新后的问题是反复出现的问题,请参阅以前的答案:Interpretation of Z3 StatisticsWhat is the unit of memory usage in Z3 statistics?Z3 statistics: what does time measure?Z3 real arithmetic and statisticsStatistics in Z3,{{3 }}

答案 1 :(得分:0)

我已将内存消耗的统计信息添加到unstable分支中。 所以到现在为止,您应该可以从统计信息中访问此信息 由Z3返回。