Tema 2. B squeda en resoluci n de problemas

Anuncio
TEMA 2.
Búsqueda en Espacios de Estados
Francisco José Ribadas Pena
INTELIGENCIA ARTIFICIAL
5 Informática
[email protected]
26 de septiembre de 2012
– FJRP ccia [Inteligencia Artificial] –
2.1 Concepto de Espacio de estados.
Espacio de Estados: Formalimo para representar problemas.
ideas clave:
1. Abstraer problemas reduciéndolos a un conjunto de estados y operadores.
2. Resolver problema revisando posibles alternativas (¿todas?).
analogı́a con forma de actuar de los humanos
Estado:
• Representación completa de la situación del mundo/problema en
un momento dado
• Contiene toda la información relevante (y nada más)
Operador:
• Transforman un estado en otro
• Se suponen deterministas
◦ se sabe de antemano cómo será el estado del mundo/problema
despues de aplicarlos
• Se suponen discretos
◦ no es relvante lo que “pasa” mientras se ejecutan
– FJRP ccia [Inteligencia Artificial] –
1
2.1.1 Caracterización de un Problema
PROBLEMA = Terna de 3 componentes (I, O, M )
1. Estado/s inicial (I):
Descripción de la situación de partida
2. Conjunto de operadores pertinentes (O):
Descripción de los medios de los que disponemos para lograr el
fin deseado
Acciones que se pueden emprender, dado un estado, para alcanzar
otro distino.
Tienen 2 componentes:
• precondiciones: condición que debe cumplir un estado para que pueda
aplicarse el operador sobre él.
• postcondiciones: descripción de las caracterı́sticas del nuevo estado al que
se transita.
Pueden ser interpretados como ”reglas”: (patrón → acción)
3. Conjunto de estados meta (M ):
Estados del problema que satisfacen los requisitos para ser considerados como soluciones.
Pueden expresarse en forma de lista de estados ó como una función booleana (prueba de meta) que basándose en las propiedades
de un estado indica si es meta o no.
(I) y (O) determinan el espacio de estados del problema.
• Conjunto de todos los posibles estados admisibles del problema.
BÚSQUEDA DE SOLUCIONES
solución: Secuencia ordenada de operadores (S ∈ O ∗) que posibilita
el transito desde estados iniciales (I ) a finales (O ).
Conseguir un ”plan de acción” que permita pasar de (I) a (M )
Objetivo: Encontrar la ”mejor” solución (o una aceptable)
Nota: en ocasiones basta con conocer las caracterı́sticas de un estado final (no el
camino para alcanzarlo)
• búsqueda sirve para saber cómo será ese estado meta
– FJRP ccia [Inteligencia Artificial] –
2
ESTRATEGIAS DE BÚSQUEDA
También estrategias de control o ”mecanismo de inferencia”
• ¿Cómo recorrer el espacio de estados?
Secuencia de pasos a seguir para encontrar el conjunto de operadores
deseado.
• Estrategia es independiente del conocimiento.
◦ no dependende de la información en estados u operadores
• Estrategia debe de ser:
◦ sistemática y fácilmente reproducible
◦ producir movimientos válidos en el espacio de estados
no debe salir del espacio de estados
◦ producir nuevos estados (para poder avanzar)
• Necesidad de estructuras adicionales.
◦ indicar cuándo es aplicable un operador
◦ indicar cuándo se ha utilizado un operador
◦ indicar cuándo un operador produce un estado final
◦ indicar cuándo un operador produce un estado no nuevo
◦ indicar si la solución es aceptable
EJEMPLO: Representación de problemas
Problema de las 2 jarras
– FJRP ccia [Inteligencia Artificial] –
3
2.1.2 Caracterı́sticas Generales Procesos de Búsqueda
1. Dirección del proceso de búsqueda: (2 opciones)
a) I −→ M : de estados iniciales a finales
datos −→ objetivos
proceso dirigido por los datos (progresivo)
razonamiento hacia adelante
• emparejar descripción del estado con las precondiciones
b) I ←− M : de estados finales a iniciales
hipótesis de trabajo −→ datos
proceso dirigido por los objetivos (evocativo)
razonamiento hacia atrás
• emparejar descripción del estado con las postcondiciones
nota: necesario definir operadores inversos (si es posible)
También es posible realizar búsquedas bidireccionales.
Criterios de Selección:
Tamaño relativo de conjuntos I y M .
• avazar de menos a más estados
Factor de ramificación
• def.: Promedio de estados que podemos alcanzar directamente
desde un estado previo.
• avanzar en la dirección con menor factor ramificación (menos
alternativas)
Justificación del razonamiento/solución
• Si se exige justificación del resultado → usar misma dirección
que usarı́a experto humano (naturalidad)
• Criterio más importante en sistemas prácticos.
– FJRP ccia [Inteligencia Artificial] –
4
2. Topologı́a del Proceso de Búsqueda
Dependiendo de la estructura que definan los operadores el
espacio de estados puede ser:
• Un árbol:
◦ más sencillo de manejar
◦ mayor consumo memoria (estados duplicados, etc)
• Un grafo (con o sin ciclos):
◦ ahorro de memoria
◦ generación más compleja (comprobar existencia de estados)
Se irán construyendo a medida que el proceso de búsqueda avanza
nota: siempre se podrá recorrer un grafo como si fuera un árbol, a costa de
repetir estados y procesamiento
Ejemplos: Problema 2 jarras
Importante: nodo [estructura de datos] 6= estado [representación del problema]
3. Representación del Problema
Tres aspectos a decidir (de cara a la implementación)
• Representación de los hechos, objetos y entidades que relevantes en el dominio considerado
→ Representación de Estados
• Representación de las relaciones entre hechos, objetos y entidades relevantes
→ Representación de Operadores
• Representación de las secuencias de estados surgidas durante
la búsqueda
→ Representación de Estrategias (info. de control que es usada)


Módulo
Represent.
Conocimiento









representación estados
representación operadores
– FJRP ccia [Inteligencia Artificial] –



+


Modulo
de
Control
del
Sistema









representación estrategias



