Algoritmo AC-3

Idea esencial

AC-3 mantiene una cola de arcos pendientes. Revisa cada arco, elimina valores sin soporte y vuelve a revisar únicamente los arcos que podrían haberse vuelto inconsistentes a causa de esa eliminación.

Antes de continuar

Conviene dominar primero soporte, dirección y consistencia de un solo arco. AC-3 no introduce una definición nueva de soporte: organiza cuándo repetir esa revisión en toda la red.

¿Por qué no basta una sola pasada?

Supongamos que ya se revisó . Más tarde, otro arco elimina valores de . Algún valor de podría haber perdido precisamente su único soporte, así que el arco anterior debe reconsiderarse. La propagación continúa hasta alcanzar un punto fijo: una pasada completa ya no produciría cambios.

Estructuras que utiliza

  • Dominios actuales: se reducen de manera monótona; los valores eliminados no regresan durante una ejecución.
  • Cola : contiene arcos cuya consistencia debe comprobarse.
  • REVISAR(X_i,X_j): elimina de los valores que no tienen soporte en .

Una restricción binaria no dirigida produce dos arcos dirigidos. Inicialmente se insertan ambos en la cola.

Algoritmo paso a paso

  1. Introducir en todos los arcos dirigidos del CSP.
  2. Extraer un arco .
  3. Ejecutar REVISAR(X_i,X_j).
  4. Si quedó vacío, devolver fallo.
  5. Si cambió, reinsertar cada arco de los otros vecinos de .
  6. Repetir hasta vaciar la cola.
AC-3(csp):
    Q ← todos los arcos dirigidos del csp
    mientras Q no esté vacía:
        (Xi, Xj) ← extraer(Q)
        si REVISAR(Xi, Xj):
            si D(Xi) = ∅:
                devolver fallo
            para cada Xk vecino de Xi, Xk ≠ Xj:
                añadir (Xk, Xi) a Q
    devolver dominios consistentes por arcos

Por qué se reinsertan arcos hacia

REVISAR(X_i,X_j) solo puede reducir . Ese cambio no perjudica a : los valores eliminados de eran precisamente los que no encontraban apoyo en . En cambio, sí puede perjudicar a otro vecino , porque alguno de sus valores quizá dependía de un valor de recién eliminado. Por eso se reinsertan los arcos y no todos los arcos de la red.

Ejemplo mínimo

Con , y :

  1. La cola comienza con .
  2. Revisar conserva y elimina de .
  3. Revisar confirma que tiene soporte en .
  4. La cola queda vacía con y .

Visualización: después, la propagación

Después del ejemplo de dos variables, la visualización añade una tercera: y . Sigue cómo una reducción en obliga a reinsertar y cómo la información se propaga de derecha a izquierda hasta alcanzar dominios unitarios.

Qué observar

No memorices primero el orden exacto de la cola. Identifica la causa: si cambia el dominio situado en la cabeza de un arco ya revisado, algunos valores de su cola pueden haber perdido soporte y ese arco debe comprobarse otra vez.

Visualización aplicada: coloreo de un mapa

Una vez entendido el mecanismo con la cadena de tres variables, este segundo recorrido lo aplica a un subproblema de coloreo. Cada región es una variable, los colores son su dominio y cada arista impone que las dos regiones tengan colores distintos. El ejemplo comienza con SA = azul; al avanzar, AC-3 examina un arco dirigido, elimina colores sin soporte y actualiza la cola cuando una reducción puede afectar a otros vecinos.

Cómo leerla

  1. Usa Siguiente paso y localiza la flecha naranja: indica el arco que se está revisando.
  2. Mira primero el dominio de y pregunta qué valores de todavía tienen algún color compatible allí.
  3. Si desaparece un color de , comprueba qué arcos dirigidos hacia regresan a la cola.

El grafo contiene solo cuatro regiones y un conjunto reducido de adyacencias para aislar la mecánica de AC-3; no pretende reproducir todo el mapa australiano clásico.

Resultados posibles

ResultadoInterpretación
Algún dominio queda vacíoLa rama actual es inconsistente; debe fallar o retroceder.
Todos los dominios quedan unitariosLa propagación determinó una asignación completa.
La cola se vacía y quedan dominios múltiplesEl CSP es consistente por arcos, pero todavía puede requerir búsqueda.

AC-3 conserva el conjunto de soluciones: solo elimina valores que no podrían satisfacer alguna restricción binaria con el dominio actual.

Complejidad

Si es el número de arcos dirigidos y el tamaño máximo de un dominio, una cota clásica es

Cada revisión puede comparar hasta pares de valores y un arco puede volver a la cola un número acotado por las eliminaciones de dominio. Esta es una cota de peor caso; el ahorro real depende de cuánta búsqueda evite la propagación.

Cuándo se ejecuta

  • Como preprocesamiento: antes de buscar, para comenzar con dominios reducidos.
  • Durante la búsqueda: después de una asignación. En Maintaining Arc Consistency (MAC), se inicia la cola con los arcos que llegan a la variable recién asignada y se propaga desde ahí.

AC-3 suele podar más que forward checking, pero también realiza más trabajo por decisión.

Errores comunes

  • Tratar una arista como un solo arco y olvidar revisar la dirección inversa.
  • Eliminar un valor porque no coincide con todos los valores vecinos; basta con que tenga un soporte.
  • No reinsertar arcos después de reducir un dominio.
  • Concluir que «cola vacía» significa «solución encontrada».
  • Confundir AC-3, que es un algoritmo, con la propiedad que intenta imponer.

Referencias