Benchmarks -SAT uniques


16

Cette question est probablement à la frontière entre le sujet et hors sujet, mais j'ai vu des questions similaires ici, donc je vais la poser.


J'implémente un solveur Unique -SAT, dont l'entrée est une formule -CNF ayant au plus affectation satisfaisante. Pour tester son comportement pratique, j'ai besoin d'un ensemble de telles formules. Je les ai recherchés sur le web, et je n'ai rien trouvé (alors que, d'autre part, il est très facile de trouver des suites de formules -CNF ordinaires ).k 1 kkk1k

Où puis-je trouver des instances -SAT uniques ?k

Alternativement, je me contenterais également de connaître n'importe quelle procédure pour générer des instances uniquement satisfaisables. La seule approche que je connaisse passe sous le nom de génération d'instance SAT plantée : vous générez au hasard une affectation de variables, puis vous ne générez que les clauses qui sont d'accord avec une telle affectation. Cette approche n'est pas satisfaisante à mes fins, pour les raisons suivantes:n

  • La formule obtenue peut avoir d'autres affectations satisfaisantes non souhaitées.
  • Pour être sûr que la formule est satisfaite uniquement par l'affectation souhaitée, vous devez introduire toutes les clauses possibles qui sont d'accord avec elle. Cela produirait des formules avec trop de clauses, qui seront probablement faciles à résoudre et donc non représentatives du comportement le plus défavorable du solveur. Il n'est pas évident pour moi comment nous pouvons forcer efficacement l'unicité tout en maintenant un nombre raisonnable de clauses.

Comment pouvons-nous générer des formules uniquement satisfaisables avec un nombre raisonnable de clauses? Par raisonnable, je veux dire loin du maximum 2k(nk) .


Soit une formule SAT avec variables et clauses. Si le nombre de clauses est compris entre et alors la formule est soit uniquement satisfaisable, soit non satisfaisable. .. J'avais aussi élaboré les équations pour k-SAT. Vous fera savoir si je le trouve. n m 3 n - 2 n 3 n - 2 n - 2 n - 1 FFnm3n2n3n2n2n1F
Tayfun Pay du

Si vous disposez de suffisamment de temps (et que les instances sont suffisamment petites), vous pouvez générer des instances à la transition de phase et les tester avec un solveur SAT. Si une formule n'a pas de solution, jetez-la. S'il a une solution X, ajoutez une clause insistant sur le fait que la solution n'est pas X et réexécutez le solveur. C'est basique mais lent.
Andrew D. King

Réponses:


7

Voici une façon de générer une instance Unique -SAT, étant donné une instance SAT que vous savez satisfaisante. Considérons la formule donnée parφ ψ ( x )kφψ(x)

φ(x)h(x)=y,

où est une fonction de hachage qui associe une affectation à une valeur de bits (pour une petite valeur de ), et est une valeur de bits aléatoire . Si a environ affectations satisfaisantes, alors (heuristiquement) nous supposons que aura exactement une affectation satisfaisante (avec une probabilité constante). Nous pouvons tester si c'est le cas en utilisant un solveur SAT (à savoir, tester si est satisfaisable; si c'est le cas, et est une affectation satisfaisante, tester si est satisfiable). Six k k y k φ 2 k ψ ψ x 0 ψ ( x ) x x 0 k k k = 1 , 2 , , n n xhxkkykφ2kψψx0ψ(x)xx0kn'est pas connu, vous pouvez trouver utilisant la recherche binaire ou simplement en itérant sur chaque valeur candidate (où est le nombre de variables booléennes en ).kk=1,2,,nnx

Vous pouvez choisir librement la fonction de hachage. Vous voudrez probablement le rendre aussi simple que possible. Une construction extrêmement simple consiste à avoir sélectionner un sous-ensemble aléatoire de bits à partir de . Une construction légèrement plus sophistiquée consiste à avoir le ème bit de comme le xor de deux bits choisis au hasard parmi (en choisissant une paire distincte de positions de bits pour chaque , indépendamment). Garder simple gardera relativement simple.k x i h ( x ) x i h ψhkxih(x)xihψ

Ce type de transformation est parfois utilisé / suggéré, dans le cadre d'un schéma d'estimation du nombre d'assignations satisfaisantes à une formule ; Je l'ai adapté à votre besoin particulier.φ

Vous pouvez trouver de nombreux bancs d'essai d'instances SAT sur Internet, et vous pouvez appliquer cette transformation à toutes, pour obtenir une collection d' instances -SAT uniques .k


