2017-02-03 16 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

вы можете сделать это в чистом питоне 2 способами (с x=True/False, y=True/False, z=True/False):

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) для. –

 Смежные вопросы

  • Нет связанных вопросов^_^