Académique Documents
Professionnel Documents
Culture Documents
Resolución
de problemas
© JVR - 1
Índice
Formalización
Estrategias de búsqueda de soluciones
Búsquedas sin información del dominio
Búsquedas heurísticas
Problemas de satisfacción de restricciones
Juegos
© JVR - 2
El problema de resolver problemas
La resolución de problemas es una búsqueda en un
espacio de estados, siendo:
Estado = <Q, R, C>
Q : estructura de datos que describen al estado
R : reglas u operaciones que describen las transiciones
en el espacio de estados
C : estrategia de control
© JVR - 3
Definición formal de un problema
Pasos:
Definir un espacio (conjunto) de estados
Especificar uno o más estados iniciales
Especificar uno o más estados finales (meta/objetivo)
Definir reglas sobre las acciones disponibles
(abstracción del mundo real a un modelo simbólico)
León Burgos
Zaragoza Barcelona
Madrid
Cáceres
Valencia
Toledo
Badajoz
Murcia
Sevilla
Cádiz
© JVR - 5
Tipos de problemas
Problemas de un estado inicial (single-state)
q0 = {Madrid}
Problemas de múltiples estados iniciales
(multiple-state)
q0 = {Madrid, Barcelona, Sevilla}
Problemas de contingencia (contingency)
q0 = {Madrid}
pueden fallar los vuelos
Problemas de exploración (online)
viajar sin mapa
© JVR - 6
Soporte computacional: Definiciones
Un grafo es una estructura de información compuesta de nodos
(piezas de información) + arcos (uniones entre ellos)
Hojas: nodos sin descendientes (los últimos)
Camino: sucesión de nodos siguiendo los arcos
Ciclo: camino cerrado (bucle)
Grafo dirigido: los arcos indican el sentido de la relación
Grafo acíclico: no tiene ciclos
Grafo conexo: entre dos nodos siempre hay un camino
Un árbol es un grafo dirigido acíclico conexo en el que:
Hay un único nodo raíz
Cada nodo tiene un único padre
Para cada nodo existe un único camino que lo conecta con el
nodo raíz
© JVR - 7
Soporte computacional: Árboles
Para modelar los problemas de búsqueda se usan
árboles, en los que:
nodos: estados intermedios
arco: aplicación de un operador (movimientos válidos) a un
estado
© JVR - 8
El problema de “euros y dólares”
Situación inicial: $ $ € €
Objetivo: € € $ $
© JVR - 9
El problema del “puzzle-8”
4 7 6 1 2 3
1 5 8 4
3 2 8 7 6 5
Estado: matriz
Reglas: r1: hueco a la derecha
r2: hueco a la izquierda
r3: hueco arriba
r4: hueco abajo
Card(Q) = 9! = 362.880 (sirve una búsqueda exhaustiva)
© JVR - 10
El problema del “puzzle-15”
4 7 6 1 2 3 4
1 5 5
3 2 8 6
8 7
© JVR - 11
Complejidad
© JVR - 12
Estrategias de búsqueda
© JVR - 13
Algoritmo general de búsqueda
© JVR - 14
Algoritmo general de búsqueda (2)
Q, V: lista de nodos
S: nodo inicial
1) Inicializar Q = {S}, V = {S}, costeS=0
2) Si Q está vacía, devolver SIN_SOLUCIÓN
3) Sacar un nodo N de Q
4) Si N es nodo final, devolver N como solución
5) Para todos los descendientes Ni de N:
- Enlazar Ni con N
- Si Ni no está en V:
costeNi=costeN+costeNNi
añadir Ni a Q
añadir Ni a V
- En otro caso:
Si costeNi>costeN+costeNNi
costeNi=costeN+costeNNi
añadir Ni a Q
En otro caso, no hay que hacer nada
6) Volver a 2
© JVR - 15
Estrategias de búsqueda
Las estrategias de búsqueda definen el orden para la
expansión de nodos (qué N se extrae, dónde se inserta Ni)
Cada estrategia hay que evaluarla según:
la completitud de la solución
¿encuentra la solución, si ésta existe?
la complejidad temporal
¿cuántos nodos se han generado?
la complejidad espacial
¿cuántos nodos como máximo se han guardado en memoria?
la optimalidad de la solución
¿encuentra la solución de menor coste?
Parámetros de evaluación:
Factor de ramificación (b), profundidad de la solución (d),
máxima profundidad (m)
© JVR - 16
Tipos de estrategias de búsqueda
Búsqueda en anchura
breadth-first search
Búsqueda en profundidad
depth-first search
Búsqueda de coste uniforme
uniform-cost search
Búsqueda en profundidad limitada
depth-limited search
Búsqueda en profundidad progresiva
iterative deepening search
© JVR - 18
El mundo de los bloques
© JVR - 20
Búsqueda en anchura (evaluación)
Solución completa
Complejidad temporal O(bd): exponencial
Complejidad espacial O(bd): exponencial
(guarda todos los nodos en memoria)
No es la estrategia óptima (en general)
© JVR - 21
Búsqueda en profundidad (algoritmo)
© JVR - 22
Búsqueda en profundidad (evaluación)
Solución no completa
En espacios con ciclos puede haber bucles infinitos
Es necesaria una comprobación de estados repetidos
Complejidad temporal O(bm):
enorme si profundidad máxima >> profundidad de la
solución
Sin embargo, el algoritmo es rápido si el espacio de
soluciones es denso
Complejidad espacial O(bm): lineal
No es la estrategia óptima (en general)
© JVR - 23
Búsqueda de coste uniforme (algoritmo)
© JVR - 24
Búsqueda de coste uniforme (evaluación)
Solución completa
Complejidad temporal:
nº de nodos con coste <= coste de la solución óptima
Complejidad espacial:
nº de nodos con coste <= coste de la solución óptima
Estrategia óptima
© JVR - 25
Búsqueda en profundidad limitada
© JVR - 26
Búsqueda en profundidad progresiva
(algoritmo)
© JVR - 27
Búsqueda en profundidad progresiva
(evaluación)
Solución completa
Complejidad temporal O(bd): exponencial
(similar a otras estrategias)
Complejidad espacial O(bd): lineal
Estrategia óptima si el coste = 1
© JVR - 28
© JVR - 29
Las Torres de Hanoi
© JVR - 30
Búsquedas heurísticas
© JVR - 32
Primero el mejor
© JVR - 33
Greedy search
La función de evaluación estima el coste del
nodo-i hasta la meta, con lo que se expande el
nodo que parece estar más cerca de la meta
© JVR - 34
Búsqueda A*
La idea es evitar expandir caminos que ya son
muy costosos
Función de evaluación: f(n) = g(n) + h(n)
g(n): coste sufrido hasta alcanzar n
h(n): coste estimado desde n hasta la meta
f(n): coste estimado total hasta la meta pasando por n
Se demuestra que la búsqueda A* alcanza la
solución óptima, siempre que se utilice un
heurístico “admisible” (que no sobreestime el
coste real):
h(n) <= h*(n) (el coste real)
© JVR - 35
Ejemplos de heurísticos
4 7 6 1 2 3 4
1 5 5
3 2 8 6
8 7
© JVR - 36
Hill-climbing
Máximo local
© JVR - 37
Simulated annealing
© JVR - 39
Ejemplo clásico: 4 reinas
Poner cuatro reinas (damas) sin que
ninguna pueda atacar a las demás Q
( sin que haya dos en la misma columna Q
y no estén en diagonal) Q
Q
Variables: Q1, Q2, Q3, Q4
Dominio: {1,2,3,4}
Restricciones:
Qi != Qj
|Qi - Qj| != |i - j|
Significado: (Q1, Q2) pueden valer (1,3)
(1,4) (2,4) (3,1) (4,1) (4,2)
© JVR - 40
Ejemplo: Sudoku
http://sudoku.3ontech.com
© JVR - 41
Otros ejemplos menos lúdicos
© JVR - 42
Búsqueda en CSP (enfoque inicial)
El enfoque inicial es abordar una búsqueda normal
Estado inicial: variables sin asignar
Operadores: asignar valores a variables no asignadas
Objetivo: todas las variables asignadas, todas las
restricciones cumplidas
Estrategia: (por ejemplo) búsqueda en profundidad
© JVR - 43
Búsqueda con retroceso
(backtracking)
Igual que el anterior, empleando búsqueda en
profundidad pero:
fijando el orden de asignación de variables
comprobando violación de restricciones permitiendo
sólo sucesores válidos
Este es el algoritmo básico sin información del
dominio para los CSPs
Es capaz de resolver hasta 15-reinas
© JVR - 44
Comprobación hacia delante
(forward checking)
Idea:
recordar los valores válidos que quedan para las
variables no asignadas
detener la búsqueda cuando no quedan valores válidos
para una variable
La comprobación hacia delante evita a priori
asignaciones erróneas
Es capaz de resolver hasta 30-reinas
http://www.iol.ie/~jmchugh/csc302/more/queens/
© JVR - 45
Búsqueda heurística en CSPs
© JVR - 46
Juegos
Problemas de búsqueda donde interviene al menos un
adversario
Tus movimientos por sí solos no aseguran la victoria: es necesaria
una estrategia de oposición
En general, el tiempo disponible para cada movimiento impone
soluciones aproximadas (no sirve la fuerza bruta)
Dos tipos de juegos:
Deterministas: no interviene el azar (4-en-raya, ajedrez, damas)
No deterministas: el azar está presente (backgammon, parchís,
monopoly…)
¿Por qué gustan tanto en IA?
Divertidos
Difíciles
Fáciles de formalizar y con un número pequeño de acciones
(Los juegos son para la IA como la F1 es para la ingeniería del automóvil)
© JVR - 47
Estrategia Minimax
Consiste en elegir el mejor movimiento para uno mismo
(MAX) suponiendo que el adversario (MIN) escogerá el
mejor para sí mismo (que también juega a ganar)
Pasos:
Generar el árbol de juego, alternando movimientos
(ply) de MAX y MIN y asignándoles los valores
apropiados (MAX>0, MIN<0)
Calcular la función de utilidad de cada nodo final,
recorriendo recursivamente los nodos hasta el
estado inicial
Elegir como jugada a realizar aquel primer
movimiento que conduce al nodo final con mayor
función de utilidad
© JVR - 48
Las 3 en raya
© JVR - 49
Posible árbol de búsqueda (2-ply)
f(n)=
(nº de filas, columnas
o diagonales abiertas
para MAX) –
(nº de filas, columnas
o diagonales abiertas
para MIN)
© JVR - 50
Problema de minimax
El número de estados del juego es exponencial al
número de movimientos
(esto es, en la mayoría de juegos, generar el árbol completo es
inviable en recursos de memoria)
Solución: no examinar todos los estados
Generar un árbol parcial (anticipar sólo los N movimientos
siguientes)
Usar heurísticos:
Memoria de partidas anteriores
Movimientos preferidos
Poda alfa-beta (alpha-beta pruning)
Alfa = valor de la mejor jugada hasta el momento para MAX
Beta = valor de la mejor jugada hasta el momento para MIN
No expandir (podar) los caminos que no proporcionen mejoras
sobre el mejor camino hasta el momento
© JVR - 51
Las 4 en Raya
http://www.it.uc3m.es/jvillena/irc/demos/cuatroenraya/cuatroenraya.html
© JVR - 52
Las Damas
http://www.it.uc3m.es/jvillena/irc/demos/damas/damas.html
© JVR - 53
Juegos con varios jugadores
La función de utilidad se convierte en un vector de
valores
© JVR - 54
Juegos con azar
© JVR - 56
Paradigma: El dilema del prisionero
La policía arresta a dos sospechosos. No hay pruebas suficientes para
condenarles, y tras haberles separado, les visita a cada uno y les ofrece el
mismo trato:
© JVR - 57