Une autre possibilité serait de générer des instances uniques -SAT à partir de la cryptographie. Par exemple, supposons que est une permutation cryptographique à sens unique. Soit un élément choisi au hasard de , et soit . Alors la formule donnée par est une instance Unique -SAT. Comme autre exemple, choisissez deux grands nombres premiers au hasard et laissez . Alors la formule donnée parf : { 0 , 1 } n{ 0 , 1 } n x { 0 , 1 } n y = f ( x ) φ ( x ) f ( x ) = y k p , q n = p q φ ( x , y ) x y = n x >kf:{0,1}n{0,1}nx{0,1}ny=f(x)φ(x)f(x)=ykp,qn=pqφ(x,y)xy=nx>1y>1xy(avec la correspondance évidente entre les chaînes de bits et les entiers) est une instance Unique -SAT. Cependant, ces constructions ne semblent pas être un moyen utile de comparer ou d'optimiser votre solveur. Ils ont tous une structure spéciale et il n'y a aucune raison de croire que cette structure est représentative des problèmes du monde réel. En particulier, les instances SAT tirées de problèmes cryptographiques sont connues pour être extrêmement dures, beaucoup plus difficiles que les instances SAT tirées de nombreuses autres applications réelles des solveurs SAT, elles ne sont donc pas une très bonne base pour évaluer votre solveur.k


En général, toutes les techniques mentionnées dans cette réponse ont l'inconvénient de générer des instances -SAT uniques avec une structure particulière, de sorte qu'elles peuvent ne pas être ce que vous recherchez - ou, du moins, vous ne voudrez peut-être pas vous fier uniquement sur des formules générées de cette manière. Une meilleure approche serait d'identifier les applications de Unique -SAT (qui, selon vous, va utiliser votre solveur, et dans quel but?), Puis d'essayer d'obtenir des exemples réalistes de ces domaines d'application.kk

Pour une rubrique connexe, voir également Génération de problèmes d'optimisation combinatoire intéressants


La première partie de votre paragraphe crypto est incorrecte, car (si des fonctions à sens unique existent alors) il existe des fonctions unidirectionnelles qui ne sont pas injectives.

Merci, @RickyDemer! Je voulais dire une permutation à sens unique, mais ce n'est pas ce que j'ai écrit. Fixé.
DW

6

Vous pourriez considérer les algorithmes utilisés pour générer des puzzles Sudoku - vraisemblablement généralisés à - car (généralement) les puzzles Sudoku sont censés avoir une solution unique. D'un autre côté, les puzzles Sudoku sont également généralement garantis d'avoir au moins une solution ... Mais trouver cette solution pourrait toujours être une bonne référence pour votre solveur.n×n

Vous pouvez utiliser un générateur de Sudoku avec une réduction de SAT, ou vous pouvez penser à la façon d'appliquer les techniques utilisées dans la génération de Sudoku pour générer plus directement des instances SAT uniques. Pour les premiers, vos instances SAT auront évidemment une certaine structure, mais je ne sais pas si elles sont plus ou moins structurées que, par exemple, la mise en place d'une solution ou l'utilisation de la technique d'isolement des témoins. Cela dépend probablement de vos besoins et de votre solveur.

La seule référence que je connaisse ici est: Génération de puzzles Sudoku: d'Easy to Evil .


4

Je pense qu'un bon cas de test serait de générer des instances 3XOR aléatoires uniques satisfaisantes (instances plantées) avec des contraintes , puis de les convertir en instances 3SAT.Θ(n)


2

à mon avis, l'une des meilleures façons de créer des instances SAT "vraisemblablement dures" tout en contrôlant le nombre de solutions est à partir d'instances / circuits d'affacturage entier codés en binaire. le code n'est pas très complexe, il utilise principalement des circuits d'addition EE, et ne conduit pas à de "grandes" instances SAT. le nombre de solutions est égal au nombre de facteurs (y compris les "permutations" des facteurs). par conséquent, les nombres premiers génèrent exactement deux solutions, . une seule solution peut être garantie avec une autre contrainte « de comparaison » qui limite les facteurs à une <(1,p),(p,1)a<ba1 .bp

également avec cette approche, il est relativement facile de trouver des nombres avec à peu près cependant de nombreux facteurs / solutions sont souhaités. le « lisse » le nombre, plus les facteurs.

