Solveur SAT multicœur

12

J'essaie de résoudre un problème SAT de 25k clauses 5k variables. Comme il fonctionne depuis une heure (précosat) et que j'aimerais en résoudre de plus gros par la suite, je cherche un Solveur SAT multicœur.

Comme il semble y avoir beaucoup de solveurs SAT, je suis assez perdu.

Quelqu'un pourrait-il me signaler le meilleur pour mon cas?

Je serais également heureux si quelqu'un pouvait me donner le temps approximatif (si possible).

multsatsolv
la source
1
Vous recherchez des programmes prêts à l'emploi? Alors ce n'est pas le meilleur site à demander. Vous voulez en savoir plus sur la résolution SAT? Bienvenue! Vous dites que vous avez cherché; Qu'as-tu trouvé? Qu'est-ce qui vous déroute?
Raphael
Eh bien, j'ai regardé le nombre de threads liés à SAT sur plusieurs forums StackExchange. J'ai fini par avoir trop à choisir entre CS théorique et CS (et choisissez le plus tard). Où aurais-je dû demander un programme de prêt-nom? Merci.
multsatsolv

Réponses:

8

Jetez un œil aux résultats du concours SAT 2013 de cette année . Sur la base de ces résultats, essayez définitivement Lingeling . Plingeling en est la variante parallèle.

Si vous n'avez pas besoin de prouver l'insatisfiabilité (peut-être que vous savez que l'instance est satisfaisable et que vous avez juste besoin de connaître une affectation qui la rend SAT), vous pouvez également essayer des méthodes de recherche locales.

Juho
la source
Merci. Je vais voir (P) Lingeling. De plus, je n'ai aucune idée si c'est satisfaisable (même s'il vaut mieux, sinon je suis coincé).
multsatsolv
+1. D'après notre expérience, le plingeling est certainement ce que vous devriez essayer en premier (au moins si vous avez un seul ordinateur avec plusieurs cœurs et beaucoup de mémoire). Pour encore plus de performances, essayez de trouver un cluster informatique avec autant de nœuds que possible et exécutez plusieurs instances de lingling (ou plingeling) avec différentes graines aléatoires.
Jukka Suomela
4

Je ne suis pas sûr de l'existence de solveurs sat multicœurs pratiques, mais il y a quelques projets et articles:

J'ai également trouvé ce point intéressant: vous pouvez exécuter plusieurs fois un solveur sat standard avec des graines différentes sur le même problème en parallèle, pour obtenir un effet multicœur.

Edit: Intégrer mes commentaires sur l'idée de vzn ici:

k2k


(Je serais également heureux si quelqu'un pouvait me donner le temps approximatif (si possible) pour résoudre un problème SAT des variables Y des clauses X.)

mnm,n

Realz Slaw
la source
Merci pour les liens. Je vais en lire certains. J'espère cependant que mon problème n'est pas trop difficile à résoudre.
multsatsolv
@multsatsolv cela dépend du problème. Cela dépend également de l'encodage. Les solveurs SAT peuvent gérer différemment différents encodages du même problème. Et différents solveurs SAT pourraient être meilleurs à un codage qu'à un autre; il n'y a pas de science là-dedans (enfin il y en a, mais cela vaut la peine d'essayer de comprendre, dans l'évolution rapide des solveurs SAT): la seule chose à faire est d'essayer différentes combinaisons d'encodages et de solveurs.
Realz Slaw
3

Il existe en fait un moyen très simple de transformer n'importe quel solveur SAT en une version parallèle car SAT est embarrassamment parallèle dans le sens suivant.

2nn2n

vzn
la source
nk
3
Cette approche ne semble pas trop bien fonctionner dans la pratique. Pour les cas positifs l'approche suivante est généralement beaucoup mieux si vous avez beaucoup d'ordinateurs: par exemple , il suffit de lancer lingeling avec la même instance , mais différentes graines aléatoires et d' attendre jusqu'à ce que l' un des solveurs trouve une solution.
Jukka Suomela
n
1
@vzn: L'approche que vous avez suggérée. Pour voir pourquoi cela ne fonctionne pas trop bien, essayez-le avec des instances du monde réel et comparez-le avec ce que j'ai suggéré. :) Votre approche aurait beaucoup de sens si vous utilisiez un algorithme de recherche de backtracking naïf, mais les solveurs SAT modernes sont bien plus qu'une recherche de backtracking naïf.
Jukka Suomela
très bien, mais pouvez-vous expliquer en mots quel est le problème ? votre approche peut fonctionner pour des instances satisfaisables, mais ne faudrait-il pas exactement le même temps en parallèle pour découvrir une instance non satisfaisante, quel que soit le nombre d'instances distinctes exécutées? sinon, il y a peut-être une référence à citer sur le sujet ...
vzn