Aquí hay una forma de generar una instancia Unique -SAT, dada una instancia SAT que usted sabe que es satisfactoria. Considere la fórmula dada porφ ψ ( x )kφψ(x)
φ(x)∧h(x)=y,
donde es una función hash que asigna una asignación a un valor de bits (para algún valor pequeño de ), e es un valor aleatorio de bits. Si tiene alrededor de asignaciones satisfactorias, entonces (heurísticamente) asumimos que tendrá exactamente una asignación satisfactoria (con probabilidad constante). Podemos probar si este es el caso usando un solucionador SAT (es decir, probar si es satisfactoria; si lo es, y es una asignación satisfactoria, probar si es satisfactoria). Six k k y k φ 2 k ψ ψ x 0 ψ ( x ) ∧ x ≠ x 0 k k k = 1 , 2 , … , n n xhxkkykφ2kψψx0ψ(x)∧x≠x0kno se conoce, puede encontrar utilizando la búsqueda binaria o simplemente iterando sobre cada valor candidato (donde es el número de variables booleanas en ).kk=1,2,…,nnx
Puede elegir la función hash libremente. Probablemente quieras hacerlo lo más simple posible. Una construcción extremadamente simple es hacer que seleccione un subconjunto aleatorio de bits de . Una construcción un poco más sofisticada es hacer que el ésimo bit de sea el xor de dos bits elegidos al azar de (eligiendo un par separado de posiciones de bit para cada , independientemente). Mantener simple mantendrá relativamente simple.k x i h ( x ) x i h ψhkxih(x)xihψ
Este tipo de transformación a veces se usa / sugiere, como parte de un esquema para estimar el número de asignaciones satisfactorias a una fórmula ; Lo he adaptado a tu necesidad particular.φ
Puede encontrar muchos bancos de pruebas de instancias SAT en Internet, y puede aplicar esta transformación a todos ellos, para obtener una colección de instancias Unique -SAT.k
Otra posibilidad sería generar instancias únicas de -SAT a partir de la criptografía. Por ejemplo, supongamos que es una permutación unidireccional criptográfica. Sea un elemento elegido aleatoriamente de , y sea . Entonces la fórmula dada por es una instancia -SAT única . Como otro ejemplo, elija dos números primos grandes al azar, y deje . Entonces la fórmula dada porkf:{0,1}n→{0,1}nx{0,1}ny=f(x)φ(x)f(x)=ykp,qn=pqφ(x,y)x⋅y=n∧x>1∧y>1∧x≤y(con la correspondencia obvia entre cadenas de bits y enteros) es una instancia -SAT única . Sin embargo, estas construcciones no parecen ser una forma útil de comparar u optimizar su solucionador. Todos tienen una estructura especial, y no hay razón para creer que esta estructura sea representativa de problemas del mundo real. En particular, se sabe que las instancias SAT extraídas de problemas criptográficos son extremadamente difíciles, mucho más difíciles que las instancias SAT extraídas de muchas otras aplicaciones del mundo real de solucionadores SAT, por lo que no son una muy buena base para comparar su solucionador.k
En general, todas las técnicas mencionadas en esta respuesta tienen el inconveniente de que generan instancias Unique -SAT con una estructura particular, por lo que pueden no ser lo que está buscando, o, al menos, es posible que no desee confiar únicamente sobre fórmulas generadas de esta manera. Un mejor enfoque sería identificar aplicaciones de Unique k -SAT (¿quién cree que va a usar su solucionador y con qué propósito?), Y luego tratar de obtener algunos ejemplos realistas de esos dominios de aplicación.kk
Para un tema relacionado, vea también Generar interesantes problemas de optimización combinatoria