2017-02-03 2 views
1

私はpythonとSympyを使用しています。SAT Verifier Python

私は以下のフォーマットの規則を持っています:Or(x,And(y,z))。残念ながら、Sympy subsおよびxreplace関数は、上記の規則がx = False、y = Trueおよびz = Trueに対して満たされているかどうかを検証するための十分な実装を迅速に提供しません。

この式をx、y、zを与えた他のライブラリに効率的に変換するにはどうしたらいいですか?この割り当てがルールを満たしているかどうかはTrue/Falseになりますか?

答えて

0

あなたは(x=True/False, y=True/False, z=True/Falseで)2通りの方法で、純粋なPythonでそれを行うことができます。

x or (y and z) 

かを(0 == False, 1 == Trueとして):

x | (y & z) 

あなたは、その後ですべての組み合わせを反復処理できます。

from itertools import product 

for x, y, z in product((True, False), repeat=3): 
    print(x, y, z) 
    print(x or (y and z)) 
    print(x | (y & z)) 
    print() 

sympy関数をpython exprに変換するためです。 essionあなたはlambdify moduleを試みることができる:あなたが願う限り多くの問題をスピードアップ

from sympy import lambdify, Or, And, var 

x, y, z = var('x y z') 
or_and = lambdify((x, y, z), Or(x, And(y, z))) 
print(or_and(True, False, False)) 

希望...

+0

これらは良い提案ですが、質問は効率的にためSympyでどのような表現に変換する方法でありますあなたが提案した新しいフォーム。 –

+0

@JackStevens:大丈夫、誤解されました、申し訳ありません。アップデートを追加しました。助けてくれることを望む。 –

+0

提案していただきありがとうございます。私は別のstackoverflow [質問](https://stackoverflow.com/questions/42045906/typeerror-return-arrays-must-be-of-arraytype)を投稿した別の問題が発生した私のコードで実装しようとしました。 -using-lambdify-of-sympy-in-python)のために。 –

関連する問題