Articulo de referencia

Aprendizaje de cláusulas basado en conflictos

En informática , el aprendizaje de cláusulas basado en conflictos ( CDCL ) es un algoritmo para resolver el problema de satisfacibilidad booleana (SAT). Dada una fórmula boolean...

En informática , el aprendizaje de cláusulas basado en conflictos ( CDCL ) es un algoritmo para resolver el problema de satisfacibilidad booleana (SAT). Dada una fórmula booleana, el problema SAT requiere una asignación de variables tal que la fórmula completa se evalúe como verdadera. Inspirado en el algoritmo DPLL , CDCL utiliza retroceso no cronológico (o salto hacia atrás ) y agrega nuevas cláusulas a la base de datos de cláusulas cada vez que ocurre un conflicto. [ 1 ]

El aprendizaje de cláusulas impulsado por el conflicto fue propuesto por Marques-Silva y Karem A. Sakallah (1996, 1999) [ 2 ] [ 3 ] y Bayardo y Schrag (1997). [ 4 ]

Fondo

Problema de satisfacibilidad booleana

El problema de satisfacibilidad consiste en encontrar una asignación satisfactoria para una fórmula dada en forma normal conjuntiva (FNC).

Un ejemplo de dicha fórmula es:

( ( no A ) o ( no C ) ) y ( B o C ),  

o, utilizando una notación común: [ 5 ]

(¬A¬do)(Bdo){\displaystyle (\lnot A\lor \lnot C)\land (B\lor C)}

donde A , B , C son variables booleanas,¬A{\displaystyle \lnot A},¬do{\displaystyle \lnot C},B{\displaystyle B}, ydo{\displaystyle C}son literales y¬A¬do{\displaystyle \lnot A\lor \lnot C}yBdo{\displaystyle B\lor C}son cláusulas.

Una asignación satisfactoria para esta fórmula es, por ejemplo:

A=Falsmi,B=Falsmi,do=Trmi{\displaystyle A=\mathrm {Falso}, B=\mathrm {Falso}, C=\mathrm {Verdadero}}

puesto que hace que la primera cláusula sea verdadera (ya que¬A{\displaystyle \lnot A}es cierto) así como el segundo (ya quedo{\displaystyle C}es cierto).

Este ejemplo utiliza tres variables ( A , B , C ), y hay dos posibles asignaciones (Verdadero y Falso) para cada una de ellas. Por lo tanto, uno tiene23=8{\displaystyle 2^{3}=8}posibilidades. En este pequeño ejemplo, se puede usar la búsqueda por fuerza bruta para probar todas las asignaciones posibles y comprobar si satisfacen la fórmula. Pero en aplicaciones reales con millones de variables y cláusulas, la búsqueda por fuerza bruta resulta poco práctica. La responsabilidad de un solucionador SAT es encontrar una asignación satisfactoria de forma eficiente y rápida aplicando diferentes heurísticas para fórmulas CNF complejas.

Regla de cláusula de unidad (propagación de unidades)

Si una cláusula tiene todos sus literales o variables menos uno evaluados como Falso, entonces el literal libre debe ser Verdadero para que la cláusula sea Verdadera. Por ejemplo, si la cláusula insatisfecha a continuación se evalúa conA=Falsmi{\displaystyle A=\mathrm {Falso} }yB=Falsmi{\displaystyle B=\mathrm {Falso} }debemos tenerdo=Trmi{\displaystyle C=\mathrm {Verdadero} } para que la cláusula(ABdo){\displaystyle (A\lor B\lor C)}ser cierto.

La aplicación iterativa de la regla de la cláusula de unidad se denomina propagación de unidad o propagación de restricción booleana (BCP).

Resolución

Consideremos dos cláusulas(ABdo){\displaystyle (A\lor B\lor C)}y(¬doD¬mi){\displaystyle (\neg C\lor D\lor \neg E)}La cláusula(ABD¬mi){\displaystyle (A\lor B\lor D\lor \neg E)}, obtenido al fusionar las dos cláusulas y eliminar ambas¬do{\displaystyle \neg C}ydo{\displaystyle C}, se denomina resolvente de las dos cláusulas.

