Z3을 사용하여 12000+ 부울 변수로 SAT 문제를 풀려고합니다. 대부분의 변수는 솔루션에서 false로 평가 될 것으로 예상됩니다. Z3을 "극성 거짓"을 먼저 시도하는 SAT 해결사로 안내하거나 알려주는 방법이 있습니까? 나는 cryptominisat 2로 시도해 봤는데 좋은 결과를 얻었습니다.Z3 Z3을 SAT 솔버로 사용하는 극성
답변
Z3은 해독기와 전 처리기 모음입니다. 우리는 일부 해결사에 대한 힌트를 제공 할 수 있습니다. (check-sat)
명령을 사용하면 Z3이 자동으로 솔버를 선택합니다. 솔버를 직접 선택하려면 (check-sat-using <strategy>)
해야합니다. 예를 들어, 다음 명령은 Z3에 부울 SAT 해결자를 사용하도록 지시합니다.
(check-sat-using sat)
우리는 항상 사용하여 첫 번째 "거짓 극성을"시도를 강제 할 수
(check-sat-using (with sat :phase always-false))
우리는 또한 전처리 단계를 제어 할 수 있습니다. 우리가 sat
를 호출하기 전에 CNF 수식을 넣고 싶은 경우에, 우리는 사용한다 :
(check-sat-using (then tseitin-cnf (with sat :phase always-false)))
편집을 : 당신이 DIMACS 입력 형식과 Z3의 v4.3.1를 사용하는 경우, 다음 매개 변수를 설정할 수 없습니다 명령 줄을 사용하여 사용 가능한 모든 해결사. 다음 릴리스에서는이 제한 사항을 해결합니다. 그 사이에
git clone https://git01.codeplex.com/z3 -b unstable
을 사용하여 작업중인 지점을 다운로드하고 Z3을 컴파일 할 수 있습니다. 그런 다음, 극성 거짓을 강제로, 우리는이 모듈에 사용할 수있는 모든 옵션을 표시합니다 명령 줄 옵션
sat.phase=always_false
명령 z3 -pm:sat
을 사용합니다. 스택 오버플로
(declare-const p Bool)
(declare-const q Bool)
(declare-const r Bool)
(declare-const s Bool)
(assert (or (not p) (not q) (not r)))
(assert (or r s))
(assert (or r (not s)))
(assert (or r (and p q)))
(echo "With always false")
(check-sat-using (then tseitin-cnf (with sat :phase always-false)))
(get-model)
(echo "With always true")
(check-sat-using (then tseitin-cnf (with sat :phase always-true)))
(get-model)
답장을 보내 주셔서 감사합니다. –
현재 Z3의 입력 형식으로 DIMACS를 사용하고 있습니다. 힌트를 사용하기 위해 DIMACS/CNF 절을 SMT 형식으로 번역해야합니까? 나는 Z3가 불리언 표현의 SMT 세트로 공식화 된 나의 원래 문제를 해결하도록 노력했다. 하지만 저는 SAT 솔버가 제 경우보다 훨씬 빠르다는 것을 알았습니다. –
DIMACS 입력 형식과 관련된 정보로 답변을 업데이트했습니다. –
- 1. MAX-SAT 용 Z3 활용 관련 문제
- 2. 목표와 전술을 사용하는 Z3
- 3. 극성
- 4. z3 바이너리와 z3 api 간의 결과가 다릅니다
- 5. z3 with SMTlib2 입력
- 6. Python의 Z3 코드
- 7. z3을 점진적으로 사용하고 명제 값없이 모델링하는 방법
- 8. Z3 4.0 Z3_parse_smtlib2_string
- 9. 푸시 통화가 있거나없는 UFBV에서 Z3 증분 호출
- 10. Python없이 posix 시스템에 Z3 설치?
- 11. Z3/파이썬 실수 Z3/파이썬 웹 인터페이스와
- 12. Z3 Python API - 사용 가능시기
- 13. Z3 한정어 지원
- 14. 는 Z3
- 15. Z3을 증분 모드에서 사용할 수 있습니까?
- 16. Z3 QBVF 질문
- 17. Z3 ast_to_string() 뺄셈이있는 API
- 18. Z3 명명 API에서 바인딩을 사용하자
- 19. Z3 TPTP proofs에서 구내/공리 사용
- 20. Z3을 사용하여 문제를 사전 처리 할 수 있습니까?
- 21. 이상한 Z3 모델 값
- 22. 잘못된 결과 from z3
- 23. z3을 사용하는 고정 소수점 변수의 제약 조건을 얻는 방법은 무엇입니까?
- 24. 충돌 응답 (SAT) 문제
- 25. -3- CNF-SAT
- 26. SAT 전처리를위한 해시 함수
- 27. Z3 테스트 예제를 컴파일하면 빌드 오류가 발생합니다.
- 28. z3 모델의 배열 용어 값
- 29. SAT 란 무엇이며 무엇이 좋은가?
- 30. Z3 maxsat smtlib 2.0
에 오신 것을 환영합니다 :
여기 END 편집
는 SMT 2.0의 완전한 예 (도 가능 online)입니다! 너 뭐 해봤 니? – IronMan84
복잡성이 증가하는 CNF/DIMACS 파일을 여러 개 생성했습니다. 일부는 Z3/DIMACS에서 즉시 해결할 수 있습니다. 다른 사람들은 몇 시간이 걸리거나 전혀 끝나지 않습니다. 나는 Cryptominisat 2를 파일에 사용했으며 "--polarity-mode = false"를 추가 한 후에 더 많은 파일을 얻었습니다. Z3의 INI 매개 변수에서 극성과 관련된 매개 변수를 찾을 수 없습니다. 따라서, 나는 여기에 stackoverflow에서 영리한 힌트를 찾기를 바라고있다. –