SAT, CP, SMT, (la plupart des) ASP traitent tous du même ensemble de problèmes d'optimisation combinatoire. Cependant, ils abordent ces problèmes sous différents angles et avec différentes boîtes à outils. Ces différences tiennent en grande partie à la façon dont chaque approche structure les informations sur l'exploration de l'espace de recherche. Mon analogie de travail est que SAT est un code machine, tandis que les autres sont des langages de niveau supérieur.
X1∨ x2¯¯¯¯¯∨ x3{ ( x1, 0 ) , ( x2, 1 ) , ( x3, 0 ) }X1X3X2X1∨ x2¯¯¯¯¯∨ x3∨ x4X1∨ x2¯¯¯¯¯∨ x3∨ x4¯¯¯¯¯∨ x5
Une approximation de la structure de la clause est conservée pour affiner l'ensemble de solutions et pour aider à déterminer si cet ensemble est vide. Pendant la recherche, certaines affectations partielles peuvent s'avérer ne figurer dans aucune solution (même si elles satisfont individuellement à chacune des contraintes de l'instance). Ceux-ci sont connus sous le nom de nogoods , un terme introduit par ("Mr GNU") Stallman et Sussmanx ≤ 5x=5. Il n'y a donc pas une seule structure de clause générale, mais une structure associée à chaque choix de représentation, selon ce que représentent les singletons (littéraux) de la structure de clause.
La programmation par contraintes (CP) était traditionnellement une discipline de l'IA, avec un accent sur la planification, le calendrier et les problèmes combinatoires, et a donc un rôle central pour les variables qui peuvent prendre plus que deux valeurs (mais généralement un nombre fini). CP a mis l'accent sur la recherche efficace et, motivé par les applications traditionnelles, a donné un rôle central à la all-different
contrainte (d'injectivité), mais a également développé des propagateurs efficaces pour de nombreux autres types de contraintes. Les définitions formelles de la PC existent depuis au moins l'article de 1974 de Montanari intitulé Réseaux de contraintes, les précurseurs remontant encore plus tôt. Ce poids historique peut avoir contribué au retard du CP par rapport à d'autres approches de la performance brute au cours de la dernière décennie. CP maintient classiquement une approximation du complément de la structure de la clause, via un ensemble de domaines actifs pour les variables. L'objectif est d'éliminer les valeurs des domaines actifs, en explorant la structure de la clause en essayant d'attribuer des valeurs candidates aux variables et en reculant si nécessaire.
Les théories de module de satisfaction (SMT) sont sorties de la communauté de vérification. Chaque théorie dans un solveur SMT forme une représentation implicite de potentiellement potentiellement infiniment de clauses SAT. Les théories utilisées avec SMT et les contraintes utilisées dans CP reflètent leurs différentes applications historiques. La plupart des théories que SMT considère concernent les tableaux indexés sur des nombres entiers, les champs fermés réels, les ordres linéaires, etc. celles-ci résultent de l'analyse statique des programmes (en vérification assistée par ordinateur) ou de la formalisation des preuves mathématiques (en raisonnement automatisé). En revanche, dans le calendrier et la planification, la contrainte d'injectivité est centrale, et bien que le langage SMTLIB standard ait une contrainte d'injectivité depuis sa création en 2003 (via ledistinct
symbole), jusqu'en 2010, les solveurs SMT uniquement implémentés distinct
via un algorithme naïf. À ce stade, la technique d'appariement du propagateur CP standard pour a all-different
été transposée, avec un grand effet lorsqu'elle a été appliquée à de grandes listes de variables; voir An Alldifferent constraint solver in SMT par Banković et Marić, SMT 2010. De plus, la plupart des propagateurs CP sont conçus pour des problèmes avec des domaines finis, tandis que les théories SMT standard traitent des domaines infinis (entiers et plus récemment des réels). SMT utilise une instance SAT comme approximation de la structure de la clause, extrayant les clauses nogood des théories, le cas échéant. Un bon aperçu est Satisfiability Modulo Theories: Introduction and Applications
par De Moura et Bjørner, doi: 10.1145 / 1995376.1995394.
La programmation des jeux de réponses (ASP) est issue de la programmation logique. En raison de sa concentration sur la résolution du problème plus général de la recherche d'un modèle stable, et aussi parce qu'il permet une quantification universelle aussi bien qu'existentielle, ASP n'a pas été pendant de nombreuses années compétitif avec CP ou SMT.
Formellement, SAT est CSP sur les domaines booléens, mais l'accent mis par SAT sur l'apprentissage des clauses, les bonnes heuristiques pour la détection des conflits et les moyens rapides de revenir en arrière sont assez différents de l'accent CSP traditionnel sur les propagateurs, établissant la cohérence et l'heuristique pour l'ordre des variables. SAT est généralement extrêmement efficace, mais pour de nombreux problèmes, des efforts considérables sont nécessaires pour exprimer d'abord le problème en tant qu'instance SAT. L'utilisation d'un paradigme de niveau supérieur comme CP peut permettre une expression plus naturelle du problème, puis soit l'instance CP peut être traduite manuellement en SAT, soit un outil peut prendre en charge la traduction. Un bon aperçu des écrous et boulons de SAT est sur les résolveurs de satisfaction d'apprentissage de clauses modernes par Pipatsrisawat et Darwiche, doi: 10.1007 / s10817-009-9156-3 .
Passons maintenant des généralités aux spécificités actuelles.
Au cours de la dernière décennie, certaines personnes au CP ont commencé à se concentrer sur la génération de clauses paresseuses (LCG). C'est essentiellement un moyen de regrouper les propagateurs CP en utilisant des techniques plus flexibles de type SMT plutôt que l'abstraction plutôt rigide des domaines actifs. Ceci est utile car il existe une longue histoire de propagateurs de CP publiés pour représenter et résoudre efficacement de nombreux types de problèmes. (Bien sûr, un effet similaire serait obtenu par un effort concerté pour mettre en œuvre de nouvelles théories pour les solveurs SMT.) LCG a des performances qui sont souvent compétitives avec SMT, et pour certains problèmes, il peut être supérieur. Un aperçu rapide est le document CPAIOR 2010 de Stuckey, Lazy Clause Generation: Combinant la puissance de la résolution SAT et CP (et MIP?) , Doi: 10.1007 / 978-3-642-13520-0_3. Il vaut également la peine de lire le document de position de Garcia de la Banda, Stuckey, Van Hentenryck et Wallace, qui peint une vision centrée sur le CP de The Future of Optimization Technology , doi: 10.1007 / s10601-013-9149-z .
Pour autant que je sache, la plupart des recherches récentes sur les SMT semblent s'être déplacées vers les applications des méthodes formelles et des mathématiques formalisées. Un exemple est la reconstruction de preuves trouvées par des solveurs SMT à l'intérieur de systèmes de preuve tels que Isabelle / HOL, en construisant des tactiques Isabelle / HOL pour refléter les règles d'inférence dans les traces de preuve SMT; voir Fast LCF-Style Proof Reconstruction for Z3 by Böhmer and Weber at ITP 2010.
Au cours des dernières années, les meilleurs solveurs ASP ont été développés pour devenir compétitifs avec les solveurs CP, SMT et SAT uniquement. Je ne suis que vaguement familier avec les détails d'implémentation qui ont permis aux solveurs clasp
de devenir compétitifs, donc je ne peux pas vraiment les comparer avec SMT et CP, mais fermoir annonce explicitement son accent sur l'apprentissage des nogoods.
Traverser les frontières traditionnelles entre ces formalismes est la traduction de représentations de problèmes plus abstraites en des formalismes de niveau inférieur pouvant être mis en œuvre efficacement. Plusieurs des meilleurs solveurs ASP et CP traduisent désormais explicitement leur entrée dans une instance SAT, qui est ensuite résolue à l'aide d'un solveur SAT standard. Dans CP, l' assistant de modélisation de contraintes Savile Row utilise des techniques de conception de compilateur pour traduire les problèmes exprimés dans le langage de niveau moyen Essence 'en un formalisme de niveau inférieur, adapté à la saisie de solveurs CP tels que Minion ou MiniZinc . Savile Row a initialement travaillé avec une représentation CP comme formalisme de bas niveau, mais a introduit SAT comme cible dans la version 1.6.2. De plus, le langage de niveau encore plus élevé Essencepeut maintenant être automatiquement traduit en Essence 'par l' outil Conjure . Dans le même temps, les solveurs SAT uniquement de bas niveau comme Lingeling continuent d'être affinés chaque année, plus récemment en alternant les phases d'apprentissage et de traitement des clauses; voir le bref aperçu de ce qui est chaud dans les compétitions SAT et ASP par Heule et Schaub dans AAAI 2015.
L'analogie avec l'histoire des langages de programmation semble donc appropriée. SAT est en train de devenir une sorte de "code machine", ciblant un modèle d'exploration de bas niveau des clauses dans la structure des clauses. Les paradigmes abstraits sont de plus en plus comme des langages informatiques de niveau supérieur, avec leurs propres méthodologies et applications distinctes, ils sont bons à aborder. Enfin, la collection de plus en plus dense de liens entre ces différentes couches commence à ressembler à l'écosystème d'optimisation du compilateur.