SAT問題を解決するためにMicrosoftとPython 3のZ3-solverを使用することにしました。目的は長いモデル(最大50万のフィーチャーすべての可能な解決策を見つける。それらを見つけるために、私は最初の方程式に最初の方程式S1を加え、S1を除外したいと思います。 whileループを使ってやります。 フィーチャーモデルを分析したいので、SAT問題を解決することが重要です。Python 3でZ3-solver 'model is not available'例外が発生する
しかし、最初の方程式にsthを追加することに問題があります。 # Successfull...
はz3types.Z3Exception: model is not available
エラーをスローした後、第1の符号化ライン
# 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()
:私は、最小限の例を共有します。だから私は単純にモデルにfalse
を追加する上記の行を試してみました。それはうまく動作します。
ここに貼り付けられています。私はエラーを解決するのは簡単だと信じていますが、私は解決策を見ません。あなたは誰ですか?ありがとう!
お返事ありがとうございます。あなたはここで私が例として挙げた問題の記述について私の心を払った。私の例がうまくいかない理由を説明してくれてありがとう。 –