Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SAT验证器python_Python_Sympy_Sat - Fatal编程技术网

SAT验证器python

SAT验证器python,python,sympy,sat,Python,Sympy,Sat,我正在使用python和Symphy 我有以下格式的规则:或(x和(y,z))。 不幸的是,Sympysubs和xreplace函数没有提供足够快的实现来验证上述规则是否满足x=False、y=True和z=True 我如何才能有效地将这个表达式转换为其他库,给定x、y、z和一个规则,无论这个赋值是否满足规则,我都将得到True/False?在纯python中,可以通过两种方式(使用x=True/False,y=True/False,z=True/False)实现这一点: 或者(如0==Fals

我正在使用python和Symphy

我有以下格式的规则:
或(x和(y,z))
。 不幸的是,Sympy
subs
xreplace
函数没有提供足够快的实现来验证上述规则是否满足x=False、y=True和z=True


我如何才能有效地将这个表达式转换为其他库,给定x、y、z和一个规则,无论这个赋值是否满足规则,我都将得到True/False?

在纯python中,可以通过两种方式(使用
x=True/False,y=True/False,z=True/False
)实现这一点:

或者(如
0==False,1==True
):

然后,您可以使用以下方法对所有组合进行迭代:

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()
为了将symphy函数转换为python表达式,您可以尝试:


希望它能像您希望的那样加快您的问题的速度…

您可以在纯python中通过两种方式实现这一点(使用
x=True/False,y=True/False,z=True/False
):

或者(如
0==False,1==True
):

然后,您可以使用以下方法对所有组合进行迭代:

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()
为了将symphy函数转换为python表达式,您可以尝试:


希望这能像你希望的那样加速你的问题…

这些都是很好的建议,但问题是如何有效地将Symphy中的表达式转换为你建议的新形式。@JackStevens:好的,误解了,对不起。添加了一个更新。希望有帮助。谢谢你的建议,看起来不错。我试图在代码中实现它,这导致了另一个问题,我发布了另一个stackoverflow。这是一个很好的建议,但问题是如何有效地将Sympy中的表达式转换为您建议的新形式。@JackStevens:好的,误解了,抱歉。添加了一个更新。希望有帮助。谢谢你的建议,看起来不错。我试图在代码中实现它,结果导致了另一个问题,我发布了另一个stackoverflow。
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()
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))