爲了解決SAT問題,我決定使用Microsoft和Python 3的Z3解算器。目標是獲取長模型(多達500,000個特徵)並找到所有可能的解決方案。要找到它們,我想將第一個解S1添加到初始方程中,並排除S1等等。我會用while循環來做。 解決SAT問題對我來說很重要,因爲我想分析特徵模型。Z3解算器拋出'模型不可用'python 3上的異常3
但是我面臨着在初始方程中增加某些問題。我將分享一個最小的例子:
# Import statements
import sys
sys.path.insert(0,'/.../z3/bin')
from z3 import * # https://github.com/Z3Prover/z3/wiki
def main():
'''
Solves after transformation a given boolean equation by using the Z3-Solver from Microsoft.
'''
fd = dict()
fd['_r'] = Bool('_r')
fd['_r_1'] = Bool('_r_1')
equation = '''And(fd.get("_r"),Or(Not(fd.get("_r")),fd.get("_r_1")))'''
# Solve the equation
s = Solver()
exec('s.add(' + equation + ')')
s.check()
print(s.model())
###################################
# Successfull until here.
###################################
s.add(Or(fd['_r'] != bool(s.model()[fd.get('_r')])))
# s.add(Or(fd['_r'] != False))
s.check()
print(s.model())
if __name__=='__main__':
main()
第一編碼的線# Successfull...
後拋出z3types.Z3Exception: model is not available
錯誤。所以我嘗試了上面的一行,簡單地將false
添加到模型中。這工作得很好。
我被困在這裏。我相信這個錯誤很容易解決,但我看不到解決方案。你們中的一個?謝謝!
感謝您的回答。作爲一個例子,你已經清楚了我對這個問題的描述。感謝您解釋我的示例無法解決的原因。 –