5
4. Criterios de Selección de Operadores Relevantes
a) Proceso de emparejamiento: decidir que operadores son aplicables sobre un estado dado.
Determinar operadores cuyas precondiciones sean compatibles
con caracterı́sticas del estado considerado [o postcondiciones en
estrategias I ←− M ]
Problema de correspondencia de patrones complejo
• pueden incluirse variables
Principal causa de la ”lentitud” de los sistemas de I.A.
b) Resolución de conflictos de operadores.
def.: Conjunto Conflicto: Conjunto de operadores aplicables
resultantes del proceso de emparejamiento.
Resolución de conflictos: elección del operador/es a aplicar
→ depende de/determina la estrategia de búsqueda
Posibilidades:
• aplicar todos los operadores disponibles (≈ anchura)
• aplicar sólo los operadores aún no utilizados
• aplicar sólo operadores que emparejen con estados incorporados recientemente
• aplicar el operador más especı́fico (retrasar uso de los +
generales)
◦ más especı́fico ≈ con más condiciones
◦ reduce el factor e ramificación
• aplicar un operador aleatorio
– FJRP ccia [Inteligencia Artificial] –
6
5. Optimización de Búsqueda con Funciones Heurı́sticas
Uso de funciones (numéricas) que indican lo buena o mala que
la elección de un nuevo operador.
Finalidad: ”dirigir” el proceso de búsqueda
Se basan en conocimiento heurı́stico, especı́fico del problema,
derivado de la experiencia, difı́cil de formalizar y explicar.
Estrategias ciegas:
• No usan info heurı́stica (deciden sin usar conocimiento del problema)
• Aplicables en cualquier dominio
• En general, menos eficientes (explosión combinatoria)
• Ejemplos:
◦ generar y comprobar
◦ búsqueda en anchura
◦ búsqueda en profundidad (prof. acotada y prof. iterativa)
Estrategias informadas (o heurı́sticas):
• Usan información heurı́stica especı́fica del dominio.
• Diseñados para problemas concretos
• Limitan explosión combinatoria
• No aseguran soluciones óptimas (si ”aceptables”)
• Elemplos:
◦ ascenso a colinas
◦ mejor nodo (primero el mejor)
◦ A∗ y variantes
– FJRP ccia [Inteligencia Artificial] –
7
6. Criterios de Evaluación
completitud : ¿Se garantiza o no que se va a encontrar una
solución? (el algoritmo acaba)
optimalidad : En caso de que existan varias soluciones, ¿se
encuentra la mejor (óptima) o no? (menor no operandos / menor coste)
complejidad :
• espacial : memoria necesaria para efectuar la búsqueda
• temporal : tiempo necesario para efectuar la búsqueda
• Estimaciones en el peor de los casos
• Especificadas en función de algún parametro del problema,
notación O().
– FJRP ccia [Inteligencia Artificial] –
8
2.2 Búsqueda No Informada
2.2.1 Generar y Comprobar
1. Generar caminos al azar, partiendo del estado inicial hasta agotarlos
2. Comprobar si son solución
si no son solución, repetir
Poco útil en la práctica
Aplicable si
• espacio de estados en muy pequeño
• hay muchos estados objetivo
→ es posible encontrar alguno al azar
Propiedades:
•
•
•
•
NO es COMPLETO (puede entrar en bucles [espacio de estados es un grafo])
NO es OPTIMO (da la 1a solución que encuentra)
Complejidad Temporal: exponencial
Complejidad Espacial: O(1) (sólo almacena el nodo/estado actual)
2.2.2 Búsqueda en Anchura
(a) FUNCIONAMIENTO
Recorrer árbol/grafo de búsqueda en anchura
• expandir estado raı́z
• expandir todos sus sucesores
• expandir todos los sucesores de los sucesores,
• etc, .....
Realiza un ordenamiento de los estados a estudiar en base a su
profundidad
• todos los nodos de profundidad d se estudirán antes que cualquier
nodo a profundidad d + 1
– FJRP ccia [Inteligencia Artificial] –
9
(b) ALGORITMO
abiertos: Lista ordenada de nodos generados aún no expandidos (aún
no se ha comprobado si son solución, ni se han generado sus sucesores)
→ almacena nodos ”frontera”, en espera de ser expandidos
añadir estado inicial a abiertos
resuelto := false
while (abiertos no vacio and no resuelto) do
actual := primer nodo de abiertos
if actual es estado final then
resuelto := true
else
/* expandir actual */
for all (operador aplicable a actual) do
generar nuevo estado aplicando operador
añadir nuevo estado al final de abiertos
end for
end if
end while
abiertos: Funciona como una cola (fifo)
→ mayor profundidad al final de la lista
– FJRP ccia [Inteligencia Artificial] –
10
MEJORA: En espacios de estados con estructura de grafo, evitar
examinar un estado en múltiples ocasiones
Lista cerrados: Almacena estados ya examinados y expandidos
Expandir sólo estados que no parezcan en abiertos (ya generados)
ni en cerrados (ya examinados)

No generados: no aparecen en abiertos ni en cerrados



Generados no Examinados: en abiertos
Tipos de estados
Examinados no Expandidos: el estado actual



