Risposte:
La ricerca della risoluzione (solo l'applicazione della regola della risoluzione con una buona euristica) è un'altra possibile strategia per i solutori di SAT. Teoricamente è esponenzialmente più potente (cioè esistono problemi per i quali ha prove esponenziali più brevi) di DPLL (che fa solo la risoluzione dell'albero anche se è possibile aumentarlo con l'apprendimento nogood per aumentare il suo potere - se ciò lo rende tanto potente quanto la risoluzione generale è ancora aperto per quanto ne so) ma non conosco un'implementazione effettiva che funzioni meglio.
Se non ti limiti a completare la ricerca, WalkSat è un solutore di ricerca locale che può essere utilizzato per trovare soluzioni soddisfacenti e sovraperformare la ricerca basata su DPLL in molti casi. Non è possibile utilizzarlo per dimostrare insoddisfazione, a meno che non si memorizzino nella cache tutti gli incarichi che hanno fallito, il che significherebbe requisiti di memoria esponenziale.
Modifica: dimenticato di aggiungere - È possibile utilizzare anche i piani di taglio (riducendo SAT a un programma intero). In particolare, i tagli di Gomory sono sufficienti per risolvere in modo ottimale qualsiasi programma intero. Anche nel caso peggiore, potrebbe essere necessario un numero esponenziale. Penso che il libro sulla complessità computazionale di Arora & Barak abbia alcuni altri esempi di sistemi di prova che in teoria si potrebbero usare per qualcosa come la risoluzione di SAT. Ancora una volta, non ho mai visto un'implementazione rapida di nulla oltre ai metodi di ricerca basati su DPLL o locali.
La propagazione dei sondaggi è un altro algoritmo che è stato utilizzato con successo su alcuni tipi di problemi SAT, in particolare istanze SAT casuali. Come WalkSAT, non può essere utilizzato per dimostrare insoddisfazione, ma si basa su idee molto diverse (algoritmi di passaggio dei messaggi) da WalkSAT.
Esistono solutori SAT basati sulla ricerca locale. Vedi, ad esempio, questo documento per l'esposizione.
Puoi anche dire che tutti i solutori CSP sono anche solutori SAT. E ci sono per quanto ne so due metodi utilizzati in CSP:
Monte Carlo Tree Search (MCTS) ha recentemente ottenuto alcuni risultati impressionanti su giochi come Go. L'idea di base approssimativa è la simulazione casuale interlacciata con la ricerca dell'albero. È leggero e facile da implementare, la pagina dell'hub di ricerca che ho collegato contiene molti esempi, documenti e anche un po 'di codice.
Previti et al. [1] ha svolto alcune indagini preliminari su MCTS applicate a SAT. Chiamano l'algoritmo di ricerca basato su MCTS UCTSAT ("limiti di confidenza superiore applicati agli alberi SAT", se lo desideri). Hanno confrontato le prestazioni di DPLL e UCTSAT su istanze dal repository SATLIB, con l'obiettivo di vedere se UCTSAT avrebbe prodotto alberi di ricerca significativamente più piccoli di DPLL.
Per istanze di colorazione casuali uniformi 3-SAT e a grafico piatto di dimensioni diverse, non vi sono state differenze significative. Tuttavia, UCTSAT ha funzionato meglio per le istanze del mondo reale. Le dimensioni medie degli alberi (in termini di numero di nodi) per quattro diverse istanze di analisi dei guasti del circuito SSA erano in diverse migliaia per DPLL, mentre sempre meno di 200 per UCTSAT.
DPLL non specifica rigorosamente l'ordinamento a visita variabile e ci sono molte ricerche interessanti che esaminano le strategie di attacco all'ordinamento variabile ottimali. parte di questo è incorporato nella logica di selezione variabile negli algoritmi SAT. in un certo senso alcune di queste ricerche sono preliminari in quanto mostrano che diversi ordinamenti di attacchi variabili portano a differenti vincoli sequenziali (che sono altamente correlati con la durezza dell'istanza), e escogitare l'euristica o le strategie più efficaci per sfruttare questa visione apparentemente chiave sembra essere nelle prime fasi della ricerca.