SAT 솔버에 대한 1-out-of-n 제약 조건 인코딩


25

문제를 인코딩하기 위해 SAT 솔버를 사용하고 있으며 SAT 인스턴스의 일부로 부울 변수 있는데 그중 하나가 참이고 나머지는 거짓이어야합니다. . (이것은 때때로 "one-hot"인코딩으로 묘사되는 것을 보았습니다.)x1,x2,,xn

SAT 에서 제약 조건을 " 중 정확히 하나 여야합니다 "를 인코딩하려고 합니다. SAT 솔버를 최대한 효율적으로 실행하려면이 제약 조건을 인코딩하는 가장 좋은 방법은 무엇입니까?x1,,xn

이 제약 조건을 인코딩하는 여러 가지 방법을 볼 수 있습니다.

  • 쌍 제한. 모든 에 대해 페어 단위 제약 조건 를 추가 하여 최대 하나의 x_i 가 true 인지 확인한 다음 x_1 \ lor x_2 \ lor \ cdots \ lor x_n 을 추가하여 하나 이상이 true인지 확인할 수 있습니다. . i , j x i x 1x 2x n¬xi¬xji,jxix1x2xn

    이는 추가 Θ(n2) 조항 및 별도 부울 변수.

  • 이진 인코딩. 내가 소개 할 수 lgn 새 부울 변수는 i1,i2,,ilgn (이진) 정수를 표현하기 위해 i 있도록 1in (몇 부울 제약 조건을 추가 보장하기 위해 그 i 원하는 범위에 있습니다). 그런 다음 xi 가 tree이고 다른 모든 xj 가 false 임을 강제하는 제약 조건을 추가 할 수 있습니다 . 즉, 각 j 에 대해 i = j \ Leftrightarrow x_j를j 적용하는 절을 추가합니다 .i=jxj

    이것은 Θ(nlgn) 절을 추가하고 몇 개의 추가 부울 변수를 모릅니다.

  • 참값의 수를 세십시오. 부울 가산기 회로 트리를 구현하고 x1+x2++xn=1 을 요구하여 각 xi 를 false 또는 true 대신 0 또는 1로 처리 하고 Tseitin 변환을 사용하여 회로를 SAT 절로 변환 할 수 있습니다. 반가산기 트리는 다음과 같이 충분합니다. 각 반가산기의 캐리 출력을 0으로 제한하고 트리에서 최종 반가산기의 최종 출력을 1로 제한합니다. 트리는 임의의 모양을 갖도록 선택할 수 있습니다 ( 균형 이진 트리 또는 불균형 등).

    이는 Θ(n) 게이트 에서 수행 할 수 있으므로 Θ(n) 절과 Θ(n) 새 부울 변수를 추가합니다.

    이 방법의 특별한 경우는 부울 변수 y_1, \ dots, y_n 을 도입 y1,,yn하는 것입니다. yix_1 \ lor x_2 \ lor \ cdots \ lor x_i 의 값을 포함해야 한다는 생각과 함께 부울 변수 y_1, \ dots, y_n도입 합니다 x1x2xi. 이 의도는 yi¬xi , yi¬yi1\ neg y_i \ lor x_i \ lor y_ {i-1} 절을 추가하여 시행 할 수 있습니다 ¬yixiyi1(여기서 y0i = 1, \ dots, n의 경우 false와 동의어입니다 i=1,,n. 다음으로, i = 1,2, \ dots, n-1에 대해 \ neg y_i \ lor \ neg x_ {i + 1} 제한을 추가 할 수 있습니다 . 이것은 기본적으로 반가산기 트리의 Tseitin 변환과 동일하며, 트리는 최대 불균형 모양을 갖습니다.¬yi¬xi+1i=1,2,,n1

  • 나비 네트워크. 비트 에 버터 플라이 네트워크 를 구축 하고 비트 입력을 으로 제한하고 비트 출력을 으로 제한하고 각 2 비트 버터 플라이 게이트를 독립 게이트로 취급 할 수 있습니다 제약되지 않은 새 부울 변수를 기반으로 수행 할 결정으로 입력을 교체하거나 교체하지 않습니다. 그런 다음 회로를 SAT 절로 변환하기 위해 Tseitin 변환을 적용 할 수 있습니다.n 000 01 n x 1 x 2x nnn00001nx1x2xn

    여기에는 게이트가 필요하므로 절과 새 부울 변수가 추가됩니다.Θ(nlgn)Θ(nlgn)Θ(nlgn)

내가 간과 한 다른 방법이 있습니까? 어느 것을 사용해야합니까? 누구든지 이것을 테스트하거나 실험적으로 시험해 보았습니까? 아니면 경험이 있습니까? SAT 솔버 성능에 미치는 영향을 추정하기위한 절 수 및 / 또는 새로운 부울 변수 수는 좋은 독립형 지표입니까, 그렇지 않은 경우 어떤 지표를 사용 하시겠습니까?


나는 이 답변 에 SAT에 대한 카디널리티 제약 조건을 시행하는 것에 대한 참조가 있음을 알았습니다 . 즉, 변수 중 정확히 개가 참 이라는 제약 조건을 시행하는 것입니다 . 그래서 제 질문은 특별한 경우에 해당 합니다. 카디널리티 제약에 관한 문헌이 내 질문에 빛을 발하는 데 도움이 될 것입니다.n k = 1knk=1


대부분의 최신 SAT 솔버는 카디널리티 조항 및 CNF가 아닌 기타 특수 제한 조건을 즉시 지원합니다.
Dávid Horváth

답변:


12

k = 1 인 경우 k가 1 인 변수 중 k의 특수한 경우에 대해 Klieber와 Kwon이 1에서 N 개의 객체를 선택하기위한 효율적인 CNF 인코딩에 설명 된대로 커맨더 변수 인코딩이 있습니다. 단순화 : 변수를 작은 그룹으로 나누고 사령관 변수의 상태가 변수 그룹이 모두 거짓이거나 모두 하나라는 거짓임을 암시하는 절을 추가합니다. 그런 다음 동일한 알고리즘을 커맨더 변수에 반복적으로 적용하십시오. 프로세스가 끝나면 소수의 최종 사령관 변수 중 정확히 하나가 사실이어야합니다. 결과는 O (n) 개의 새로운 절과 O (n) 개의 새로운 변수입니다.

DPLL 기반 솔버에서 2- 워치 리터럴의 편재성을 감안할 때, O (n) 절 성장은 더 많은 절을 추가하는 인코딩 체계보다 결정적인 이점이라고 생각합니다.


2
"소규모 그룹"의 크기가 2이면 이진 추가 일뿐입니다. 여기서 "명령자"는 결과 비트이며 캐리는 거짓입니다. 재귀 적 으로이 방법은 완전히 일반적이며 (N 중 1에서 작동) 실제로 실제로 가능합니다.
d8d0d65b3f7cf42

3

Magnus Björk의 논문은 시도해 볼만한 두 가지 기술을 설명합니다.

1 아웃 외 위해 번 모두 한 핫 사용 동시에 이진 인코딩. 따라서 우리는 one-hot 인코딩으로 x 1 , , x n 을, 이진 인코딩으로 y 1 , , y b 를 갖습니다 . 여기서 b = lg n 입니다. 우리는 하나의 절에, 쉽게 "적어도 하나의"제약 조건을 인코딩 할 수 있습니다 : ( X 1X N ) . 우리는 또한 두 개의 인코딩이 2 lg n 과 일치하도록 강제 할 수 있습니다nx1,,xny1,,ybb=lgn(x1xn)2lgn조항 : 우리는 단순히 x i 를 추가합니다 또는 x ixi¬yj 상기의 여부에 따라 J 이진 부호화 비트 번째 나가 , 최종적으로 0 또는 1이다 "가장 하나에서"제약은 자동으로 다음과 같다. 또한 나머지 SAT 인스턴스가 더 편리한 인코딩을 사용할 수 있습니다.xiyjji

들면 -out 외 N 번 입력으로 정렬 네트워크를 적용 할 수있는 X 1 , ... , X n은 정렬 된 출력 얻을 Y를 1 , ... , Y n을 , 그리고 그 요구되는 절 추가 Y k는 사실 및 y k + 1 은 거짓입니다. O ( n lg 2 n ) 비교기 장치 만 필요한 여러 가지 간단한 정렬 네트워크가 있습니다 . 따라서 O 를 사용하는 인코딩을 얻습니다 ( n lg 2knx1,,xny1,,ynykyk+1O(nlg2n) 절과 임시 변수.O(nlg2n)

종이는

매그너스 비요크 성공적인 SAT 인코딩 기법 . 2009 년 7 월 25 일.

다음 용지 1 아웃 외 대한 인코딩의 자세한 목록 갖는 k는 외 -out N을 그들 각각의 실험적인 평가와. 결론은 완전히 명확하지 않습니다 (명령 인코딩은 실험에서 꽤 좋아 보입니다).nkn

Alan M. Frisch, Paul A. Giannaros. At-Most-k 제약 조건의 SAT 인코딩 : 일부 오래된, 새로운 일부, 빠른, 일부 느린 . ModRef 2010.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.