La resolvente es equisatisfacible con sus premisas (es decir, la resolvente es satisfacible si y solo si ambas premisas son satisfacibles).

Algoritmo

Formalización

Se puede utilizar una notación similar al cálculo de secuencias para formalizar muchos algoritmos de reescritura, incluido CDCL. Las siguientes son las reglas que un solucionador de CDCL puede aplicar para demostrar que no existe una asignación satisfactoria o para encontrar una, es decir:A=(l1,¬l2,l3,...){\displaystyle A=(l_{1},\neg l_{2},l_{3},...)}y cláusula de conflictodo{\displaystyle C}. [ 6 ]

Propagar Si una cláusula en la fórmulaΦ{\displaystyle \Phi }tiene exactamente un literal sin asignarl{\displaystyle l}enA{\displaystyle A}, con todos los demás literales en la cláusula asignados como falsos enA{\displaystyle A}, extenderA{\displaystyle A}conl{\displaystyle l}Esta regla representa la idea de que una cláusula actualmente falsa con solo una variable sin definir obliga a que esa variable se defina de tal manera que toda la cláusula sea verdadera; de lo contrario, la fórmula no se cumplirá .

{l1,,lnorte,l}Φ¬l1,,¬lnorteAl,¬lAA:=Al (Propagar){\displaystyle {\frac {\begin{array}{c}\{l_{1},\dots ,l_{n},l\}\in \Phi \;\;\;\neg l_{1},\dots ,\neg l_{n}\in A\;\;\;\;\;l,\neg l\notin A\end{array}}{A:=A\;l}}{\text{ (Propagar)}}}

Decide si un literall{\displaystyle l}está en el conjunto de literales deΦ{\displaystyle \Phi }y ningunol{\displaystyle l}ni¬l{\displaystyle \neg l}está enA{\displaystyle A}, luego decide sobre el valor de verdad del{\displaystyle l}y extenderA{\displaystyle A}con la decisión literall{\displaystyle \bullet l}Esta regla representa la idea de que, si no estás obligado a realizar una tarea, debes elegir una variable para asignar y anotar cuál fue la asignación elegida, para que puedas volver atrás si la elección no dio como resultado una asignación satisfactoria .

lLiteratura(Φ)l,¬lAA:=Al (Decidir){\displaystyle {\frac {\begin{array}{c}l\in {\text{Lits}}(\Phi )\;\;\;l,\neg l\notin A\end{array}}{A:=A\;\bullet \;l}}{\text{ (Decidir)}}}

Conflicto Si existe una cláusula contradictoria{l1,,lnorte}Φ{\displaystyle \{l_{1},\dots ,l_{n}\}\in \Phi }de tal manera que sus negaciones¬l1,,¬lnorte{\displaystyle \neg l_{1},\dots,\neg l_{n}}están enA{\displaystyle A}, establecer la cláusula de conflictodo{\displaystyle C}a{l1,,lnorte}{\displaystyle \{l_{1},\dots,l_{n}\}}Esta regla representa la detección de un conflicto cuando todos los literales en una cláusula se asignan a falso bajo la asignación actual.

do=NINGUNO{l1,,lnorte}Φ¬l1,,¬lnorteAdo:={l1,,lnorte} (Conflicto){\displaystyle {\frac {\begin{array}{c}C={\text{NINGUNO}}\;\;\;\{l_{1},\dots ,l_{n}\}\in \Phi \;\;\;\neg l_{1},\dots ,\neg l_{n}\in A\end{array}}{C:=\{l_{1},\dots ,l_{n}\}}}{\text{ (Conflicto)}}}