Expandidos: en cerrados
añadir estado inicial a abiertos
inicializar cerrados a vacio
resuelto := false
while (abiertos no vacio and no resuelto) do
actual := primer nodo de abiertos
if actual es estado final then
resuelto := true
else
añadir actual a cerrados
/* expandir actual */
for all (operador aplicable a actual) do
generar nuevo estado aplicando operador
if (nuevo estado no en abiertos ni en cerrados) then
añadir nuevo estado al final de abiertos
end if
end for
end if
end while
Incrementa el coste computacional
gestión de las listas
comprobación pertenencia (inspeccionar abiertos y cerrados)
• CERRADOS puede implementarse como una tabla Hash (acceso directo)
Inconveniente: coste de espacio (CERRADOS crece exponencialmente)
– FJRP ccia [Inteligencia Artificial] –
11
(c) CARACTERÍSTICAS BÚSQUEDA EN ANCHURA
Es completa: Garantiza que se encuentra la solución (si ésta existe)
• tanto en árboles como en grafos (incluso con ciclos)
Es óptima: Siempre encuentra la solución más corta
• Se asegura que la solución encontrada es la de menor profundidad
◦ no se ”salta” nodos → agota capa k antes de ver nodos de la capa k + 1
• nota: Si los operadores tienen asociado un coste, la solución
menos profunda puede no ser la menos costosa.
Complejidad
• Dos factores
◦ b, factor de ramificación: no promedio de estados generados
desde un estado dado
◦ p, profundidad estado objetivo: no mı́nimo de operadores necesarios para alcanzar la solución encontrada
• Complejidad espacial: O(bp) (≈ tamaño lista ABIERTOS)
• Complejidad temporal: O(bp) (≈ no iteraciones bucle / comprobaciones
si es estado final)
• En el peor de los casos examina todos los nodos posible
• Complejidad exponencial: se saca 1 de abiertos y se añaden b
de media
Muy ineficaz (explosión combinatoria), sobre todo en requisitos de
espacio.
– FJRP ccia [Inteligencia Artificial] –
12
2.2.3 Búsqueda en Profundidad
(a) FUNCIONAMIENTO
Expandir un camino hasta llegar al final (no hay sucecores)
Si no es solución y no tiene expansión posible, volver a un nodo no
expandido del nivel anterior
• da preferencia a los nodos/esatdos más profundos
Menor exigencia de memoria
• basta con almacenar los nodos de la ruta que se está expandiendo
(b) ALGORITMO
añadir estado inicial a abiertos
inicializar cerrados a vacio
resuelto := false
while (abiertos no vacio and no resuelto) do
actual := primer nodo de abiertos
if actual es estado final then
resuelto := true
else
añadir actual a cerrados
/* expandir actual */
for all (operador aplicable a actual) do
generar nuevo estado aplicando operador
if (nuevo estado no en abiertos ni en cerrados) then
añadir nuevo estado al principio de abiertos
end if
end for
end if
end while
abiertos: Funciona como una pila (lifo)
→ nodos con mayor profundidad al principio
nota: este pseudocódigo almacena, además del camino explorado, el inicio de los
caminos sin explorar
– FJRP ccia [Inteligencia Artificial] –
13
(c) CARACTERÍSTICAS BÚSQUEDA EN PROFUNDIDAD
No es completa: Puede no acabar nunca si encuentra una rama sin
fin en el espacio de estados
• En ciertos casos nunca se volverı́a atrás
◦ si hay ciclos ⇒ bucle infinito [si no se usa CERRADOS]
◦ si espacio de estados es infinito (ramas con no sucesores infinito)
• Muy dependiente del orden de aplicación de los operadores
No es óptima: Encuentra una solución (la primera que aparezca)
que no tiene por qué ser la mejor (la más cercana)
Complejidad
• Complejidad espacial: O(b × m) [sin usar CERRADOS]
◦ b, factor de ramificación
◦ m, profundidad máxima de cualquier solución
• Complejidad temporal: O(bm) (en el peor caso)
◦ si no hay solución (o es el último estado) examinará todos los
estados (como en anchura)
• En general, suele ser más rápida que búsqueda en anchura
◦ es ”cuestión de suerte”
◦ puede funcionar bien si hay muchos estados finales
• ventajas:
◦ Menores requisitos de memoria
◦ Mayor rapidez (en promedio)
• inconvenientes:
◦ Posibilidad de que se estanque y no termine
◦ No asegura solución óptima
– FJRP ccia [Inteligencia Artificial] –
14
(d) VARIANTES
Profundidad Acotada
• Fijar un lı́mite máximo de profundidad (cota c)
◦ cuando un camino alcanza la profundidad c sin ser solución,
desecharlo
• Es completo (acaba)
◦ Asegura encontrar solución si c es mayor que la profundidad
de la solución
• No asegura solución óptima
◦ no asegura encontrar la solución a menor profundidad
• Complejidad: espacial (O(b × c)), temporal (O(bc))
• problema: elección cota c
ahorra tiempo y espacio
◦ Pequeña:
puede impedir encontrar solución
desperdicio tiempo y espacio
◦ Grande:
aumenta posibilidades de encontrar solución
◦ En general, no hay suficiente info. para elegir cota adecuada
• Ejemplo
– FJRP ccia [Inteligencia Artificial] –
15
Profundidad Iterativa
• Secuencia de búsquedas por profundidad acotada, incrementando
el valor de la cota hasta encontrar solución
• ventajas:
◦ Evita problema elección de la cota
◦ Es completa y óptima
Siempre da una solución (si la hay)
Encuentra la mejor (a menor profundidad) [si los incrementos
son de 1 en 1]
→ siempre que la cota c se incremente de 1 en 1
→ agota todos los nodos bajo la cota c antes de incrementarla
◦ Funcionamiento intermedio entre anchura y profundidad
como anchura: es completo y óptimo
como profundidad: requisitos de memoria contenidos
◦ Uso de memoria reducido (como búsqueda profundidad)
• inconvenientes:
◦ Repetición de cálculos
No excesivamente importante (afecta principalmente a estados en niveles superiores)
Mayoria de nodos situados en niveles inferiores
– FJRP ccia [Inteligencia Artificial] –
16
2.3 Búsqueda Heurı́stica
2.3.1 Generalidades
Búsqueda ciega: ineficaz en la práctica (explosión combinatoria)
Búsqueda heurı́stica:
objetivo: guiar el proceso de búsqueda
• ”Podar” el espacio de estados
Usar información sobre la bondad o cercanı́a de un estado dado
respecto a uno de los estados objetivo óptimos
→ explorar primero caminos más prometedores
caracterı́sticas :
• No garantiza que se vaya a encontrar la solución
• Si la encuentra, no asegura que sea óptima (mı́nimo coste)
• En ocasiones, encuentra solución buena en tiempo aceptable
◦ pierden completitud y/o optimalidad
◦ aumentan eficiencia
FUNCIONES DE EVALUACIÓN HEURÍSTICAS
Aglutinan el conocimiento del dominio sobre el que se apoyará la
decisión
Asocian a cada estado, e, un número, h(e), que indica lo prometedor, o no, que es ese nodo e de cara a alcanzar un estado objetivo
óptimo.
Dos interpretaciones:
• Estiman la ”calidad” del estado e
⇒ buscar primero por nodos con mayor valor heurı́stico
• Estiman la ”proximidad” a un estado final
⇒ buscar primero por nodos con menor valor heurı́stico
– FJRP ccia [Inteligencia Artificial] –
17
Ejemplos:
• 8-puzzle: no casillas mal colocadas (2o tipo)
• cubos: |cantidad en 8 l. - 4 | (2o tipo)
• ajedrez: no piezas de ventaja (1er tipo)
Clasificación:
• Heurı́sticas generales: adecuadas para múltiples dominios
→ vecino más próximo (”medir distancias”)
• Heurı́sticas de propósito especial: usan conocimiento exclusivo de
un dominio particular
heurı́sticas bien fundadas
1. Si estiman la ”calidad”:
h(e) está bien fundada si los estados finales tienen el
valor máximo posible. (estado inicial suele tener valor 0)
2. Si estiman la ”distancia”:
h(e) está bien fundada si los estados finales tienen el valor 0
– FJRP ccia [Inteligencia Artificial] –
18
2.3.2 Métodos de escalada o ascenso a colinas
(a) FUNCIONAMIENTO
Familia de métodos de mejora iterativa (también hill climbing )
idea: Elegir, en cada paso, uno de los descendientes del estado actual
que mejore el valor heurı́stico de su padre
mejor = más alto ⇒ ascenso a colinas
mejor = más bajo ⇒ descenso de gradiente
Elección local: sólo toma en consideración los sucesores del estado
actual
Dos variantes:
1. Escalada simple:
Generar hijos 1 a 1, calculando su valor heurı́stico
El primer hijo que sea mejor que estado actual pasa a ser
nuevo estado estado actual
• estudia los sucesores secuencialmente
2. Escalada por máxima pendiente:
Generar todos los hijos y calcular su valor heurı́stico
Tomar al mejor hijo
• Si es mejor o igual que estado actual ⇒ pasa a ser nuevo
estado actual
• Si no, detener el algoritmo
estudia los sucesores secuencialmente
Ejemplos:
Espacio de estados
– FJRP ccia [Inteligencia Artificial] –
Escalada Simple
Máxima Pendiente
19
ventajas
• Muy poco consumo de espacio
• Complejidad espacial: O(1) (basta guardar 1 estado)
inconvenientes
• Complejidad temporal: exponencial en peor caso (revisa todos)
• No son óptimos ni completos
◦ pueden no encontrar solución aunque exista (ver problemas)
◦ no garantizan el camino más corto
problemas: Puntos en los que el algoritmo se estanca
Máximos locales: todos los hijos de un estado son peores que él y
no es un estado objetivo
• def.: Un máximo local es un estado mejor que cualquier otro
estado vecino, pero peor que otros más lejanos
• El algoritmo para sin dar solución
Mesetas: todos los hijos tienen mismo valor heurı́stico que padre
• def.: Una meseta es una región del espacio de estados donde
todos los estados tienen el mismo valor heurı́stico
• El algoritmo para sin dar solución
• Si sigue, la heurı́stica no informa ⇒ búsqueda ciega
Crestas: mezcla de los anteriores, se llega a un conjunto máximos
locales contiguos
• def.: Región del espacio de estados que tiene algunos estados
con mejor valor heurı́stico que los colindantes, pero a los que
no se puede llegar por transiciones simples (usando un único
operador)
soluciones :
Reiniciar toda o parte de la búsqueda (vuelta atrás, backtracking )
Dar un paso más → generar sucesores de sucesores y ”ver que pasa”
Máx. locales: Volver a un nodo anterior y probar dirección distinta
Mesetas: Hacer un ”salto” grande, para ”salir” de la meseta
– FJRP ccia [Inteligencia Artificial] –
20
2.3.3 Método del mejor nodo (primero el mejor)
(a) FUNCIONAMIENTO
idea: Considerar todos los estados frontera, no sólo los sucesores del
estado actual
Mantener lista abiertos (nodos no expandidos) ordenada por los valores de la
heurı́stica de los estado
Intenta combinar anchura y profundidad, guiado por la heurı́stica
• Seguir un camino, pasando a otro cuando deje de ser prometedor
Diferencia con escalada: los descendientes del estado actual compiten con
todos los demás nodos no expandidos
(b) ALGORITMO
añadir estado inicial a abiertos
inicializar cerrados a vacio
resuelto := false
while (abiertos no vacio and no resuelto) do
actual := primer nodo de abiertos /* mejor h(e) */
if actual es estado final then
resuelto := true
else
añadir actual a cerrados
/* expandir actual */
for all (operador aplicable a actual) do
generar nuevo estado aplicando operador
calcular su heurı́stica h(nuevo estado)
if (nuevo estado no en abiertos o cerrados)
or (está con peor heurı́tica) then
añadir nuevo estado en abiertos
ordenar abiertos por valor heurı́stico [h(e)]
end if
end for
end if
end while
– FJRP ccia [Inteligencia Artificial] –
21
Ejemplo:
(c) CARACTERÍSTICAS BÚSQUEDA MEJOR NODO
Complejidad
• Temporal: O(bm)
• Espacial: O(bm)
• m= profundidad de la solución más lejana
• En el peor de los casos (h(e) = constante, no informa) hay
que recorrer todos los estados
No es completo: mismas debilidades que profundidad (vulnerable a
bucles y ramas infinitas)
No es óptimo: puede no dar la solución más cercana (ejemplo
anterior)
• En esencia, sigue siendo un procedimento de búsqueda en profundidad
• Da la primera solución que encuentra
◦ Normalmente suele dar buenas soluciones (aceptables)
– FJRP ccia [Inteligencia Artificial] –
22
2.3.4 Algoritmo A∗
(a) FUNCIONAMIENTO
Familia de algoritmos (Hart, Nilsson, Raphael (1968))
objetivo: Mejorar método del mejor nodo para asegurar completitud
y optimalidad (≡ coste mı́nimo).
Incorpora la longitud del camino desde la raı́z hasta el estado actual en
la función de evaluación h.
considerar no sólo lo bueno que es un estado
tener en cuenta cómo es el camino usado para alcanzarlo
• contempla el coste de los operadores empleados
Función de evaluación A∗
f (e) = g(e) + h(e)
g(e): coste real del mejor camino desde estado inicial al estado e
h(e): estimación (heurı́stica) del coste desde e hasta un estado final
óptimo
f (e): coste estimado de la mejor solución que pasa por el estado e

