Indietro |
Papadimitriou
ha proposto una procedura di semidecisione per il 2SAT, che modifica ripetutamente
l’assegnamento di verità per una variabile in una clausola non soddisfacibile
[102]. Questa soddisfa la clausola ma può fare diventare non
soddisfacibili altre clausole. Utilizzando un argomento basato sulla rovina del
giocatore d'azzardo, Papadimitriou dimostra che, se il problema è poi
soddisfacibile questa procedura troverà un assegnamento soddisfacente in O(N2) cambiamenti, con una probabilità che si
avvicina ad 3.
Figura 3.1 : La procedura di semidecisione di Papadimitriou per 2SAT
Esiste
anche una procedura di decisione per i problemi HornSAT, che modifica le
variabili nelle clausole non soddisfacibili e che impiega al massimo N cambiamenti [103].
Questa
procedura ha due fasi. Nella prima fase, comincia con un assegnamento che
assegna False
ad ogni variabile. Allora soddisfa le clausole Horn che contengono un letterale
positivo, modificando il valore assegnato ai letterali positivi. Nella seconda
fase, esamina le rimanenti clausole negative per determinare se hanno un
assegnamento soddisfacente.
Figura 3.2 : La procedura di decisione di Papadimitriou per HornSat
Koutsoupias
e Papadimitriou hanno presentato una procedura di approssimazione semplice per
la soddisfacibilità, che in seguito hanno chiamato algoritmo greedy
(goloso) [85]. In questa procedura, si sceglie a caso un
assegnamento di verità. Poi si sceglie una variabile tale che modificando i
valori di verità aumenta il numero di clausole soddisfatte. Non sono permesse
le mosse laterali. Ripetiamo finché nessun miglioramento è possibile. Se
questa è una soluzione, consideriamo successo, altrimenti abbandoniamo.
Koutsoupias e Papadimitriou hanno dimostrato che questa procedura troverà un
assegnamento soddisfacente almeno per tutti i problemi soddisfacibili con O(N2) clausole.
Anche
Gent ha proposto un algoritmo greedy altrettanto semplice e che mostra
performance ancora migliori. In quest’algoritmo, si assegna semplicemente una
variabile secondo la polarità che ha avuto più spesso. Questo troverà un
assegnamento soddisfacente per almeno tutti i problemi soddisfacibili con O(Nlog(N))
clausole
[32].
Figura
3.3
: L’algoritmo greedy di Koutsoupias e Papadimitriou
Figura 3.4 : L’algoritmo greedy di Gent
La
procedura GSAT [116] aggiunge riavvii e mosse laterali
all'algoritmo greedy di Koutsoupias e Papadimitriou. Nonostante la sua semplicità,
GSAT e le sue varianti hanno buone performance con una larga varietà di
problemi di soddisfacibilità. GSAT comincia con un assegnamento di valori di
verità alle variabili generate random, e sale modificando l’assegnamento
della variabile che determina il maggior incremento del numero totale di
clausole non soddisfatte.
Figura 3.5 : L’algoritmo di ricerca locale GSAT
Se
non esiste nessun assegnamento della variabile che può essere modificato per
aumentare il risultato, è modificata una variabile che non cambia il risultato.
Senza tali modifiche laterali, le performance di GSAT diminuiscono.
Le
procedure di ricerca locale, come il GSAT, necessitano che l'implementazione sia
fatta con qualche cura. Per ogni iterazione, è modificata soltanto una
variabile, e si calcola il numero di clausole soddisfate dopo che la variabile
è stata cambiata. Per N
variabili
e L
clausole, il lavoro richiesto è O(NL).
Al raggiungimento del numero massimo d’iterazioni, fissato dalla variabile Max-flips, il GSAT ricomincia con un nuovo assegnamento random.
Sebastiani
ha descritto come modificare il GSAT in modo che si possa usare con formule non
clausali [46]. Lui ha mostrato come calcolare il numero di clausole che
potrebbero essere soddisfatte, se le formule fossero convertite in CNF senza
costruire la conversione di CNF stessa. Questo calcolo impiega tempo lineare con
la dimensione della formula in ingresso.
Nello
stesso momento quando è stato presentato il GSAT, Gu ha proposto varie famiglie
di procedure di ricerca locale per il SAT [55]. Queste procedure presentano alcune
somiglianze con il GSAT. Comunque, loro hanno una struttura di controllo diversa
che li permette di muoversi lateralmente quando sono possibili mosse in salita.
Non è stato fatto ancora nessun paragone diretto tra le procedure di Gu e la
procedura GSAT con le sue versioni.
Figura
3.6
: La famiglia di procedure SAT 1.0 introdotte da Gu
Una
modifica della procedura GSAT, che può essere molto utile su una certa classe
di problemi, consiste nei pesi
delle clausole,
introdotte in [112] e [99]. Per ogni clausola è associato un peso che è variato durante la
ricerca per focalizzare l’attenzione sulle clausole più difficili. La
funzione risultato è la somma dei pesi delle clausole soddisfatte. Selman e
Kautz hanno cambiato originalmente solamente i pesi alla fine di ogni prova.
Frank ha mostrato che GSAT e HSAT, possono essere migliorate se i pesi sono
cambiati dopo ogni modifica [25].
Il
successo della procedura di semidecisione di Papadimitriou per il 2SAT e la sua procedura di decisione per il
HornSAT, illustra i benefici nel focalizzarsi sulle variabili in clausole non
soddisfatte (le chiameremo variabili
non soddisfatte).
Una
versione del GSAT, chiamata GSAT con random
walk
[114] focalizza alcuni dei suoi sforzi di ricerca sulle variabili non
soddisfatte. Il GSAT con random walk modifica con probabilità
p una variabile in una clausola non
soddisfatta, altrimenti sale. Modificare una variabile non soddisfatta può far
decrescere il numero delle clausole soddisfatte. Ciononostante, il random walk
migliora notevolmente le performance del GSAT. Sembra una strategia migliore
modificare una variabile non soddisfatta, invece di modificare una variabile
random con probabilità p. In tutti gli assegnamenti soddisfacenti,
almeno una delle variabili in una clausola non soddisfatta deve avere il valore
di verità opposto. Perciò, dobbiamo modificare almeno una di loro che portano
ad un assegnamento soddisfacente.
Siccome
la ricerca del GSAT è governata dalle variabili di questo set di clausole non
soddisfatte, modificare una variabile non soddisfatta introduce diversità nella
ricerca. In [41], Gent e al. hanno mostrato che, uno dei più
grandi benefici nell’aggiungere random walk è la riduzione della sensibilità
delle performance al parametro MaxFlips.
La
procedura WalkSAT presentata in [114] prende l'idea di random walk e la inserisce
come componente centrale dell'algoritmo. Essenzialmente, il WalkSAT aggiunge i
riavvii ed un’euristica per scegliere tra le variabili non soddisfatte alla
procedura di decisione di Papadmitriou per 2SAT.
WalkSAT
sceglie a caso una clausola non soddisfatta, e poi da questa sceglie una
variabile non soddisfatta per modificarla usando un’euristica greedy oppure
una random. La scelta esatta è come segue: se una variabile può essere
modificata per soddisfare la clausola senza spezzare nessun'altra
clausola, allora la variabile è modificata, altrimenti con la probabilità
p modifichiamo la variabile che spezza il
minor numero di clausole, oppure modifichiamo una variabile a caso. Notiamo che,
diversamente dal GSAT, la funzione risultato non considera il numero di clausole
soddisfatte, ma solamente il numero di clausole che attualmente sono soddisfatte
e diventeranno non soddisfatte.
Figura 3.7 : La procedura di ricerca locale WalkSat
Forse
ispirato dalle buone performance del WalkSAT e HSAT, l’algoritmo Novelty [93] combina insieme una focalizzazione sulle
clausole non soddisfatte con un meccanismo simile al HSAT per variabili
modificate che non sono state modificate recentemente. L'algoritmo Novelty
ritorna alla funzione di punteggio del GSAT anche il numero delle clausole
soddisfatte. L’algoritmo Novelty sceglie in modo random una clausola non
soddisfatta. Poi modifica la variabile che presenta il punteggio più alto e che
non è l'ultima variabile per essere modificata nella clausola. Se c’è, poi
con probabilità p,
Novelty modifica la variabile col
prossimo punteggio più alto, e con probabilità 1-p,
la variabile con il punteggio maggiore. L'algoritmo R-Novelty, introdotto sempre
in [93], tiene conto della differenza tra i due
risultati maggiori. Questo fa la procedura interamente deterministica per pÎ{0,
0.5, 1}. Per
inibire i loop, la variabile non soddisfatta è selezionata in modo random ogni 100 cambiamenti.
Simulated
annealing non si dimostra così popolare come i metodi di ricerca locale, per
esempio il GSAT. I confronti tra i metodi di ricerca locale come il GSAT ed il
simulated annealing dipingono un quadro piuttosto confuso. Per esempio,
Selman e Kautz non sono riusciti trovare uno schedule d’annealing che funzioni
meglio del GSAT [113].
D'altra
parte, Spears ha presentato dei risultati che suggeriscono che simulated
annealing funzioni meglio del GSAT sui problemi 3SAT random difficili [121]. Ad oggi non abbiamo nessuna notizia su qualche confronto tra il
simulated annealing ed i metodi di ricerca locale come il WalkSAT ed il Novelty,
che tendono a funzionare meglio del GSAT su queste classi di problemi.
Mazure,
Sais e Gregoire hanno mostrato che la ricerca tabu funziona bene sui problemi
SAT. Loro hanno proposto il TSAT, un algoritmo di ricerca tabu per il SAT [92]. Questo algoritmo tiene una lista FIFO di
lunghezza fissa delle variabili modificate. Sui problemi 3SAT random difficili, hanno trovato che la
lunghezza ottimale di questa lista tabu aumenta linearmente con N. Hanno mostrato che con tale lista il TSAT
era molto competitiva con il WalkSAT.
C'è
stato qualche interesse sui metodi ibridi che combinano insieme le migliori
caratteristiche dei metodi approssimati e quelli completi per il SAT. In metodi
di ricerca locale possono attraversare rapidamente lo spazio di ricerca. D'altra
parte, i metodi completi tendono a seguire traiettorie molto più limitate. Per
questo, loro sono compensati da regole propagazione di vincoli come l’unit
propagation. Perciò, Zhang e Zhang hanno proposto un metodo ibrido per il SAT
che combina insieme un metodo di ricerca locale basato su GSAT ed una procedura
sistematica basata sulla procedura di Davis-Putnam [133]. Loro riportano alcuni promettenti risultati su certi problemi di
esistenza di quasigroup.
Per
risolvere i problemi SAT sono state utilizzate anche le reti neurali e gli
algoritmi genetici. Un'eccezione è presentata in [120] dove Spears propone un algoritmo di rete Hopfield per risolvere i
problemi SAT. La rete è basata su alberi di parsing AND/OR del problema SAT.
Spears riporta dei risultati favorevoli sui problemi 3SAT random difficili confrontati con il GSAT.
Spears e de Jong hanno proposto
anche un semplice algoritmo genetico per risolvere i problemi SAT [72].
Comunque,
sono stati riportati dei risultati insufficienti per determinare se
quest’approccio è competitivo con i metodi di ricerca locale come il GSAT.
Hogg
e Williams hanno proposto algoritmi quantum per risolvere i problemi SAT. Per
esempio, Hogg ha proposto un algoritmo quantum semplice per la soddisfacibilità
ed il CSP [60]. Lui
ha osservato una phase transition sui problemi 3SAT
random come vista nei metodi computazionali classici.
Finalmente,
Lipton ha mostrato problemi SAT che utilizzano metodi di calcolo basato su DNA [90].
Indietro | ||
Procedure complete |
SAT solver |
Comportamento di phase transition |