对于大型模型,通过Z3 Python API使用的函数model()会截断输出(在某些时候,模型以“......”继续)。
有没有办法避免这种情况?
答案 0 :(得分:0)
我有下面的函数,它尝试将str(self.solver.check())给出的答案和str(self.solver.model())给出的模型保存到fileName中
def createSMT2LIBFileSolution(self, fileName):
with open(fileName, 'w+') as foo:
foo.write(str(self.solver.check()))
foo.write(str(self.solver.model()))
foo.close()
问题的输出是:
sat[C5_VM1 = 0,
... //these "..." are added by me
VM6Type = 6,
ProcProv11 = 18,
VM2Type = 5,
...]
“...]”出现在截断的所有文件的第130行。我不知道是Python还是Z3。如果模型可以写在少于130行,一切都很好。
答案 1 :(得分:0)
如果我没记错的话,这是一个Python“功能”。而不是str(...)
尝试使用repr(...)
,它应该产生一个可以被解释器回读(如果需要)的字符串。您当然可以单独迭代模型元素,以便使所有字符串都需要输出更小。例如,沿着这些方向:
s = Solver()
# Add constraints...
print(s.check())
m = s.model()
for k in m:
print('%s=%s' % (k, m[k]))