(수학) 문제를 SAT 인스턴스로 변환


22

내가하고 싶은 것은 수학 문제를 부울 만족도 문제 (SAT)로 바꾸고 SAT 해 찾기를 사용하여 해결하는 것입니다. 누군가가 매뉴얼, 가이드 또는 내 문제를 SAT 인스턴스로 변환하는 데 도움이되는 것을 알고 있는지 궁금합니다.

또한, 나는 이것을 지수 시간보다 더 나은 시간에 해결하고 싶습니다. SAT 솔버가 도움이 되길 바랍니다.


1
SAT는 효율적인 방법은 없지만 다음 슬라이드를
Fayez Abdlrazaq Deab

또한 여기에서 살펴 보시기 바랍니다 : cs.stackexchange.com/questions/12135/convert-problem-to-cnf
Dchris

cryptlogver라는 무언가를 테스트하려는 경우를 대비하여 다른 것을 시도하기 전에 빠르고 더러운 솔루션 입니다. 이 도구는 암호화에 중점을두고 있지만 트릭을 수행 할 것이라고 말합니다. 또한 사용할 언어의 구문은 매우 유사하므로 많은 문제가 없습니다. 설치는 어렵지 않지만 쿼터는 크므로 커피를 마 십니다.
absinthe_minded

답변:


20

SAT 핸드북 2 장 (Steven Prestwich) 은 불연속 결정 문제를 CNF로 전환하는 방법에 대해 자세히 설명합니다. (불행히도 온라인에는 초안 버전이 없다고 생각합니다. 아마도 지역 도서관에 문의하는 것이 가장 좋습니다.) Magnus Björk의 기발한 개요에서 인용 된 다른 참고 문헌들 중 성공적인 SAT 인코딩 기술 도 유용합니다.

문제가 계속되거나 불균형 시스템에 특히 관심이 있다면 다른 종류의 솔버가 유용 할 가능성이 높습니다. Kyle이 지적했듯이 SMT 솔버 (예 : Z3 , Yices 또는 OpenSMT )는 유용 할 수 있지만, 일반적으로 SMT 이론은 컴퓨터 소프트웨어의 검증에 중점을 두는 경향이 있으므로 SMT 솔버는 일반적으로 정수 간격을 포함하는 표현식과 같은 항목을 크게 지원합니다. 인젝션 제약 조건에서 성능이 저하 될 수 있습니다. 자연적으로 불평등 시스템으로 표현되는 문제의 경우 CPLEX 가 이길 수있는 것입니다 (이는 학문적 용도로 무료로 사용할 수 있었지만 여전히있을 수 있습니다). 조합 결정 문제 (예 : 찾기)사각형을 정사각형으로 패킹 ), Minion 과 같은 구속 조건 솔버가 SAT 솔버보다 성능이 우수하며 종종 사용하기가 더 쉽습니다.


13

수학적 문제를 학습 연습으로 SAT 인스턴스로 변환하지 않는 한, 만족도 모듈러스 이론 에 대해 배우는 데 훨씬 더 많은 시간을 할애 할 것 입니다. SMT를 사용하면 부울 SAT 인스턴스보다 훨씬 자연스럽게 방정식 및 기타 제약 조건을 표현할 수 있습니다. 일부 SMT 솔버는 실존 및 범용 정량자를 지원하므로 NP를 넘어 PSPACE 문제를 표현할 수 있습니다.

보다 표현력이 뛰어나고 SMT 솔버가 더 빠릅니다. 좋은 SMT 솔버가 검색 공간을 통해 솔버를 안내하는 데 도움이되는 이론 별 구조 정보를 버리지 않으므로 P = NP가 빠르지는 않지만 더 효율적입니다. Karp 축소를 SAT 인스턴스에 직접 수행하면 SAT 솔버가 종종 모든 지수 구조를 종종 기하 급수적으로 재 학습합니다. 예를 들어, DPLL 기반 및 로컬 검색 기반 SAT 솔버 둘 다에서 덧셈이 교환 적이라는 사실이 사라집니다. 솔버는 숫자를 전혀 다루지 않는다는 것을 인식하지 못합니다! x + y + z = 10의 모든 순열을 시도하지 않으려면 SAT 솔버에 대칭형 코드가 필요합니다.이 코드에는 그래프 자동 형성 감지가 필요합니다. 가장 현재의 그래프 자 형성 인식 알고리즘은 최악의 경우 정점의 수에 대한 시간 지수를 요구합니다.


2
특정 SMT 솔버를 제안 하시겠습니까?
Dchris

5

고급 언어를 SMT 또는 CNF로 변환하는 두 가지 도구.

CVC 구문은 CAS에 가깝습니다.

CBMC C 프로그램을 CNF로 변환하여 어설 션을 허용합니다. 어설 션은 항상 참이거나 거짓 인 경우 반례 입력이 발견됩니다. CBMC는 루프를 언 롤링하므로 특정 C 프로그램은 지수 적으로 큰 CNF / SMT를 갖습니다.


CBMC가 임의의 C 프로그램을 CNF로 변환하지 않는 것 같습니다. 정수 오버 플로우, 버퍼 오버 플로우 등에 대한 정적 분석을 수행하는 C 프로그램을 기반으로 CNF를 작성합니다.
vy32
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.