Búsqueda en espacio de estados Departamento de Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla Representación como espacio de estados Abstracción Problema Lenguaje de programación Implementación del problema Algoritmos de búsqueda Búsqueda de solución Solución Interpretación del resultado Torres de Hanoi: • Tres varillas verticales. • Discos de distinto tamaño apilados de mayor a menor en una de las varillas. 1 2 3 Objetivo: pasar los discos de la varilla 1 a la 3. Reglas: 1. Se desplaza un disco cada vez. 2. Solo se desplazan los discos de arriba de las varillas. 3. No se coloca un disco sobre otro más pequeño. Estado de un problema: • Descripción de una posible situación en que puede encontrarse el problema. • Recopila toda la información relevante e ignora la irrelevante. Estado de un problema: • Descripción de una posible situación en que puede encontrarse el problema. • Recopila toda la información relevante e ignora la irrelevante. Información irrelevante para las Torres de Hanoi: • Material de las varillas y los discos. • Color de cada disco. • Etcétera. Estado de un problema: • Descripción de una posible situación en que puede encontrarse el problema. • Recopila toda la información relevante e ignora la irrelevante. Información relevante para las Torres de Hanoi: • Qué discos están colocados en cada varilla. • En qué orden están colocados esos discos. Estado de un problema: • Descripción de una posible situación en que puede encontrarse el problema. • Recopila toda la información relevante e ignora la irrelevante. Información relevante para las Torres de Hanoi: • Tamaño (relativo) de los discos colocados en cada varilla. Estado de un problema: • Descripción de una posible situación en que puede encontrarse el problema. • Recopila toda la información relevante e ignora la irrelevante. Espacio de estados de un problema: conjunto de todos los posibles estados en que puede encontrarse el problema. Espacio de estados de las Torres de Hanoi con 2 discos: 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 Acción para un problema: • • • • Transforma estados del problema en otros estados. Conjunto de posibles acciones fijo y finito. El número de acciones debería ser lo menor posible. Puede no ser posible aplicar una acción a un estado (aplicabilidad de las acciones). Acción para un problema: • • • • Transforma estados del problema en otros estados. Conjunto de posibles acciones fijo y finito. El número de acciones debería ser lo menor posible. Puede no ser posible aplicar una acción a un estado (aplicabilidad de las acciones). Acciones para las Torres de Hanoi (con 𝑛 discos): • Mover el disco de tamaño 𝑖 a la varilla 𝑗. • Condiciones de aplicabilidad: • disco 𝑖 en lo alto de una varilla distinta de 𝑗. • varilla 𝑗 sin discos o tiene en lo alto un disco mayor que 𝑖. • Número de acciones: 3𝑛 acciones. Acción para un problema: • • • • Transforma estados del problema en otros estados. Conjunto de posibles acciones fijo y finito. El número de acciones debería ser lo menor posible. Puede no ser posible aplicar una acción a un estado (aplicabilidad de las acciones). Acciones para las Torres de Hanoi (con 𝑛 discos): • Mover un disco de la varilla 𝑖 a la varilla 𝑗. • Condiciones de aplicabilidad: • varilla 𝑖 con al menos un disco. • varilla 𝑗 sin discos o el disco en lo alto de ella de mayor tamaño que el disco en lo alto de la varilla 𝑖. • Número de acciones: 6 acciones. Un problema de espacio de estados viene dado por: • Su espacio de estados. • Sus acciones, junto con las condiciones de aplicabilidad asociadas. • El estado inicial en el que se encuentra. • Los estados finales (enumerados o declarados) en los que deseamos que se encuentre. Un problema de espacio de estados viene dado por: • Su espacio de estados. • Sus acciones, junto con las condiciones de aplicabilidad asociadas. • El estado inicial en el que se encuentra. • Los estados finales (enumerados o declarados) en los que deseamos que se encuentre. Torres de Hanoi con 2 discos: • Estado inicial: 1 2 3 • Estados finales: • Descripción enumerativa: 1 2 3 • Descripción declarativa: los dos discos en la varilla 3. Solución de un problema de espacio de estados: secuencia de acciones que llevan el problema de su estado inicial a un estado final. Búsqueda de soluciones mediante procedimientos generales que son independientes del problema. Grafo de un problema de espacio de estados: • Vértices: los estados del problema. • Arco de un estado a otro: hay una acción que se puede aplicar al primero y proporciona el segundo. 1a3 1a2 1 2 3 2a3 1 2a1 2 3 3a2 1 2 3 3a1 1a2 2a1 1a3 1a2 2a3 1a3 1 2 3 2a1 3a1 1 2 3 3a2 1 2 3 1 2 3 3a1 2a3 3a2 1a3 1a2 1 2 3 2a1 2a3 1 2 3a1 3 3a2 La búsqueda de una solución se reduce a una exploración del grafo: • Comienza a partir del estado inicial. • En cada paso se considera un nuevo estado que sea sucesor directo de un estado ya analizado. • Termina al analizar un estado final (solución encontrada) o al explorar el grafo al completo (solución no encontrada). Tipos de soluciones a buscar: una solución cualquiera, todas las soluciones, la solución más corta, la solución menos costosa, etc. 1a3 1a2 1 2 3 2a3 1 2a1 2 3 3a2 1 2 3 3a1 1a2 2a1 1a3 1a2 2a3 1a3 1 2 3 2a1 3a1 1 2 3 3a2 1 2 3 1 2 3 3a1 2a3 3a2 1a3 1a2 1 2 3 2a1 2a3 1 2 3a1 3 3a2 1a3 1a2 1 2 3 2a3 1 2a1 2 3 3a2 1 2 3 3a1 1a2 2a1 1a3 1a2 2a3 1a3 1 2 3 2a1 3a1 1 2 3 3a2 1 2 3 1 2 3 3a1 2a3 3a2 1a3 1a2 1 2 3 2a1 2a3 1 2 3a1 3 3a2 Problemas con gran cantidad de estados: inviable expresar el grafo de manera explícita. • Torres de Hanoi con 𝑛 discos: 3𝑛 estados. Búsqueda en un grafo implícito, mediante un árbol de búsqueda: • Construido de manera incremental. • Nodos analizados (explorados o cerrados) y por analizar (frontera o abiertos). • Control de la repetición de nodos. 1a3 1a2 1 2 3 2a3 1 2a1 2 3 3a2 1 2 3 3a1 1a2 2a1 1a3 1a2 2a3 1a3 1 2 3 2a1 3a1 1 2 3 3a2 1 2 3 1 2 3 3a1 2a3 3a2 1a3 1a2 1 2 3 2a1 2a3 1 2 3a1 3 3a2 1a3 1a2 1 2 3 2a3 1 2a1 2 3 3a2 1 2 3 3a1 1a2 2a1 1a3 1a2 2a3 1a3 1 2 3 2a1 3a1 1 2 3 3a2 1 2 3 1 2 3 3a1 2a3 3a2 1a3 1a2 1 2 3 2a1 2a3 1 2 3a1 3 3a2 1a3 1a2 1 2 3 2a3 1 2a1 2 3 3a2 1 2 3 3a1 1a2 2a1 1a3 1a2 2a3 1a3 1 2 3 2a1 3a1 1 2 3 3a2 1 2 3 1 2 3 3a1 2a3 3a2 1a3 1a2 1 2 3 2a1 2a3 1 2 3a1 3 3a2 1a3 1a2 1 2 3 2a3 1 2a1 2 3 3a2 1 2 3 3a1 1a2 2a1 1a3 1a2 2a3 1a3 1 2 3 2a1 3a1 1 2 3 3a2 1 2 3 1 2 3 3a1 2a3 3a2 1a3 1a2 1 2 3 2a1 2a3 1 2 3a1 3 3a2 1a3 1a2 1 2 3 2a3 1 2a1 2 3 3a2 1 2 3 3a1 1a2 2a1 1a3 1a2 2a3 1a3 1 2 3 2a1 3a1 1 2 3 3a2 1 2 3 1 2 3 3a1 2a3 3a2 1a3 1a2 1 2 3 2a1 2a3 1 2 3a1 3 3a2 1a3 1a2 1 2 3 2a3 1 2a1 2 3 3a2 1 2 3 3a1 1a2 2a1 1a3 1a2 2a3 1a3 1 2 3 2a1 3a1 1 2 3 3a2 1 2 3 1 2 3 3a1 2a3 3a2 1a3 1a2 1 2 3 2a1 2a3 1 2 3a1 3 3a2 1a3 1a2 1 2 3 2a3 1 2a1 2 3 3a2 1 2 3 3a1 1a2 2a1 1a3 1a2 2a3 1a3 1 2 3 2a1 3a1 1 2 3 3a2 1 2 3 1 2 3 3a1 2a3 3a2 1a3 1a2 1 2 3 2a1 2a3 1 2 3a1 3 3a2 Nodo de un árbol de búsqueda: • Estado. • Nodo padre (ninguno para el nodo inicial). • Acción (ninguna para el nodo inicial). Para cada nodo se puede obtener la secuencia de acciones que llevan del estado inicial al estado de ese nodo. Expansión de un nodo 𝑛 con estado 𝑠: • Sucesores de 𝑛: para cada acción 𝑎 aplicable a 𝑠, nodo con estado 𝑎(𝑠), nodo padre 𝑛 y acción 𝑎. función búsqueda-general (problema) devuelve solución o fallo inicio función inicializar la frontera con el nodo inicial inicializar los nodos explorados al conjunto vacío repetir si la frontera está vacía entonces devolver fallo fin si seleccionar y sacar un nodo de la frontera si nodo contiene un estado final entonces devolver secuencia de acciones desde el nodo inicial hasta nodo fin si añadir nodo al conjunto de explorados para cada acción aplicable al estado de nodo hacer si el nodo hijo correspondiente a acción no está ni en frontera ni en explorados entonces añadir el nodo hijo a frontera fin si fin para fin repetir fin función Estrategia de búsqueda: forma de seleccionar los nodos de la frontera. • Búsqueda no informada: independiente del problema. • Búsqueda en anchura: frontera es una cola FIFO. • Búsqueda en profundidad: frontera es una pila LIFO. • Búsqueda en profundidad iterativa: búsqueda en profundidad reiterada. • Búsqueda informada: usa información específica del problema. • Búsqueda primero el mejor: se selecciona el nodo que se estima mejor candidato. • Búsqueda 𝐴∗ : se selecciona el nodo que se estima más cerca de una solución óptima. Búsqueda en anchura: 1 3 2 8 9 10 7 6 5 4 11 12 13 14 15 Búsqueda en profundidad: 1 9 2 4 5 7 13 10 6 3 8 11 12 14 15 Análisis de las estrategias de búsqueda: • Complejidad en tiempo: número de nodos generados. • Complejidad en espacio: tamaño máximo de frontera y explorados. Parámetros de complejidad: • 𝑟: factor de ramificación. • 𝑝: profundidad mínima de una solución. • 𝑚: profundidad del árbol de búsqueda. Notación Ο: complejidad del peor caso. Análisis de la búsqueda no informada: Completa Minimal Tiempo Espacio Anchura Sí Sí Ο(𝑟𝑝+1 ) Ο(𝑟𝑝+1 ) Profundidad No en general Sí con número finito de estados No Ο(𝑟𝑚+1 ) Ο(𝑟𝑚+1 ) Análisis de la búsqueda no informada: Completa Minimal Tiempo Espacio Anchura Sí Sí Ο(𝑟𝑝+1 ) Ο(𝑟𝑝+1 ) Profundidad No en general Sí con número finito de estados No Ο(𝑟𝑚+1 ) Ο(𝑟𝑚+1 ) Para ramificación 10, 106 nodos/seg y 1000 bytes/nodo Prof. 6 8 10 Tiempo 1 seg 2 min 3 horas Espacio 1 GB 103 GB 10 TB Prof. 12 14 16 Tiempo Espacio 13 días 1 PB 3.5 años 99 PB 350 años 10 EB Análisis de la búsqueda no informada: Completa Minimal Tiempo Espacio Anchura Sí Sí Ο(𝑟𝑝+1 ) Ο(𝑟𝑝+1 ) Profundidad No en general Sí con número finito de estados No Ο(𝑟𝑚+1 ) Ο(𝑟𝑚) Búsqueda en profundidad: para evitar bucles infinitos solo es necesario guardar los nodos de la rama que se está explorando. función búsqueda-p-acotada (problema, cota) devuelve solución o fallo inicio función inicializar la frontera como una pila con el nodo inicial inicializar los nodos explorados al conjunto vacío repetir si la frontera está vacía entonces devolver fallo fin si seleccionar y sacar el primer nodo de la frontera si nodo contiene un estado final entonces devolver secuencia de acciones desde el nodo inicial hasta nodo fin si añadir nodo al conjunto de explorados si profundidad de nodo es menor que cota entonces para cada acción aplicable al estado de nodo hacer si el nodo hijo correspondiente a acción no está ni en frontera ni en explorados entonces añadir el nodo hijo a frontera fin si fin para fin si fin repetir fin función función búsqueda-p-iterativa (problema) devuelve solución o fallo inicio función para cota desde 0 hasta ∞ hacer resultado ← búsqueda-p-acotada(problema, cota) si resultado no es fallo entonces devolver resultado fin si fin para fin función Heurística de un nodo: valor numérico que puede depender de • el nodo. • el objetivo. • la información recogida por la búsqueda hasta ahora. • conocimiento específico del problema. Algoritmo de búsqueda primero el mejor: • frontera: cola de prioridades ordenada por heurística. • nodo a explorar se descarta si hay nodo en frontera o explorados con el mismo estado y valor heurístico menor o igual. función búsqueda-primero-mejor (problema) devuelve solución o fallo inicio función inicializar la frontera como una cola de prioridades ordenada por heurística con el nodo inicial inicializar los nodos explorados al conjunto vacío repetir si la frontera está vacía entonces devolver fallo fin si seleccionar y sacar un nodo de la frontera si nodo contiene un estado final entonces devolver secuencia de acciones desde el nodo inicial hasta nodo fin si añadir nodo al conjunto de explorados para cada acción aplicable al estado de nodo hacer si el nodo hijo correspondiente a acción no está en frontera ni en explorados con un valor heurístico menor o igual entonces añadir el nodo hijo a frontera fin si fin para fin repetir fin función Solución óptima: solución con el menor coste posible. • necesario conocer el coste de obtener 𝑎(𝑠). • coste de una secuencia de acciones: suma de costes de las acciones. • coste constante: soluciones óptimas son las minimales. Búsqueda de una solución óptima: • Heurística de un nodo: coste de la secuencia de acciones usada para llegar desde el estado inicial hasta el estado de ese nodo. • Completa, si el coste de cada acción excede ε > 0. • Complejidad exponencial en tiempo y espacio. Búsqueda 𝐴∗ : heurística de un nodo 𝑛 es 𝑓 (𝑛) = 𝑔(𝑛) + ℎ(𝑛) donde • 𝑔(𝑛): coste de la secuencia de acciones usada para llegar desde el estado inicial hasta el estado de ese nodo. • ℎ(𝑛): estimación del coste de una secuencia óptima de acciones desde el estado de ese nodo hasta un estado final. 𝑓 (𝑛) estima el coste de una solución óptima que pasa por el nodo 𝑛. ℎ∗ (𝑛): coste exacto de solución óptima desde el estado de 𝑛 hasta un estado final. Heurística ℎ admisible: ℎ(𝑛) ≤ ℎ∗ (n), para todo nodo 𝑛 Una heurística admisible proporciona una cota inferior del coste de una solución óptima desde cada nodo. Teorema 1. La búsqueda 𝐴∗ es completa. 2. Si ℎ es una heurística admisible, entonces la solución devuelta por 𝐴∗ es óptima. Poda del árbol de búsqueda: ramas que la heurística evita explorar. Casos extremos: • ℎ(𝑛) = ℎ∗ (𝑛): máxima poda posible. • ℎ(𝑛) = 0: mínima poda posible (búsqueda óptima). ℎ2 más informada que ℎ1 : ambas son admisibles y ℎ2 (𝑛) ≥ ℎ1 (𝑛), para todo nodo 𝑛 Teorema Si ℎ2 es mas informada que ℎ1 , entonces todo nodo explorado por 𝐴∗ usando ℎ2 también es explorado por 𝐴∗ usando ℎ1 . Complejidad en tiempo y espacio de la búsqueda 𝐴∗ : • En el peor de los casos es exponencial. • En la práctica, depende en gran medida del problema particular y de la heurística empleada. Relajación de un problema: simplificación obtenida eliminando restricciones que prohíben o penalizan ciertas acciones. Técnica de construcción de heurísticas: coste exacto de una solución óptima en un problema relajado. Otras técnicas: • Combinación de heurísticas admisibles. • Uso de información estadística. Heurística para las Torres de Hanoi: Relajación del problema: los discos se pueden colocar en cualquier posición de la varilla, no únicamente en lo alto. El coste exacto en el problema relajado es el número de discos que no están en la varilla 3. Es una heurística admisible para el problema original. 1 2 3 1 2 3 Valor heurístico: 8 Valor heurístico: 4 Para saber más Stefan Edelkamp y Stefan Schroedl. Heuristic Search. Theory and Applications. Elsevier, 2011. isbn: 978-01-237251-2-7. Judea Pearl. Heuristics. Intelligent Search Strategies for Computer Problem Solving. Addison-Wesley, 1985. isbn: 0-201-05594-5. Stuart J. Russell y Peter Norvig. Artificial Intelligence: A Modern Approach. 3a ed. Pearson, 2009. isbn: 978-0-13-604259-4.