Aqui está uma maneira de gerar um único exemplo -SAT, dado um exemplo SAT φ que você sabe é satisfeita. Considere a fórmula ψ ( x ) dada porkφψ(x)
φ(x)∧h(x)=y,
onde é uma função de hash que mapeia uma atribuição x para um valor de k bits (para algum valor pequeno de k ) e y é um valor aleatório de k bits. Se φ tiver cerca de 2 k tarefas satisfatórias, (heuristicamente) assumimos que ψ terá exatamente uma tarefa satisfatória (com probabilidade constante). Podemos testar se esse é o caso usando um solucionador SAT (ou seja, testar se ψ é satisfatório; se for, e x 0 é uma tarefa satisfatória, testar se ψ ( x ) ∧ xhxkkykφ2kψψx0 0 é satisfatório). Se k não for conhecido, você poderá encontrar k usando pesquisa binária ou apenas iterando sobre cada valor candidato k = 1 , 2 , … , n (onde n é o número de variáveis booleanas em x ).ψ ( x ) ∧ x ≠ x0 0kkk = 1 , 2 , … , nnx
Você pode escolher a função hash livremente. Você provavelmente desejará torná-lo o mais simples possível. Uma construção extremamente simples é ter escolher um subconjunto aleatório de k bits de x . Uma construção um pouco mais sofisticada é fazer com que o i- bit de h ( x ) seja o x ou os dois bits escolhidos aleatoriamente a partir de x (escolhendo um par separado de posições de bits para cada i , independentemente). Manter h simples manterá ψ relativamente simples.hkxEuh ( x )xEuhψ
Às vezes, esse tipo de transformação é usado / sugerido como parte de um esquema para estimar o número de atribuições satisfatórias para uma fórmula ; Eu o adaptei para sua necessidade específica.φ
Você pode encontrar muitos bancos de testes de instâncias SAT na Internet e aplicar essa transformação a todas elas, para obter uma coleção de instâncias Unique -SAT.k
Outra possibilidade seria gerar instâncias Unique -SAT a partir de criptografia. Por exemplo, suponha que f : { 0 , 1 } n → { 0 , 1 } n seja uma permutação criptográfica unidirecional. Seja x um elemento escolhido aleatoriamente de { 0 , 1 } n , e seja y = f ( x ) . Então a fórmula φ ( x ) dada por f ( x ) =kf:{0,1}n→{0,1}nx{0,1}ny=f(x)φ(x) é umainstânciaexclusiva k -SAT. Como outro exemplo, escolha dois números primos grandes p , q aleatoriamente e deixe n = p q . Então, a fórmula φ ( x , y ) dada por x ⋅ y = n ∧ x > 1 ∧ y > 1 ∧ x ≤ y (com a correspondência óbvia entre cadeias de bits e números inteiros) é um k exclusivof(x)=ykp,qn=pqφ(x,y)x⋅y=n∧x>1∧y>1∧x≤ykInstância -SAT. No entanto, essas construções não parecem uma maneira útil de avaliar ou otimizar seu solucionador. Todos eles têm uma estrutura especial e não há razão para acreditar que essa estrutura seja representativa dos problemas do mundo real. Em particular, sabe-se que as instâncias SAT extraídas de problemas criptográficos são extremamente difíceis, muito mais difíceis do que as instâncias SAT extraídas de muitas outras aplicações do mundo real de solucionadores SAT, portanto, elas não são uma base muito boa para comparar seu solucionador.
Em geral, todas as técnicas mencionadas nesta resposta têm a desvantagem de gerar instâncias -SAT únicas com uma estrutura específica, portanto, elas podem não ser o que você está procurando - ou, pelo menos, talvez não queira confiar somente nas fórmulas geradas dessa maneira. Uma abordagem melhor seria identificar os aplicativos do Unique k -SAT (quem você acha que vai usar o seu solucionador e com qual finalidade?) E, em seguida, tentar obter alguns exemplos realistas desses domínios de aplicativo.kk
Para um tópico relacionado, consulte também Gerando problemas interessantes de otimização combinatória