避免Z3中大模型的截断

避免Z3中大模型的截断,z3,z3py,Z3,Z3py,对于大型模型,通过Z3 Python API使用的函数model()会截断输出(在某些情况下,模型会以“…”继续) 有没有办法避免这种情况?我有下面的函数,它试图将str(self.solver.check())给出的答案和str(self.solver.model())给出的模型保存到文件名中 问题的结果是: sat[C5_VM1 = 0, ... //these "..." are added by me VM6Type = 6, ProcProv11 = 18, VM2Type = 5,

对于大型模型,通过Z3 Python API使用的函数model()会截断输出(在某些情况下,模型会以“…”继续)


有没有办法避免这种情况?

我有下面的函数,它试图将str(self.solver.check())给出的答案和str(self.solver.model())给出的模型保存到文件名中

问题的结果是:

sat[C5_VM1 = 0,
... //these "..." are added by me
VM6Type = 6,
ProcProv11 = 18,
VM2Type = 5,
...]

在所有被截断的文件中,“…]”出现在第130行。我不知道是Python还是Z3。如果模型可以写在不到130行的代码上,那么一切都很好。

如果我没记错的话,这是Python的“特性”。不要使用
str(…)
尝试使用
repr(…)
,它应该生成一个可以被解释器读回(如果需要)的字符串。当然,您可以分别迭代模型元素,以便使需要输出的所有字符串变小。例如,沿着这些路线:

s = Solver()
# Add constraints...
print(s.check())
m = s.model()
for k in m:
     print('%s=%s' % (k, m[k]))

用额外的代码和响应示例扩展您的问题可能会增加在此处获得好答案的可能性。莱昂纳多的这一早期答案似乎也很相关:试试这个:
s = Solver()
# Add constraints...
print(s.check())
m = s.model()
for k in m:
     print('%s=%s' % (k, m[k]))