2017-03-17 24 views
1

在pysmt,假設我已經創建了一個解算器和增加了許多斷言。現在,我想製作解算器實例的副本,因爲我需要向解算器添加不同的斷言。我該怎麼做?我需要這樣做才能提高代碼的性能。如何複製在pysmt創造了一個求解?

我試圖做這樣的事情副本(),克隆()和deepcopy的(),但他們都沒有工作。所以我目前的解決方法是現在跟蹤所有的斷言,創造新的求解器的實例,並從頭開始每次建立起來。

回答

0

對於您的情況,最簡單的似乎是如下:

您可以檢索使用「斷言()」方法從求解器的所有斷言。

from z3 import * 
x, y = Ints('x y') 
s1 = Solver() 
s1.add(x <= y) 
print s1 
s2 = Solver() 
s2.add(s1.assertions()) 
print s2 
+0

爲pysmt,似乎並不像我能做到這一點,但在任何情況下,我可以從pysmt移開如果需要的話。如果我按照您提及的方式進行呼叫,我是否獲得顯着的績效改進? – adrianX

+1

pysmt似乎不支持任何這樣的功能呢,但他們提供了一種方法來訪問的功能不是由他們的圖書館包裹,在這裏看到:http://pysmt.readthedocs.io/en/latest/tutorials.html#how -to-訪問功能-的解決者而不是-目前包裹按pysmt –

+0

你好克里斯托夫,是有幫助!應該更徹底地閱讀文檔。謝謝! – adrianX