고유 한 SAT 벤치 마크


16

이 질문은 아마도 주제와 주제 사이의 경계에있을 것입니다. 그러나 여기서 비슷한 질문을 보았으므로 질문하겠습니다.


입력이 최대 1 개의 만족스러운 할당을 갖는 k -CNF 공식 인 Unique k -SAT 솔버를 구현하고 있습니다. 그것의 실제적인 행동을 테스트하기 위해서는 그러한 공식이 필요합니다. 나는 웹에서 그것들을 검색했지만 아무것도 찾지 못했습니다 (반면에, 일반적인 k -CNF 공식 을 찾는 것은 매우 쉽습니다 ).k1k

고유 k SAT 인스턴스 는 어디에서 찾을 수 있습니까 ?

또는 고유하게 만족스러운 인스턴스를 생성하는 절차를 알고 만족할 수도 있습니다. 내가 아는 유일한 접근법은 심은 SAT 인스턴스 생성 이라는 이름으로 진행됩니다. n 변수 를 임의로 할당 한 다음 그러한 할당에 동의하는 절만 생성합니다. 이 접근법은 다음과 같은 이유로 내 목적에 불만족합니다.

  • 얻어진 식은 바람직하지 않은 만족스러운 과제를 더 가질 수있다.
  • 원하는 할당으로 수식을 고유하게 만족 시키려면 수식 에 동의하는 가능한 모든 절을 소개해야 합니다. 이것은 너무 많은 절을 가진 수식을 생성 할 것인데, 이는 해결하기 쉬울 것이므로 솔버의 최악의 동작을 나타내지 않을 것입니다. 절의 수를 합리적으로 유지하면서 어떻게 독창성을 효율적으로 적용 할 수 있는지는 분명하지 않습니다.

합리적인 수의 절로 독특하고 만족스러운 수식을 어떻게 생성 할 수 있습니까? 하여 합리적인 나는 최대 멀리 의미 .2k(nk)


n 개의 변수와 m 개의 절이 있는 SAT 수식 됩니다 . 절의 수가 3 n - 2 n3 n - 2 n - 2 n - 1 사이 인 경우 수식 F 는 고유하게 만족 스럽거나 만족스럽지 않습니다 ... k-SAT에 대한 방정식도 계산했습니다. 내가 찾으면 알려 드리겠습니다. Fnm3n2n3n2n2n1에프
Tayfun Pay

충분한 시간이 있고 인스턴스가 충분히 작은 경우 단계 전환에서 인스턴스를 생성하고 SAT 솔버로 테스트 할 수 있습니다. 수식에 솔루션이 없으면 삭제하십시오. 솔루션 X가있는 경우 솔루션이 X가 아니라고 주장하는 절을 추가하고 솔버를 다시 실행하십시오. 이것은 기본이지만 느립니다.
앤드류 D. 킹

답변:


7

만족할만한 SAT 인스턴스 φ 가 주어지면 Unique -SAT 인스턴스 를 생성하는 한 가지 방법 이 있습니다. 로 주어진 공식 ψ ( x )를 고려하십시오kφψ(x)

φ(x)h(x)=y,

여기서 는 할당 xk 비트 값 (일부 작은 값 k )에 매핑하는 해시 함수 이고 y 는 임의의 k 비트 값입니다. 경우 φ가 에 대해이 2 K 만족 할당, 다음 (경험적으로) 우리는 가정 ψ는 정확히 하나의 (일정 확률로) 지정을 만족해야합니다. 우리는 이것이 SAT 솔버를 사용하여 이런 경우인지 테스트 할 수 있습니다 (즉, ψ 가 만족 스러운지 테스트합니다 . 만약 그것이 x 이고, x 0 이 할당을 만족시키는 것이라면 ψ ( x ) x 인지 테스트합니다.hxkkykφ2kψψx0 이 만족 스럽습니다). k를 알 수없는경우이진 검색을 사용하거나 각 후보 값 k = 1 , 2 , , n 을 반복하여 k 를찾을 수 있습니다(여기서 n x 의 부울 변수 수입니다).ψ(x)xx0kkk=1,2,,nnx

해시 기능을 자유롭게 선택할 수 있습니다. 아마도 가능한 한 간단하게 만들고 싶을 것입니다. 한 극히 간단한 구조 가지고있다 임의 서브 골라 k 값 으로부터 비트 X . 약간 더 복잡한 구조는 가지고있다 된 I 의 번째 비트 H ( X를 ) 로부터 임의로 선택된 두 비트의 XOR 수 X (각 비트 위치의 분리 된 쌍 선택 I를 독립적 등). 유지 시간의 단순 유지합니다 ψ 비교적 간단합니다.hkxih(x)xihψ