h∗(e)
 - costes reales
g ∗(e) = g(e)
- conocidos cuando termina

∗
∗
∗
f (e) = g (e) + h (e)
el algoritmo de búsqueda
– FJRP ccia [Inteligencia Artificial] –
23
(b) ALGORITMO

 para manejar grafos
Versión Ampliada
con traza de los caminos (enlace al padre)

abiertos ordenada por el valor de f (e) [≡ g(e) + h(e)]
añadir estado inicial a abiertos
inicializar cerrados a vacio
resuelto := false
while (abiertos no vacio and no resuelto) do
actual := primer nodo de abiertos /*mejor valor f(e)*/
if actual.estado es estado final then
resuelto := true
else
añadir actual a cerrados
for all (operador aplicable a actual) do
generar sucesor aplicando operador (1)
if (sucesor en abiertos con peor g(e)) then
cambiar padre del nodo en abiertos
establecer sus nuevas g(e) y f (e)
end if
if (sucesor en cerrados con peor g(e)) then
cambiar padre del nodo en cerrados
establecer sus nuevas g(e) y f (e)
propagar nueva g(e) a sus
descendientes en abiertos y cerrados
end if
if (sucesor no en abiertos ni en cerrados) then
insertar sucesor en abiertos
end if
end for
reordenar abiertos si es necesario
end if
end while
– FJRP ccia [Inteligencia Artificial] –
24
(1) Generar sucesor(): [crea un nodo sucesor]
sucesor.estado := aplicar operador sobre actual.estado
sucesor.padre := actual
sucesor.g := actual.g + coste(operador[actual →
sucesor])
sucesor.f := sucesor.g + h(sucesor.estado)
nota:
h(e)
Si
g(e)
h(e)
Si
g(e)
= 0
≈ Búsqueda en anchura
= profundidad(e)
= 0
≈ Búsqueda ”aleatoria”
= 0
[depende del orden de inserción]
h(e) = 0
Si
g(e) = prof
fundidad
maxima
– FJRP ccia [Inteligencia Artificial] –
− profundidad(e)
≈ Búsqueda en pro-
25
CARACTERÍSTICAS BÚSQUEDA A*
Es óptimo y completo si:
todo nodo tiene un no finito de sucesores
coste de cada arco/operador > 0
la función h(e) es una heurı́stica admisible
Heurı́stica Admisible:
Diremos que h(e) es una heurı́stica admisible si nunca sobreestima el coste real desde e hasta un estado meta óptimo.
Es decir, h(e) ≤ h∗(e) ∀e [estimación ≤ coste real]
→ para algoritmos que maximizan f (e) : h(e) ≥ h∗ (e) ∀e
conclusión: Si h(e) es admisible ⇒ f (e) tampoco sobreestima el
coste real de la mejor solución que pase por el estado e.
∗
f (e) ≤ f (e)
[es decir: g(e) + h(e) ≤ g(e) + h∗ (e)]
Complejidad (en el peor caso)
espacial:
temporal:
O(bp)
O(bp)
b = factor ramificación, p = profundidad solución
En el peor de los casos (h(e) = 0) sigue siendo necesario recorrer
todo el árbol [h(e) no informa]
En caso promedio:
• El consumo de memoria sigue siendo alto
◦ almacenamiento de todos los estados visitados (cerrados) y
los pendientes de visitar (abiertos)
• Tiempo promedio aceptable (mejora búsqueda en profundidad)
– FJRP ccia [Inteligencia Artificial] –
26
(d) VARIANTES
RTA*: Real Time A∗
• Aplicación en tareas de tiempo real
◦ no pueden esperar a encontrar solución óptima
• Obliga a tomar una decisión cada periodo de tiempo k × t
• Periodo de tiempo determina profundidad alcanzada en búsqueda
◦ busca hasta donde le da tiempo
◦ indica la operación sobre el estado actual que inicia el camino
que lleva al mejor estado encontrado
A*PI: A∗ con profundización iterativa (IDA*)
• Búsqueda por profundización iterativa controlada por la función
de evaluación A∗
◦ f (e) = g(e) + h(e)
◦ nota: en principio, no comprueba estados repetidos
• objetivo: reducir necesidades de memoria
• Lı́mite de coste k, no de profundidad
• Expandir sólo estados e con coste dentro de la cota (f (e) ≤ k)
• El resultado de cada iteración se usa para establecer cota de la
siguiente
◦ la ”amplitud” de la búsqueda se amplı́a en cada iteración
SMA*: A∗ acotado por memoria
• Trabajo con memoria limitada
• idea: limitar la cantidad de memoria disponible
◦ Usa toda la memoria de la que se dispone
◦ Mientras hay memoria funcionamiento normal, evitando estados repetidos
◦ Si al generar un sucesor falta memoria, libera el espacio de los
estados menos prometedores
◦ Sigue manteniendo traza de la ”bondad” de esos estados
desechados
• Devuelve la mejor solución que se puede encontrar con la cantidad
e memoria disponible
– FJRP ccia [Inteligencia Artificial] –
27
2.3.4 Heurı́sticas
(1) CONSTRUCCIÓN DE HEURÍSTICAS
Dependen del problema
Influyen en el rendimiento
Técnicas generales
1. Relajación de operadores
• Reducir algunas restricciones sobre los operadores del problema
original
• Operadores simplificados facilitan cálculo del coste real en el
problema ”relajado”
• Usar coste real de la solución al problema ”relajado” como
heurı́stica del problema original
• Suele generar heurı́sticas admisibles
• Ejemplo: 8-puzzle
◦ h1: (no de placas (incluido hueco) en lugar correcto -1)
Problema relajado: se permite intercambiar cualquier par de casilla
h1 calcula el no exacto de pasos necesarios en el problema relajado
◦ h2: ”distancia manhatan” (suma distancia vertical y horizontal entre posición actual de cada placa y la deseada)
Problema relajado: cualquier casilla puede moverse a una posición
adyacente independientemente de las otras casillas
(las casillas se mueven a su posición una a una, pasando ”por encima” de las otras)
h2 calcula el no exacto de pasos necesarios en el problema relajado
– FJRP ccia [Inteligencia Artificial] –
28
2. Ponderación de rasgos
• Tomar un conjunto de caracterı́sticas del estado que se puedan
representar numéricamente
• Combinarlas asignándoles diferentes pesos
• Muy usadas juegos
• Posibilidad de aprendizaje de pesos (juego de damas de
Samuel)
• Ejemplo: ajedrez
3. Uso estudio estadı́stico previo
• Partir de una heurı́stica preliminar h(e) y realizar búsquedas
de entrenamiento
• Relacionar los valores de h(e) con los costes reales obtenidos
en cada uno de esos casos de entrenamiento
◦ corregir cada valor de h(e) usando el valor real obtenido
con más frecuencia en el ”entrenamiento”
4. Combinación de heurı́sticas
• Combinar heurı́sticas distintas que funcionen bien sólo en
ciertas circunstancias
◦ aprovechar heurı́sticas ”parcialmente” útiles
• Ponderándolas:
h0 (e) = w1 ×h1 (e)+w2 ×h2 (e)+...+wn ×hn (e)
0
 h (e) = max{h1(e), h2(e), ..., hn(e)}