au fil des ans, divers chercheurs ont créé ce code SAT d'affacturage (par exemple pour la compétition / arcihve DIMACS qui a stocké certaines instances d'affacturage dans le passé), mais malheureusement il ne semble pas y avoir de version accessible au public. voir aussi le 1er lien ci-dessous pour une référence où le code a été écrit / implémenté apparemment pour un cours de troisième cycle.

une autre approche empirique / itérative qui peut être utile pour certains, pour créer plus d'instances "non structurées": créer des instances SAT aléatoires près du point de transition (la région où l'équation a une probabilité de 50% entre "résoluble et insoluble"), et puis résolvez l'équation. s'il est insoluble, jetez-le et redémarrez. si elle est résoluble, ajoutez des clauses qui limitent la solution "non" à la solution trouvée, obtenant e n + 1 , et résolvez de nouveau. répéter si nécessaire. lorsque l'équation e n + 1 n'est plus résoluble, l' e n doit avoir eu une solution unique / unique.enen+1en+1en


J'ai mentionné l'approche d'affacturage dans ma réponse plus tôt, mais j'ai également expliqué pourquoi ce n'était peut-être pas un banc d'essai idéal: "Cependant, ces constructions ne semblent pas être un moyen utile de comparer ou d'optimiser votre solveur. Elles ont toutes une structure spéciale, et il n'y a aucune raison de croire que cette structure est représentative des problèmes du monde réel. En particulier, les instances SAT tirées de problèmes cryptographiques sont connues pour être extrêmement dures, beaucoup plus difficiles que les instances SAT tirées de nombreuses autres applications réelles des solveurs SAT, ils ne sont donc pas une très bonne base pour évaluer votre solveur. "
DW

donc ce qui précède est un point de vue différent que si l'on veut des instances très dures, évidemment un cas de test naturel pour tout solveur, alors l'affacturage est en effet une voie prometteuse. doute sérieusement que vous puissiez trouver des opinions publiées qui reflètent les vôtres. pour le répéter, les cas d'affacturage ont été placés dans les archives du défi DIMACS par des chercheurs sérieux depuis de nombreuses années. de toute façon, votre opinion contraire n'est même pas vraiment exprimée de manière cohérente. la cryptographie est en effet un problème du monde réel avant tout / appliqué encore plus que de nombreux problèmes abstraits / abstraits / académiques utilisés pour les instances SAT ...
vzn

2

Vous pouvez facilement générer directement des formules SAT uniques avec une taille raisonnable (|F|<n+2k)

Soit le modèle unique - disons que m ne contient que "0" (renommez les variables plus tard si nécessaire). Soit F une formule k -SAT satisfaite uniquement par m - la taille maximale de F est le nombre total de clauses satisfaites par m ie ( 2 k - 1 ) ( nmm
FkmFm .(2k1)(nk)

Prenez le clauses qui éliminent tous les modèles attribuant exactement un "1" parmix1,x2xk:(¬x1,x2xk)(x1,¬x2xk)(x1,x2¬xk)(k1)x1,x2xk
(¬x1,x2xk)(x1,¬x2xk)(x1,x2¬xk)

Prenez le clauses qui éliminent tous les modèles affectant exactement deux "1" parmix1,x2xk:(¬x1,¬x2,x3xk)(¬x1,x2,¬x3xk)(x1,x2¬xk-1¬(k2)x1,x2xk
(¬x1,¬x2,x3xk)(¬x1,x2,¬x3xk)(x1,x2¬xk1¬xk)

Continuez jusqu'à prendre le seul clause qui élimine tous les modèles attribuant "1" à chaque variable parmix1,x2xk.(kk)x1,x2xk

Les seuls modèles qui ne sont pas encore éliminés affectent tous les à «0». Puisque m est un modèle, alors prenons tout ensemble de n - k clauses qui éliminent tous les modèles attribuant "1" à x i ( k < i n ) et 0 à n'importe quelle k - 1 variable parmi x 1 , x 2x k , par exemple: ( ¬ x k + 1x1,x2xkmnkXje(k<jen)0k-1X1,X2Xk
.(¬xk+1,x1,xk1)(¬xn,x1xk1)

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

Pour obtenir plus de clauses, ajoutez toute clause contenant au moins une variable négative. Pour obtenir une formule non satisfaisante, il suffit d'ajouter une clause avec variables non négatives.k


Il y a un problème dans votre réponse: nous avons n variables et cela signifie que et non k
Elaqqad
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.