2016-10-11 6 views
1

나는 70 개의 변수가있는 60 개의 방정식을가집니다.sympy 선형 방정식 XOR, NOT

(X0, X1, ..., x239)이 있습니다 sympy 문자

list_a = [Xor(Not(x40), Not(x86)), Xor(x41, Not(x87)), ...] 

는 내 질문은 가능하면 어떻게 든이 방정식은 행렬을 변환 또는이다 : 그들 모두는 하나 개의 목록에 그들을 풀었다. 나는 하나 이상의 솔루션을 가질 수 있다고 생각한다.

+0

부울 공간에서 선형 방정식 시스템은 실제 숫자에 대한 선형 방정식 시스템과 똑같은 것처럼 보입니다. 귀하의 질문에 명확히 설명해 주시겠습니까, 당신은 알고리즘을 찾고 있습니까, 아니면 이미 가지고있는 알고리즘을 구현하는 방법, 또는 둘 다? – Vovanrock2002

+0

SAT 문제와 비슷합니다. –

+0

둘 다 찾고 있습니다. 알고리즘 및 또한 목록에서 매트릭스로 변환. –

답변

1

논리 표현식 시스템에 대한 해결책은 SAT가 표현식의 결합 (And)을 확인하는 것과 같습니다. 일반적인 경우 기하 급수적으로 많은 솔루션이 있다는 것을 참고 있지만

In [3]: list_a = [Xor(Not(x40), Not(x86)), Xor(x41, Not(x87))] 

In [4]: list_a 
Out[4]: [¬x₄₀ ⊻ ¬x₈₆, x₄₁ ⊻ ¬x₈₇] 

In [5]: satisfiable(And(*list_a)) 
Out[5]: {x87: False, x40: True, x86: False, x41: False} 

당신이 all_models=True 통과 할 수있는 모든 솔루션을 원하는 경우

.

+0

솔루션 주셔서 감사합니다,하지만 만약 내가 120 변수와 60 방정식을 가지고 오랜 시간이 걸립니다. 그것을 더 빨리 만들 가능성이 있습니까? –

+0

어떤 부분이 느린 지에 따라 다릅니다. 일반적으로 cnf 로의 전환이나 SAT 해결 속도가 느립니다. 시스템에 대해'to_cnf (And (* list_a))'를 별도로 실행하여 확인할 수 있습니다. – asmeurer