• Agregándolas:
h0(e) = min{h1(e), h2(e), ..., hn(e)}
 0
h (e) = media{h1(e), h2(e), ..., hn(e)}
◦ Si todas son admisibles, la agregada también lo es
– FJRP ccia [Inteligencia Artificial] –
29
(2) EVALUACIÓN Y COMPARACIÓN DE HEURÍSTICAS
En general: [para heurı́sticas a minimizar]
Si h2(e) ≥ h1(e) ∀e [al revés si se maximiza h(e)] se dice que
h2(e) domina a h1(e)
• con h2(e) se generarán menos estados
→ aproxima más h∗ (e) [h∗ (e) ≥ h2 (e) ≥ h1 (e)]
→ heurı́stica ”menos informada”
• peor no asegura ofrecer una solución mejor
Criterios de comparación
1. No de estados generados (tamaño árbol/grafo)
• depende del problema de búsqueda concreto
• varı́an con las entradas (estados inicial y finales)
• otra opción: tamaño medio o máximo de la lista abiertos
2. Factor de ramificación efectivo (b̂)
• Métrica artificial
◦ depende ”sólo” de la heurı́stica (no del tamaño del problema)
◦ relativamente constante en distintas búsquedas
◦ interesa que esté próximo a 1
N : no de nodos expandidos
p: profundidad de la solución encontrada
b̂: factor de ramificación de un árbol uniforme (no de hijos
constante) de profundidad p que contenga N nodos
Se cumple:
2
3
p
N = 1 + b̂ + b̂ + +b̂ + ... + b̂
¿despejar b̂?
– FJRP ccia [Inteligencia Artificial] –
30
2.4 Búsqueda en Juegos
2.4.1 Generalidades
INTERÉS DE LOS JUEGOS
Fáciles de formalizar
• Fácil representación de estados
◦ En el juego de damas: situación del tablero + poseedor del turno
• Acciones restringidas (reglas precisas)
• Evaluación de eficacia directa
Mayor complejidad
• Existe oponente
◦ elemento externo con el que se interactúa
◦ introduce incertidumbre
• Futuro no predecible
• Alto factor de ramificación
MODELIZACION: Juegos de 2 jugadores con información completa
Contrincantes conocen la situación del juego y su oponente
• posibles movimientos + movimiento efectuado
• resultado del movimiento
• no se conoce estrategia del contrincante
No interviene el azar

 victoria