이러한 종류의 변환은 때때로 공식 에 만족하는 대입의 수를 추정하기위한 체계의 일부로서 사용 / 제안된다 ; 귀하의 특정 요구에 맞게 조정했습니다.φ

인터넷에서 여러 SAT 인스턴스의 테스트 베드를 찾을 수 있으며이 변환을 모든 인스턴스에 적용하여 고유 -SAT 인스턴스 콜렉션을 얻을 수 있습니다.k


또 다른 가능성은 암호화에서 고유 SAT 인스턴스 를 생성하는 것 입니다. 예를 들어, f : { 0 , 1 } n{ 0 , 1 } n 은 암호화 단방향 순열이라고 가정합니다. 하자 X는 한 임의로 선택 될 요소 { 0 , 1 } , N , 및하자 Y는 = f를 ( X ) . 이어서 화학식 φ ( X ) 에 의해 주어진 F ( X ) =kf:{0,1}n{0,1}nx{0,1}ny=f(x)φ(x) 는 고유 한 k- SAT 인스턴스입니다. 다른 예로, 두 개의 큰 소수 p , q를 무작위로 선택하고 n = p q로 설정하십시오 . 그런 다음 x y = n x > 1 y > 1 x y (비트 열과 정수 사이의 명확한 대응 )로 주어진공식 φ ( x , y ) 는 고유 k입니다.f(x)=ykp,qn=pqφ(x,y)xy=nx>1y>1xyk-SAT 인스턴스. 그러나 이러한 구조는 솔버를 벤치마킹하거나 최적화하는 유용한 방법처럼 보이지 않습니다. 그들은 모두 특별한 구조를 가지고 있으며,이 구조가 실제 문제를 대표한다고 믿을 이유가 없습니다. 특히, 암호화 문제에서 도출 된 SAT 인스턴스는 SAT 솔버의 다른 많은 실제 응용 프로그램에서 도출 된 SAT 인스턴스보다 매우 어렵고 훨씬 어려운 것으로 알려져 있으므로 솔버를 벤치마킹하는 데 매우 적합하지 않습니다.


일반적으로이 답변에 언급 된 모든 기술 은 특정 구조를 가진 고유 한 SAT 인스턴스를 생성한다는 단점이 있으므로 찾고자하는 것이 아닐 수도 있고, 적어도 의존하고 싶지 않을 수도 있습니다. 이런 식으로 생성 된 공식에만. 더 나은 방법은 Unique k -SAT의 응용 프로그램 (솔버를 누가 어떤 용도로 사용하려고한다고 생각하십니까) 을 식별 한 다음 해당 응용 프로그램 도메인에서 현실적인 예를 얻는 것입니다.kk

관련 주제는 흥미로운 조합 최적화 문제 생성을 참조하십시오.


암호 단락의 첫 번째 부분은 잘못되었으므로 (일방 함수가 존재하면) 주사 기능이 아닌 단방향 기능이 있습니다.

감사합니다, @RickyDemer! 나는 단방향 순열을 의미했지만 그것은 내가 쓴 것이 아닙니다. 결정된.
DW

6

당신은 스도쿠 퍼즐을 생성하기 위해 사용되는 알고리즘을 고려해 볼 수 있습니다 - 아마도 일반화 - (보통) 스도쿠 퍼즐은 고유의 솔루션을하기로되어 있기 때문에. 다른 한편으로, 스도쿠 퍼즐은 일반적으로 하나 이상의 솔루션을 보장 합니다.n×n

SAT 감소와 함께 스도쿠 생성기를 사용하거나 스도쿠 생성에 사용 된 기술을 적용하여 고유 한 SAT 인스턴스를보다 직접 생성하는 방법을 생각할 수 있습니다. 전자의 경우 분명히 SAT 인스턴스는 일부 구조를 갖지만 솔루션 심기 또는 감시 격리 기술을 사용하는 것보다 더 많거나 적은 구조인지 확실하지 않습니다. 아마도 당신의 요구와 솔버에 달려 있습니다.

내가 아는 한 가지 참고 문헌은 다음과 같습니다. Sudoku Puzzles Generaterating : Easy에서 Evil .



