La satisfiabilité générale (à quelques exceptions telles que les clauses de Horn) ne semble pas avoir de solution algorithmique. Cependant, l'algorithme suivant semble être une solution pour la satisfiabilité générale. Quel est exactement le défaut de l'algorithme suivant?
- Laisser être un ensemble vide qui contiendra toutes les variables qui doivent nécessairement être vraies ou fausses.
- Laisser être l'ensemble des clauses.
- Boucle à travers .
- Chaque fois qu'une variable non conditionnelle † est trouvée, supprimez-la de et l'insérer dans .
- Si ce qui laisse un vide et l' implication ‡ , supprimer toutes les variables de cette implication vide de et l' insérer dans .
- Si cela laisse une implication OU vide ‡ , créez de nouvelles instances de l'algorithme, où chaque instance traite une variable dans l'implication (c'est-à-dire si l'implication est: , créez une instance où est inséré dans , un où est inséré dans et un où et sont insérés dans ).
- Définissez toutes les variables dans à la valeur qu'ils doivent nécessairement être.
- Réinsérez les variables dans dans avec leurs valeurs modifiées et vérifiez si toutes les clauses sont satisfaites.
- Si la satisfiabilité est satisfaite, retournez , sinon retournez "Not Satisfiable".
† Une variable non conditionnelle est définie comme une variable nécessaire vraie ou fausse, par exemple ou .
‡ Une implication vide est définie comme une implication où un côté est vide (par ex.) ou l'autre côté est nécessairement vrai (par exemple .
Pour obtenir une compréhension plus intuitive de l'algorithme, considérez l'ensemble de clauses suivant :
L'algorithme fera ce qui suit:
1) Depuis , , sont des variables non conditionnelles, l'algorithme les insérera dans . .
2) Suppression , et laissera les clauses vides: . Ceux-ci seront ajoutés à. .
3) Réinsérer les variables dans entraînera la violation des premières clauses: . Depuis c'est faux, est faux, ce qui signifie que la clause (v) est violée. L'algorithme renverra "Non satisfaisant"
Je suis conscient que l'algorithme semble déroutant. N'hésitez pas à demander des éclaircissements.
D'après les commentaires, je me rends compte maintenant qu'il n'y a pas d' algorithme de satisfiabilité générale efficace connu . Je suis toujours intéressé par les commentaires sur mon algorithme. Est-ce que ça marche? Comment se compare-t-il aux algorithmes courants?
la source
Réponses:
Problème 1
L'affaire de(x→y∨y¯¯¯) devrait être une "variable non conditionnelle" en ce qui concerne x (c'est-à-dire que x¯¯¯ devrait maintenant être inséré dans W ). Si ce n'est pas vrai, votre algorithme a besoin d'une étape supplémentaire pour en déduire. En supposant(x→y∨y¯¯¯) est une " variable non conditionnelle ", continuons-nous.
Problème 2
REMARQUE: c'est un problème que j'ai remarqué; il peut très bien y avoir d'autres problèmes.
Le problème est avec la " implication OR vide " divisée en deux algorithmes, c'est que dans sa forme actuelle, la division ne couvre pas tous les cas. En particulier:
Vous commencez avec(x∨c→y) , puis c est supprimé et nous nous retrouvons avec une implication OU vide de(x∨[]→y) . Vous suggérez maintenant de le diviser en deux nouveaux problèmes et de résoudre chacun d'eux; un avecx=T∧y=T et un où y=T . Mais cela ne couvre pas tous les cas. Et le cas quandx=F∨y=F . Cependant, votre algorithme ne considère jamais la possibilité quey c'est faux.
Je pense que vous pourriez être en mesure de résoudre ce problème en formulant les deux nouveaux problèmes en un seul avecy et un avec x¯¯¯ .
Problème 3
Que se passe-t-il lorsque vous vous retrouvez avec un tas de clauses sous la forme:
ou
Après avoir tout réduit, ces clauses resteront et vous ne pourrez pas tester facilement leur satisfiabilité.
Une analyse
Remarque : Cette notation "O",O (something) etc., que l' on appelle la notation Big O .Ω ( s o m e t h i n g) s'appelle Big-omega.
En supposant que l'algorithme fonctionnait en général, il fonctionnerait en temps deΩ (2m) pire cas, m étant le nombre de variables. La raison en est que chaque division d'un problème en problèmes de taille similaire signifie que l'algorithme s'exécute en temps exponentiel. Pour visualiser ce concept, regardez l'image suivante d'un arbre binaire complet (image d' ici ):
Imaginez maintenant que le problème d'origine est le nœud en haut. Nous avons divisé le problème en deux problèmes au deuxième niveau, mais ils sont de taille similaire (nous nous débarrassons d'une seule variable,X ou y à partir de l' implication OR vide , nous aurons donc encore beaucoup d' implications OR vides pour chaque niveau). Nous devrons potentiellement diviser le problèmeO (m) fois pour se débarrasser de m variables. Cela signifie que nous devrons faire face à un arbre avecm niveaux. Un arbre avecm niveaux a 2m nœuds foliaires (nœuds en bas). C'est ce qu'on appelle le temps exponentiel, et est officieusement quelque peu comparable à tous les algorithmes de satisfiabilité booléenne connus. Mais la force brute aussi: il y a2m affectations possibles des variables, donc par force brute, vous pouvez deviner chaque affectation et vérifier la satisfiabilité avec des performances similaires!
la source
Avant de vous sentir que vous avez un "nouvel" algorithme SAT, veuillez consulter l'algorithme de recherche / retour en arrière standard / classique dans la littérature pour le problème datant de ~ 1962, l' algorithme Davis – Putnam – Logemann – Loveland . la plupart des algorithmes de retour en arrière / récursifs pour le problème finiront probablement par ressembler quelque peu à cet algorithme, bien qu'il puisse falloir un certain temps pour démontrer cette équivalence.
Une analyse sérieuse impliquerait de comparer votre algorithme à des exemples (ou instances aléatoires) par rapport à DPLL.
Il est donc utile de résumer simplement en quoi votre algorithme en diffère. sans revoir votre code, les chances sont les suivantes:
L'algorithme peut être facilement compris par un étudiant de premier cycle intelligent, mais il semble rarement enseigné au niveau du premier cycle ou dans les manuels de premier cycle, ou peut-être même pas souvent référencé, ce qui peut conduire à une vision erronée ou à une impression que les algorithmes SAT de base ne sont pas bien compris, etc.
Récemment, nous venons de parcourir ce site "en direct" appelé ToughSat par Yuen et Bebel pour générer des instances matérielles à utiliser avec l'analyse comparative, certaines basées sur la factorisation [l'une des méthodes classiques de génération d'instances matérielles SAT]. il y en a d'autres, par exemple les DIMAC qui stockent les archives des instances matérielles bien qu'il ne soit plus en ligne.
la source