Se puede determinar en todo momento:
derrota

empate
Problemas de ”suma nula”: lo que ”gana” un jugador es lo que
”pierde” el otro
Ejemplos: ajedrez, 3 en raya
NO LO SON: juegos con cartas(mus) o dados(backgamon)
– FJRP ccia [Inteligencia Artificial] –
31
FORMALIZACIÓN.
estado (posición) inicial: posición inicial del tablero + quién inicia
el juego
operadores (movimientos): definen qué jugadas les están permitidas
a los jugadores
prueba de finalización: indica el fin del juego (estados/posiciones finales)
• victoria, empate, derrota
función de utilidad: (sobr e posciones finales) asigna valor numérico
al resultado del juego
• si no aplicada sobre posiciones finales: función de evaluación
TÉCNICA DE REPRESENTACIÓN: Árboles alternados
Representación explı́cita de todas las secuencias de jugadas posibles,
para ambos jugadores
nodos: representan posiciones (estados)
sucesores: posiciones a las que se puede acceder aplicando los
movimientos permitidos
Cada nivel representa, alternativamente, las acciones posibles de
cada jugador
Objetivo: Encontrar un buen primer movimiento
Esquema básico:
1.
2.
3.
4.
5.
Generar árbol alternado ”completo” para el tablero actual
Aplicar la función de evaluación sobre las hojas (posiciones finales)
Buscar mejor primer movimiento (inicio camino victorioso)
Ejecutar movimiento
”Percibir” que hace el contrincante
En la práctica: Inabordable construir árbol completo
• 3 en raya: 9! 360000 nodos
• damas: ≈ 1040 nodos
• ajedrez: ≈ 10120 nodos (factor ramific. medio ≈ 25)
en juegos pequenos
• Si es posible
en secuencias finales
– FJRP ccia [Inteligencia Artificial] –
32
APROXIMACIÓN PRÁCTICA
Limitar profundidad de la búsqueda (fijar horizonte limitado)
Aplicar función evaluación (heurı́stica) sobre nodos hoja resultantes
valores altos(positivos) → posiciones favorables
• Convención :
valores bajos(negativos) → posiciones desfavorables
– FJRP ccia [Inteligencia Artificial] –
33
2.4.2 Procedimiento MINIMAX
Objetivo: encontar el ”mejor” primer movimiento
Técnica mixta: combina búsqueda + evaluación
Jugador max: maximiza valores de evaluación de sus sucesores
Jugador min: minimiza valores de evaluación de sus sucesores
Objetivo: que max sea el ganador
max es quien debe realizar el movimiento actual [posee el turno]
• nodos en niveles pares: turno max
• nodos en niveles impares: turno min
Nota:
capa = jugada (1 nivel del árbol)
profundidad = pares de capas (grupos de 2 movtos. [min+max])
• nodos de prof. k = nodos max en capa 2k + nodos min en capa 2k + 1
nodo raiz (max) en capa 0 y prof. 0
Método MINIMAX
Búsqueda recursiva en profundidad acotada (p = profund. máxima)
• Raı́z: nodo max
• Sucesores nodo max: nodos min
• Sucesores nodo 
min: nodos max
 gana algún jugador
Final recursividad:
alcanza posición de empate

se han expandido 2p capas
Funcionamiento:
• Nodo raı́z: se corresponde con la posición actual del juego
• Aplica función evaluación sobre nodos hoja y propaga valores
hasta nodo raı́z
• Devuelve un ”buen” primer movimiento para max
◦ Selecciona movimiento que genera el sucesor más prometedor
– FJRP ccia [Inteligencia Artificial] –
34
Suposición de partida: Estrategia conservadora
• min elegirá siempre la mejor jugada para él (peor para max)
◦ min es, al menos, tan inteligente como max
◦ Sabe evaluar tan bien como max → usan misma func. evaluac.
Valor minimax: evaluación de la bondad de una posición
• en hojas: función de evaluación estática
• en nodos intermedios: calculado a partir de los valores de sus
sucesores (evaluación dinámica)
◦ tiene el cuenta el tipo de
jugador