Explicar si la cláusula de conflictodo{\displaystyle C}es de la forma{l}D{\displaystyle \{l\}\cup D}, hay una cláusula antecedente{l1,,lnorte,¬l}Φ{\displaystyle \{l_{1},\dots ,l_{n},\neg l\}\in \Phi }y¬l1,,¬lnorte{\displaystyle \neg l_{1},\dots,\neg l_{n}}se asignan antes¬l{\displaystyle \neg l}enA{\displaystyle A}, luego explique el conflicto resolviéndolodo{\displaystyle C}con la cláusula antecedente. Esta regla explica el conflicto al derivar una nueva cláusula de conflicto que está implícita en la cláusula de conflicto actual y en una cláusula que provocó la asignación de un literal en la cláusula de conflicto.

do={l}D{l1,,lnorte,¬l}Φ¬l1,,¬lnorte,¬lA¬l1,,¬lnorte asignado antes ¬ldo:={l1,,lnorte}D (Explicar){\displaystyle {\frac {\begin{array}{c}C=\{l\}\cup D\;\;\;\{l_{1},\dots ,l_{n},\neg l\}\in \Phi \;\;\;\neg l_{1},\dots ,\neg l_{n},\neg l\in A\;\;\;\;\;\neg l_{1},\dots ,\neg l_{n}{\text{ asignado antes }}\neg l\end{array}}{C:=\{l_{1},\dots ,l_{n}\}\cup D}}{\text{ (Explicar)}}}

Salto hacia atrás Si la cláusula de conflictodo{\displaystyle C}es de la forma{l,l1,,lnorte}{\displaystyle \{l,l_{1},\dots,l_{n}\}}dóndelev(¬l1)lev(¬lnorte)=i<lev(¬l){\displaystyle {\text{lev}}(\neg l_{1})\leq \dots \leq {\text{lev}}(\neg l_{n})=i<{\text{lev}}(\neg l)}, luego retrocede al nivel de decisióni{\displaystyle i}y asignarMETRO:=METRO[i]¬l{\displaystyle M:=M^{[i]}\neg l}y establecerdo:=NINGUNO{\displaystyle C:={\text{NONE}}}Esta regla realiza un retroceso no cronológico al volver a un nivel de decisión implícito en la cláusula de conflicto y afirmar la negación del literal que causó el conflicto en un nivel de decisión inferior .

do={l,l1,,lnorte}lev(¬l1)lev(¬lnorte)=i<lev(¬l)do:=NINGUNOA:=A[i]¬l (Salto hacia atrás){\displaystyle {\frac {\begin{array}{c}C=\{l,l_{1},\dots ,l_{n}\}\;\;\;{\text{lev}}(\neg l_{1})\leq \dots \leq {\text{lev}}(\neg l_{n})=i<{\text{lev}}(\neg l)\end{array}}{C:={\text{NONE}}\;\;\;A:=A^{[i]}\;\neg l}}{\text{ (Backjump)}}}

Se pueden agregar cláusulas de aprendizaje a la fórmula .Φ{\displaystyle \Phi }Esta regla representa el mecanismo de aprendizaje de cláusulas de los solucionadores CDCL, donde las cláusulas conflictivas se vuelven a agregar a la base de datos de cláusulas para evitar que el solucionador vuelva a cometer el mismo error en otras ramas del árbol de búsqueda.

doNINGUNOdoΦΦ:=Φ{do} (Aprender){\displaystyle {\frac {\begin{array}{c}C\neq {\text{NONE}}\;\;\;C\notin \Phi \end{array}}{\Phi :=\Phi \cup \{C\}}}{\text{ (Aprender)}}}

Estas 6 reglas son suficientes para el CDCL básico, pero las implementaciones modernas de solucionadores SAT también suelen añadir reglas heurísticas adicionales para recorrer el espacio de búsqueda de forma más eficiente y resolver los problemas SAT más rápidamente.

