누구나 #SAT 솔버의 실제 구현을 다운로드 할 수있는 하나 이상의 웹 사이트를 가리킬 수 있습니까? 나는 근사치가 아닌 정확한 솔루션 수를 반환하는 사람들에 관심이 있습니다.
누구나 #SAT 솔버의 실제 구현을 다운로드 할 수있는 하나 이상의 웹 사이트를 가리킬 수 있습니까? 나는 근사치가 아닌 정확한 솔루션 수를 반환하는 사람들에 관심이 있습니다.
답변:
http://www.sat4j.org/howto.php#models의 모든 모델을 반복 하여 SAT4J로이를 수행 할 수 있습니다 . 대부분의 SAT 솔버에이 기능이 있다고 생각합니다.
한 가지 옵션은 JavaBDD 와 같은 BDD 라이브러리를 사용하는 것 입니다. 이러한 모든 라이브러리에는 솔루션을 빠르게 계산하는 함수가 있거나 적어도 그러한 함수를 쉽게 작성할 수 있습니다. 그러나 단점은 BDD 구성이 많은 경우에 느리고 메모리가 많이 필요할 수 있다는 것입니다.
CNF로 입력 한 경우 BDD의 구성 속도를 높이는 간단한 휴리스틱은 다음과 같습니다. 먼저 각 절에 대해 작은 BDD를 작성하고 루트가 가장 작은 BDD 인 우선 순위 큐에 넣으십시오. 둘째, BDD 두 개를 팝하고 그 사이에 AND를 계산 한 다음 결과를 우선 순위 큐로 푸시하십시오. 아이디어는 다음과 같습니다. 크기 과 n의 BDD 사이에서 AND를 계산하는 데 이론적으로 O ( m n ) 가 걸리지 만 실제로는 ~ m + n 이 걸리므로 런타임을 최소화하는 것은 허프만 코드를 찾는 것과 같습니다.
관련 주제 : 최상의 SAT 솔버 .
내가 찾은 최고의 것은 "c2d compiler"입니다. http://reasoning.cs.ucla.edu/c2d/
d-DNNF를 사용하며 -count 옵션 이 필요합니다 .
여기에 제공된 MBound Solver는 http://www.cs.cornell.edu/~sabhar/ 에서 확률 적 보증으로 모델 수를 제공 할 수 있습니다. 모든 솔루션을 열거하는 것보다 훨씬 빠릅니다.
작은 모델 / 프라임 관련 열거자를 작성했습니다 . 모델 열거로 모델 카운팅에 이미 사용할 수 있지만 실용적이지는 않습니다. 관심있는 사람이 있으면 확장하여 주된 함축 모델의 모델을 계산할 수 있습니다.
포도당은 보르도 대학에서 개발 된 매우 효율적인 SAT 솔버입니다.