valor positivo: favorable a max




(+∞ si posición ganadora)

Función
evaluación
hojas:
valor negativo: favorable a min

desde el punto


(−∞ si posición perdedora)

de vista de MAX

 empate: devuelve 0
PASOS:
1. Expandir en profundidad hasta nivel máximo (o no expansión posible)
2. Evaluar nodos hoja (aplicar func. evaluación)
3. En cada nivel se propagan evaluaciones hacia atrás
Si es nodo max: tomar máximo valor de sus sucesores
Si es nodo min: tomar mı́nimo valor de sus sucesores
4. En nodo raı́z: ejecutar movto. que lleve al sucesor con mejor valor
5. Esperar respuesta adversario y volver a (1) con nueva posición actual
mejor acción: Acción con evaluación más alta, suponiendo que
adversario elegirá en el futuro las mejores opciones para él.
Más precisa la evaluación propagada usando minimax que la obtenida aplicando la función de evaluación estática sobre los nodos
sucesores de la posición actual
• Tiene en cuenta la secuencia de futuras respuestas del oponente
Todo lo que se sabe de min es que elige la opción que más le
conviene (la de menor valor)
• Se supone a min tan inteligente como max
– FJRP ccia [Inteligencia Artificial] –
35
Punto clave: Definir una buena función de evaluación
Ejemplo: juego de damas de Samuel
• función ponderada de 16 caracterı́sticas
• aprendizaje automático de los pesos
ALGORITMO RECURSIVO
MINIMAX(posicion, nivel)
/* casos base (evaluación estática) */
if (esGanador (posicion)) then
devolver +∞
else if (esPerdedor (posicion)) then
devolver −∞
else if (esEmpate(posicion)) then
devolver 0
else if (nivel = limite) then
devolver evaluacion(posicion)
else
/* caso recursivo (evaluación dinámica) */
for all sucesor i de posicion do
valores[i] := MINIMAX(sucesor i, nivel+1)
end for
if (esNodoMAX(nivel)) then
devolver maximo(valores)
end if
if (esNodoMIN(nivel)) then
devolver minimo(valores)
end if
end if
Llamada inicial: MINIMAX(posionActual, 0)
– FJRP ccia [Inteligencia Artificial] –
36
Ejemplo: TIC-TAC-TOE
max: ”X”, min: ”O”

 +∞ si gana max
Funcion evaluación:
−∞ si gana min