2

솔루션 수를 제어하면서 "아마도 어려운"SAT 인스턴스를 만드는 가장 좋은 방법 중 하나는 이진법으로 인코딩 된 정수 팩터링 인스턴스 / 회로입니다. 코드는 그다지 복잡하지 않으며 주로 EE 추가 회로를 사용하며 "대형"SAT 인스턴스로 이어지지 않습니다. 해의 수는 요인의 수와 같습니다 (요인의 "순열"포함). 따라서 소수는 정확히 두 가지 솔루션을 생성합니다.(1,),(,1). 요인을 제한하는 추가 "비교"제약 조건으로 단일 솔루션을 보장 할 수 있습니다.< 또는 1 또는 .

또한이 방법을 사용하면 대략 많은 요소 / 해결 방법이 필요한 숫자를 찾기가 비교적 쉽습니다 . "부드럽게" 숫자가 더 요소.

수년간 여러 연구자들이이 팩터링 SAT 코드를 만들었지 만 (예를 들어 과거에 팩터링 인스턴스를 저장 한 DIMACS 경쟁 / 아키브), 안타깝게도 공개 버전이없는 것 같습니다. 대학원 과정을 위해 코드가 작성 / 구현 된 심판에 대해서는 아래의 첫 번째 링크를 참조하십시오.

더 많은 "구조화되지 않은"인스턴스를 만드는 데 유용 할 수있는 또 다른 경험적 / 반복적 접근 방식 : 임의의 SAT 인스턴스 작성 이자형 near the transition point (the region where the equation has a probability 50% between "solvable and unsolvable"), and then solve the equation. if it is unsolvable, throw away and restart. if it is solvable, add clauses that restrict the solution "not" to be the found solution, obtaining en+1, and re-solve. repeat if necessary. when the equation en+1 더 이상 해결할 수 없습니다 e 단일 / 고유 솔루션이 있어야합니다.


앞서 답변에서 팩토링 접근법을 언급했지만 이상적인 테스트 베드가 아닌 이유를 설명했습니다. "그러나 이러한 구조는 솔버를 벤치마킹하거나 최적화하는 유용한 방법이 아닌 것 같습니다. 모두 특별한 구조를 가지고 있습니다. 이 구조가 실제 문제를 대표한다고 믿을 이유는 없습니다. 특히, 암호화 문제에서 도출 된 SAT 인스턴스는 SAT 솔버의 다른 많은 실제 애플리케이션에서 도출 된 SAT 인스턴스보다 훨씬 어렵고, "솔버를 벤치마킹하기위한 좋은 기반이 아닙니다."
DW

so the above is a different pov that if one wants very hard instances, obviously a natural test case for any solver, then factoring is indeed a promising way to go. seriously doubt that you could find any published opinions that mirror yours. to repeat, factoring instances have been put in DIMACS challenge archives by serious researcher(s) starting many years ago. anyway, your contrary opinion is not even really expressed in a self-consistent way. cryptography is indeed a foremost/applied real world problem even more so than many abstract/abstruse/academic problems used for SAT instances...
vzn

2

You can easily generate directly Unique SAT formulas with reasonable size (|F|<n+2k)

Let m be the unique model - say m contains only "0"s (rename the variables later if needed).
Let F a k-SAT formula satisfied only by m - the maximum size of F is the total number of clauses satisfied by m i.e. (2k1)(nk).

Take the (k1) clauses that eliminate all models assigning exactly one "1" among x1,x2xk:
(¬x1,x2xk)(x1,¬x2xk)(x1,x2¬xk)

Take the (k2) clauses that eliminate all models assigning exactly two "1" among x1,x2xk:
(¬x1,¬x2,x3xk)(¬x1,x2,¬x3xk)(x1,x2¬xk1¬xk)

Keep going until taking the only (kk) clause that eliminates all models assigning "1" to each variables among x1,x2xk.

The only models which are not yet eliminated assign all x1,x2xk to "0". Since m is a model, then take any set of nk clauses that eliminate all models assigning "1" to xi(k<in) and 0 to any k1 variables among x1,x2xk, for instance:
(¬xk+1,x1,xk1)(¬xn,x1xk1).

Then |F|=i=1k(ki)+nk=2k1+nk

To get more clauses, add any clause containing at least one negated variable. To get an unsatisfiable formula, just add a clause with k unnegated variables.


There is a problem in your answer : we have n variables and this means that and not k
Elaqqad
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.