Clausola di conflitto guidata Chiarimento del backtracking di apprendimento


9

Sulla pagina di Wikipedia qui descrive abbastanza bene l'algoritmo CDCL (e sembra che le foto siano state prese da diapositive create da Sharad Malik a Princeton). Tuttavia, quando si descrive come tornare indietro tutto ciò che dice è "al punto appropriato". MiniSAT utilizza anche una variante dell'algoritmo CDCL, quindi ho letto questo documento. Quello che sembrano dire è che dovresti tornare indietro fino a quando la clausola appresa non è una clausola unitaria. Questo è certamente un chiarimento, ma non ha senso per me. L'ultimo incarico farà sicuramente parte della clausola sul conflitto appreso per quanto posso dire (forse qui ho torto?) Quindi quando fai un passo indietro di un passo, farai immediatamente l'unità della clausola appresa, l'ultimo valore assegnato cambierà, e l'algoritmo procederà esattamente come DPLL senza mai tornare indietro sufficientemente lontano. Inoltre la pagina di Wikipedia non segue questa regola, fa un passo indietro molto più che sembra desiderabile.

Quanto lontano si dovrebbe tornare indietro?

Risposte:


7

Ecco il paragrafo pertinente del documento MiniSAT:

La fase decisionale continuerà fino a quando non saranno state assegnate tutte le variabili, nel qual caso abbiamo un modello o si è verificato un conflitto. In caso di conflitto, verrà invocata la procedura di apprendimento e verrà prodotta una clausola di conflitto. Il percorso verrà utilizzato per annullare la decisione, un livello alla volta, fino a quando uno dei letterali della clausola appresa non viene associato (sono tutti nel punto di conflitto). Per costruzione, la clausola del conflitto non può passare direttamente dal conflitto a una clausola con due o più valori letterali non associati. Se la clausola rimane unitaria per più livelli decisionali, è vantaggioso scegliere [sic] il livello più basso (indicato come backjumping o backtracking non cronologico ).False

Un punto che sembra esserti perso è che una volta che la clausola appresa diventa unità a causa di assegnazioni annullate (backtracking), il risolutore non si ferma qui. Potrebbero esserci altri incarichi prima di questo che non hanno attinenza con l'attuale conflitto e sperimentalmente è stato dimostrato che è meglio annullare anche questi incarichi non correlati. Pertanto, il risolutore continua a annullare le assegnazioni fino a quando la successiva annullamento non renderebbe la clausola appresa non unitaria, ovvero conterrebbe più di una variabile non assegnata. Il solutore si ferma qui, esegue la propagazione dell'unità per soddisfare la clausola unitaria e quindi riprende la ricerca, assegnando le variabili normalmente.

Si noti inoltre che la variabile di decisione corrente potrebbe non essere presente nella clausola appresa. Una strategia comune per un risolutore di CDCL è trovare il primo punto di implicazione univoco e usare quella variabile nella clausola appresa. In alcuni casi il primo UIP è la variabile decisionale, ma spesso non lo è.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.