(abiertos(max) − abiertos(min)) en otro caso
• abiertos(A) = no filas/columnas/diagonales que A podrı́a llegar
a completar
→ no lı́neas sin ficha del contrario
Cálculo:
abiertos(A)
= 8− no filas/colums./diags. ocupadas por contrario
Expansión hasta prof. 1 (2 niveles)
→ no se muestran posiciones simétricas
– FJRP ccia [Inteligencia Artificial] –
37
2.4.3 Poda ALFA-BETA
minimax separa generación de nodos y evaluación de posiciones
1o genera todos los sucesores (y sus descendientes)
después evalúa y propaga
→ muy ineficiente
Idea: Evitar generar todas las alternativas, “cortando” aquellas que
sepamos que no van a mejorar los valores que ya hemos obtenido hasta
el momento.
Generación y evaluación simultáneas (sucesor a sucesor)
Necesidad de ”arrastrar” información adicional
Poda α − β
idea: Arrastrar una ventana (2 valores) indicando a que intervalo debe
de pertener los valores de evaluación para ser considerados
Evita expandir posiciones que no mejorarán los resultados actuales
• su evaluación se sale del intervalo [α, β]
En cada nodo n:
• valor α: cota inferior (al menos ya se han conseguido α puntos)
• valor β : cota superior (como mucho se conseguirán β puntos)
α = −∞
Inicialmente:
β = +∞
Cada nodo recibe los mejores valores de α y β obtenidos hasta el
momento y los va actualiza con las evaluaciones que recibe de sus
hijos
• En determinados casos, podrá decidir dejar de evaluar sus hijos
(poda)
– FJRP ccia [Inteligencia Artificial] –
38
Actualización de valores α y β hacia atrás
• Nodos min: actualizan valor de β [minimizan cota superior, β ]
◦ Toman el menor valor de sus sucesores y actualizan β si los
sucesores lo mejoran
Si evaluacion(sucesor) < β =⇒ β = evaluacion(sucesor)
◦ Valores β en nodos min nunca crecen
• Nodos max: actualizan valor de α [maximizan cota inferior, α]
◦ Toman el mayor valor de sus sucesores y actualizan α si los
sucesores lo mejoran
Si evaluacion(sucesor) > α =⇒ α = evaluacion(sucesor)
◦ Valores α en nodos max nunca decrecen
CORTES
Se suspende expansión de sucesores de un nodo en los siguientes casos:
1. Corte α (en nodos min)
Si nodo min alcanza un valor β menor o igual que el valor
α que llegó de un nodo max anterior ⇒ No es necesario
seguir estudiando sus sucesores.
condición: β ≤ αpadre
Ejemplo:
2. Corte β (en nodos max)
Si nodo max alcanza un valor α mayor o igual que el
valor β que llegó de un nodo min anterior ⇒ No es necesario
seguir estudiando sus sucesores.
condición: α ≥ βpadre
Ejemplo:
Llamada inicial: ALFA BETA(posionActual, −∞, +∞, 0)
– FJRP ccia [Inteligencia Artificial] –
39
ALPHA BETA(posicion, α, β , nivel)
/* casos base (evaluación estática) */
if (esGanador (posicion)) then
devolver +∞
else if (esPerdedor (posicion)) then
devolver −∞
else if (esEmpate(posicion)) then
devolver 0
else if (nivel = limite) then
devolver evaluacion(posicion)
else
/* caso recursivo (evaluación dinámica) */
if (esNodoMAX(nivel)) then
αactual := α
aux := −∞
for all sucesor i de posicion do
if (αactual ≥ β ) then
PARAR [salida del bucle FOR] /* poda BETA */
else
aux := maximo(aux, ALFA BETA(sucesor i, αactual , β , nivel+1)
αactual := maximo(αactual , aux)
end if
end for
else if (esNodoMIN(nivel)) then
βactual := β
aux := +∞
for all sucesor i de posicion do
if (βactual ≤ α) then
PARAR [salida del bucle FOR] /* poda ALFA */
else
aux := minimo(aux, ALFA BETA(sucesor i, α, βactual , nivel+1)
βactual := minimo(βactual , aux)
end if
end for
end if
devolver aux
end if
Llamada inicial: ALFA BETA(posicionActual, −∞, +∞, 0)
– FJRP ccia [Inteligencia Artificial] –
40
PROPIEDADES
Algoritmo α − β generará el mismo movimiento que miimax expandiendo menos nodos
• Genera la misma evaluación dinámica para el nodo raı́z
• Mismo resultado, obtenido de forma más eficiente
Efectividad de α − β depende mucho del orden en que se examinan
los descendientes
• Si se examinan primero los peores caminos, nunca habrá cortes
• Interesa ordenar a los sucesores
Situación ideal: (maximiza podas)
• En nodos min: examinar primero sucesores con menor valor
• En nodos max: examinar primero sucesores con mayor valor
En la práctica no es posible ordenación perfecta
→ usar una func. evaluación estática simple para preordenar sucesores
En el caso ideal (ordenación perfecta)
• minimax explora O(bd) nodos
• α − β explora O(bd/2) nodos
Con b=factor de ramificación y d= prof. búsqueda máxima
• Es decir, suponiendo ordenación perfecta, α−β permitirı́a alcanzar el doble de profundidad que minimax empleando el mismo
espacio y tiempo
– FJRP ccia [Inteligencia Artificial] –
41
2.4.4 Mejoras minimax y alfa beta
1. Efecto horizonte
Provocado por limitar el estudio hasta profundidad fija
• No se ”ve” más alla del horizonte
• Un sucesor devuelve un valor (muy alto/bajo) que explorando
más niveles serı́a corregido en sentido contrario
◦ a corto plazo: buen movimiento
◦ a largo plazo: pésimo
• Ejemplo: Capturar dama en ajedrez
◦ Parece muy bueno, pero dependiendo del movimiento del
contrincante (que no veremos) puede ser nefasto si el rey
queda descubierto.
Solución: Búsqueda en profundidad variable
• No parar siempre a la misma profundidad
• Intentar llegar a posiciones ”en equilibrio”
a) Seguir profundizando si la hoja ofrece un valor extermo
b) Profundizar por sucesores hasta que valor estático y dinámico no varı́en mucho
→ dejar de profundizar cuando eval. dinámica ≈ ecal. estática
2. Uso movimientos de libro
Consultar posición actual en un catálogo construido previamente
y recuperar el movimiento guardado.
Imposible construir y manejar para juegos completos
Razonable en ciertas fases del juego: apertura y final
– FJRP ccia [Inteligencia Artificial] –
42
3. Profundización iterativa
Usado en juegos con restricciones de tiempo
• Ej.: ajedrez, elegir jugada antes de agotar tiempo
Idea:
a) Estudiar hasta profundiad p
b) Seleccionar mejor movimiento
c) Si hay tiempo, estudiar k niveles más (prof. p + k)
d) Al final del tiempo ejecutar el movimiento identificado en la
búsqueda completada más profunda
Consumo de tempo y espacio ligeramente mayor
→ se reevalúa el árbol en cada iteración
Puede ser útil para mejorar la poda α − β
• Usar resultados de la iteración anterior para ordenar sucesores
adecuadamente
4. Aumento podas en α − β
a) Uso movimientos asesinos (heurı́stica para ordenar sucesores)
Identificar tipos de jugadas muy buenas
Comenzar la evaluación de sucesores empleando esos
movimientos
b) Reducción ventana inicial
Comenzar búsqueda con ventana más pequeña (no [−∞, +∞])
Aumenta podas en los niveles superiores
→ afectan a un mayor no de nodos
Problema: difı́cil ajustar ventana inicial
→ posibilidad de ”cortar” el buen camino
→ en búsq. iterativa, fijarla en base a resultados previos
– FJRP ccia [Inteligencia Artificial] –
43
2.4.5 Juegos con Elementos de Azar
Ejemplos: backgamon, juegos de cartas, juegos con dados
Idea: Incluir una capa adicional representando al elemento aleatorio
Funciona como un ”jugador” más
EJEMPLO: Inclusión de un dado
• El movimiento del jugador depende del resultado de la tirada del
dado
→ ejemplo: parchis
• Incluir jugador ”dado ”
• Se suponen resultados del lanzamiento equiprobables
• Nodos dado son sucesores de nodos max y min
◦ Se corresponden con las diferentes opciones del elemento
aleatorio (resultado de la tirada del dado)
◦ Se asocia una probabilidad de aparición a cada uno
◦ max o min determinarán sus posibles movimientos en base a
la posición del juego y al nodo dado previo
– FJRP ccia [Inteligencia Artificial] –
44
• La propagación ascendente de valores tiene en cuenta esas probabilidades
• Nodos aleatorios: propagan un valor esperado (no real) de sus
sucesores
• Alternativas:
◦ Propagar peor valor (opción conservadora)
◦ Propagar mejor valor (opción optimista)
◦ Propagar media ponderada de acuerdo a probabilidades
Nodo max
expectiM AX(A) =
P6
i=1 probi × maximo{sucesores(dadoi )}
(sucesores(dadoi ) son nodos min )
Nodo min
expectiM IN (A) =
P6
i=1 probi × minimo{sucesores(dadoi )}
(sucesores(dadoi ) son nodos max )
Inconvenientes: introducir movimientos de azar incrementa espacio
de búsqueda
• añadir una capa adicional en cada jugada
• con un alto factor de ramificación
– FJRP ccia [Inteligencia Artificial] –
45
Bibliografı́a
Russell S., Norvig P.:Inteligencia artificial. Un enfoque moderno
Capı́tulos 3, 4, 5.
Nilsson N.:Inteligencia artificial. Una nueva sı́ntesis
Capı́tulos 7, 8, 9, 12
Enlaces
AI-Search Algorithm Animation Project (RMIT University)
Applet que demuestra el funcionamiento de los algoritmos de busqueda estudiados en clase.
http://www.cs.rmit.edu.au/AI-Search/
– FJRP ccia [Inteligencia Artificial] –
46
Descargar