Las cláusulas Forget Learned se pueden eliminar de la fórmula.Φ{\displaystyle \Phi }para ahorrar memoria. Esta regla representa el mecanismo de olvido de cláusulas, donde se eliminan las cláusulas aprendidas menos útiles para controlar el tamaño de la base de datos de cláusulas.Φdo{\displaystyle \Phi '\models C}indica que la fórmulaΦ{\displaystyle \Phi '}sin la cláusulado{\displaystyle C}aún implicado{\displaystyle C}, significadodo{\displaystyle C}es redundante.do=NINGUNOΦ=Φ{do}ΦdoΦ:=Φ (Olvidar){\displaystyle {\frac {\begin{array}{c}C={\text{NONE}}\;\;\;\Phi =\Phi '\cup \{C\}\;\;\;\Phi '\models C\end{array}}{\Phi :=\Phi '}}{\text{ (Olvidar)}}}

Reiniciar El solucionador se puede reiniciar restableciendo la asignación.A{\displaystyle A}a la tarea vacíaA[0]{\displaystyle A^{[0]}}y estableciendo la cláusula de conflictodo{\displaystyle C}aNINGUNO{\displaystyle {\text{NONE}}}Esta regla representa el mecanismo de reinicio, que permite al solucionador salir de un espacio de búsqueda potencialmente improductivo y volver a empezar, a menudo guiado por las cláusulas aprendidas. Cabe destacar que las cláusulas aprendidas se conservan incluso después de los reinicios, lo que garantiza la finalización del algoritmo .

A:=A[0]do:=NINGUNO (Reanudar){\displaystyle {\frac {\begin{array}{c}\end{array}}{A:=A^{[0]}\;\;\;C:={\text{NONE}}}}{\text{ (Restart)}}}

Visualización

El aprendizaje de cláusulas basado en conflictos funciona de la siguiente manera.

  1. Selecciona una variable y asígnale el valor Verdadero o Falso. Esto se denomina estado de decisión. Recuerda la asignación.
  2. Aplicar propagación de restricciones booleanas (propagación de unidades).
  3. Construye el gráfico de implicación .
  4. Si existe algún conflicto:
    1. Encuentra el corte en el gráfico de implicación que condujo al conflicto.
    2. Derive una nueva cláusula que sea la negación de las asignaciones que llevaron al conflicto.
    3. Retroceda de forma no cronológica ("salto hacia atrás") al nivel de decisión apropiado, donde se asignó la primera variable involucrada en el conflicto.
  5. De lo contrario, continúe desde el paso 1 hasta que se hayan asignado todos los valores a las variables.

Ejemplo

Un ejemplo visual del algoritmo CDCL: [ 5 ]

Lo completo

DPLL es un algoritmo sólido y completo para SAT, es decir, una fórmula ϕ es satisfacible si y solo si DPLL puede encontrar una asignación satisfactoria para ϕ. Los solucionadores SAT de CDCL implementan DPLL, pero pueden aprender nuevas cláusulas y retroceder de forma no cronológica. El aprendizaje de cláusulas con análisis de conflictos no afecta ni la solidez ni la completitud. El análisis de conflictos identifica nuevas cláusulas mediante la operación de resolución. Por lo tanto, cada cláusula aprendida puede inferirse a partir de las cláusulas originales y otras cláusulas aprendidas mediante una secuencia de pasos de resolución. Si cN es la nueva cláusula aprendida, entonces ϕ es satisfacible si y solo si ϕ ∪ {cN} también es satisfacible. Además, el paso de retroceso modificado tampoco afecta la solidez ni la completitud, ya que la información de retroceso se obtiene de cada nueva cláusula aprendida. [ 7 ]

Aplicaciones

La principal aplicación del algoritmo CDCL se encuentra en diferentes solucionadores SAT, entre los que se incluyen:

  • MiniSAT
  • Zchaff SAT
  • Z3
  • Glucosa [ 8 ]
  • Muchos SAT, etc.

El algoritmo CDCL ha hecho que los solucionadores SAT sean tan potentes que se están utilizando eficazmente en varias áreas de aplicación del mundo real, como la planificación de IA, la bioinformática , la generación de patrones de prueba de software, las dependencias de paquetes de software, la verificación de modelos de hardware y software y la criptografía .

Los algoritmos relacionados con CDCL son el algoritmo de Davis-Putnam y el algoritmo DPLL . El algoritmo DP utiliza refutación por resolución y presenta un posible problema de acceso a la memoria. Si bien el algoritmo DPLL es adecuado para instancias generadas aleatoriamente, resulta inadecuado para instancias generadas en aplicaciones prácticas. CDCL es un enfoque más potente para resolver estos problemas, ya que su aplicación requiere menos búsqueda en el espacio de estados en comparación con DPLL.

Obras citadas

  1. ^ Marqués-Silva, Joao; Lynce, Inés; Malik, Sharad (29 de enero de 2009). "Solucionadores SAT de aprendizaje de cláusulas basadas en conflictos". En Biere, Armin; Heule, Marijn; van Maaren, Hans; Walsch, Toby (eds.). Manual de Satisfacibilidad . Publicaciones SAGE, limitadas. pag.  127.ISBN 9781607503767.
  2. JP Marques-Silva; Karem A. Sakallah (noviembre de 1996). "GRASP: un nuevo algoritmo de búsqueda para la satisfacibilidad". Resumen de la Conferencia Internacional IEEE sobre Diseño Asistido por Computadora (ICCAD) . págs. 220–227 . CiteSeerX 10.1.1.49.2075 . doi : 10.1109/ICCAD.1996.569607 . ISBN   978-0-8186-7597-3.
  3. JP Marques-Silva; Karem A. Sakallah (mayo de 1999). "GRASP: Un algoritmo de búsqueda para la satisfacibilidad proposicional" (PDF) . IEEE Transactions on Computers . 48 (5): 506– 521. doi : 10.1109/12.769433 . Archivado del original (PDF) el 4 de marzo de 2016. Recuperado el 29 de noviembre de 2014 .
  4. Roberto J. Bayardo Jr.; Robert C. Schrag (1997). "Uso de técnicas de análisis retrospectivo de CSP para resolver instancias SAT del mundo real" (PDF) . Actas de la 14.ª Conferencia Nacional sobre Inteligencia Artificial (AAAI) . págs. 203–208 . 
  5. 1 2 En las imágenes a continuación, "+{\displaystyle +}" se utiliza para denotar "o", la multiplicación para denotar "y", y un sufijo "{\displaystyle '}" para denotar "no".
  6. "Wayback Machine" (PDF) . mathweb.ucsd.edu . Archivado del original (PDF) el 19 de mayo de 2024. Consultado el 2 de octubre de 2025 .{{cite web}}: La cita utiliza un título genérico ( ayuda )
  7. Marques-Silva, Joao; Lynce, Ines; Malik, Sharad (febrero de 2009). Manual de satisfacibilidad (PDF) . IOS Press. pág. 138. ISBN  978-1-60750-376-7.
  8. "Página principal de la glucosa" .

Referencias

  • Martin Davis; Hilary Putnam (1960). "Un procedimiento computacional para la teoría de la cuantificación" . J. ACM . 7 (3): 201– 215. doi : 10.1145/321033.321034 . S2CID 31888376 . 
  • Martin Davis; George Logemann; Donald Loveland (julio de 1962). "Un programa informático para la demostración de teoremas". Communications of the ACM . 5 (7): 394– 397. doi : 10.1145/368273.368557 . hdl : 2027/mdp.39015095248095 . S2CID 15866917 . 
  • Matthew W. Moskewicz; Conor F. Madigan; Ying Zhao; Lintao Zhang; Sharad Malik (2001). "Chaff: ingeniería de un solucionador SAT eficiente" (PDF) . Actas de la 38.ª Conferencia Anual de Automatización del Diseño (DAC) . págs. 530–535 . 
  • Lintao Zhang; Conor F. Madigan; Matthew H. Moskewicz; Sharad Malik (2001). "Aprendizaje eficiente basado en conflictos en un solucionador de satisfacibilidad booleana" (PDF) . Actas de la Conferencia Internacional IEEE/ACM sobre Diseño Asistido por Computadora (ICCAD) . págs. 279–285 . 
  • Presentación: "Resolución de problemas SAT: De Davis-Putnam a Zchaff y más allá", a cargo de Lintao Zhang. (Varias imágenes se han tomado de su presentación).