Quand utiliser SAT vs Constraint Satisfaction?


18

Si j'ai un problème difficile, une approche standard consiste à l'exprimer en tant qu'instance SAT et à essayer d'exécuter un solveur SAT dessus. Une autre approche standard consiste à l'exprimer comme un problème de satisfaction de contrainte et à essayer d'utiliser un solveur CSP. Les deux se sentent en quelque sorte vaguement similaires quant aux types de problèmes qui peuvent être naturellement exprimés dans leur format d'entrée.

Existe-t-il des lignes directrices ou des règles de base pour savoir comment reconnaître, pour un problème donné, quelle approche est la plus susceptible de donner de bons résultats? Existe-t-il des conseils que quiconque puisse offrir sur les types de problèmes qui peuvent être mieux traités par les solveurs SAT que par les solveurs CSP, ou vice versa?

(Évidemment, il y a des problèmes faciles qui peuvent être résolus par les deux approches. Il y a aussi des problèmes difficiles qui ne peuvent pas être résolus utilement par l'une ou l'autre approche. Mettons-les de côté. les solveurs fonctionnent mieux que les solveurs CSP, ou lorsque les solveurs CSP fonctionnent mieux que les solveurs SAT. Comment puis-je reconnaître quand un solveur SAT est susceptible d'être mieux adapté qu'un solveur CSP, ou lorsqu'un solveur CSP est susceptible d'être mieux adapté un solveur SAT - c'est-à-dire quelle approche essayer en premier?)


1
Notez qu'un problème ne peut pas être trop difficile si vous souhaitez réduire à SAT.
Raphael

1
Ou pourquoi se concentrer uniquement sur SAT / CSP, et SMT?
Juho

L'utilisation d'un outil de résolution de contraintes présente l'avantage que vous pouvez facilement essayer certaines optimisations (par exemple des techniques de rupture de la symétrie) sur des instances qui ne sont pas trop difficiles (et vérifier l'efficacité de telles optimisations). De plus, beaucoup d'entre eux peuvent sortir un fichier CNF standard en tant que sortie intermédiaire.
Vor

Grand point, @Juho! SMT mérite également d'être considéré - n'hésitez pas à comparer les trois (SAT, CSP, SMT), si vous avez des idées à ce sujet.
DW

J'avais la même question, merci de l'avoir posée.
xxx ---

Réponses:


8

Je pense que c'est une très bonne question. Vous pouvez également demander: quand utiliser un solveur SMT? J'ai le sentiment qu'il pourrait être difficile de déterminer avant de modéliser le problème et d'exécuter les solveurs CSP / SAT / SMT et de le découvrir. Il est bien connu que même des solveurs différents fonctionnent très différemment sur les mêmes instances! Mon intuition vient aussi du fait qu'il existe potentiellement de nombreuses façons de modéliser un problème. De plus, il existe de nombreuses façons de faire de la recherche et de l'inférence, selon le type de contraintes utilisé (si le formalisme en question permet différents types).

Prenons par exemple le casse-tête Sudoku standard. Pour le puzzle standard , un solveur SAT / CSP moderne résoudra un tel puzzle en un instant. Cependant, je préfère utiliser un solveur CSP car il est plus facile d'exprimer mon intention. Le puzzle mentionné a besoin de contraintes alldiff, et j'ai terminé. Il y a en fait pas mal de recherches dans le contexte des solveurs CSP essayant de résoudre des instances Sudoku de taille différente. Pour autant que je m'en souvienne, ils ne font aucune comparaison entre SAT, mais essaient plutôt de déterminer quel type d'inférence fonctionne le mieux, ou quel type de puzzles Sudoku sont difficiles. Je ne sais pas si par exemple puzzles Sudoku, les solveurs SAT seraient plus rapides que les solveurs CSP.8×89+9+9=2732×32

Différents formalismes sont capables de capturer des informations spécifiques à un domaine et de les exploiter mieux et de différentes manières. Pour un peu plus à ce sujet, voir la réponse et les commentaires ici .

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.