Cláusula basada en conflictos Aprendizaje clarificación de retroceso

9

En la página de Wikipedia aquí , describe bastante bien el algoritmo CDCL (y parece que las imágenes fueron tomadas de diapositivas creadas por Sharad Malik en Princeton). Sin embargo, al describir cómo dar marcha atrás, todo lo que dice es "al punto apropiado". MiniSAT también usa una variante del algoritmo CDCL, así que leí este artículo. Lo que parecen decir es que debes retroceder hasta que la cláusula aprendida sea una cláusula de unidad. Eso es sin duda una aclaración, pero no tiene sentido para mí. La última asignación definitivamente será parte de la cláusula de conflicto aprendido hasta donde puedo decir (¿tal vez estoy equivocado aquí?) Entonces, cuando retrocedas un paso, inmediatamente harás la unidad de cláusula aprendida, el último valor asignado cambiará, y el algoritmo procederá exactamente como DPLL sin tener que retroceder lo suficiente. Además, la página de Wikipedia no sigue esta regla, retrocede mucho más como parece deseable.

¿Hasta dónde se supone que uno debe retroceder?

Jake
fuente

Respuestas:

7

Aquí está el párrafo relevante del documento MiniSAT:

Funalsmi

Un punto que parece haber pasado por alto es que una vez que la cláusula aprendida se convierte en unidad debido a tareas deshechas (retroceso), el solucionador no se detiene allí. Podría haber otras tareas antes de esta que no tienen relación con el conflicto actual y, experimentalmente, se ha demostrado que es mejor deshacer estas tareas no relacionadas también. Por lo tanto, el solucionador continúa deshaciendo las tareas hasta que la siguiente acción deshaga la cláusula aprendida no unitaria, es decir, contendría más de una variable no asignada. El solucionador se detiene aquí, ejecuta la propagación de la unidad para satisfacer la cláusula de la unidad y luego reanuda la búsqueda, asignando variables normalmente.

Tenga en cuenta también que la variable de decisión actual puede no estar presente en la cláusula aprendida. Una estrategia común para un solucionador de CDCL es encontrar el primer punto de implicación único y usar esa variable en la cláusula aprendida. En algunos casos, el primer UIP es la variable de decisión, pero a menudo no lo es.

Kyle Jones
fuente