Title: Principios de Inteligencia Artificial
1Principios de Inteligencia Artificial
Búsqueda heurÃstica
- Universidad Antonio de Nebrija
- Ramiro Lago
- Curso 2004-5
2HeurÃstica
- Con el fin de resolver problemas complicados con
eficiencia, es necesario sacrificar los
requisitos de movilidad y sistematización para
construir un control, que encuentre siempre una
buena solución aunque no garantice encontrar la
mejor - De aquà surge la idea de HeurÃstica una
heurÃstica es una técnica que aumenta la eficacia
de un proceso de búsqueda sacrificando la
exhaustividad - La caracterÃstica más importante de una
heurÃstica es la reducción del espacio de
búsqueda de exploración de las rutas que
conducen a una solución - En problemas del mundo real no siempre es posible
encontrar soluciones precisas pero no es fácil
dar una respuesta precisa a preguntas como
Porqué ha aumentado la temperatura media de una
región geográfica? - En estor casos la obtención de una heurÃstica
esta relacionada con una idea que hemos apuntado
en el primer tema El conocimiento experto (o
del experto). En el mundo real se pueden
introducir heurÃsticas basadas en este tipo de
conocimiento como sucede que este conocimiento
generalmente no está estructurado, su
formalización escapa al análisis matemático y es
objeto de un especial tratamiento por una parte
de la IA conocida como IngenierÃa del
Conocimiento (KE)
3Tipos de técnicas heurÃsticas tratadas
- Escalada (hill climbing)
- El primero mejor (best-first search)
- Reducción del problema (problem reduction)
- Verificación de restricciones (constraint
satisfaction) - Análisis de medios y fines (means-ends analysis)
4Funciones heurÃsticas
- Hay varias formas de incorporar el conocimiento
heurÃstico de un dominio a un determinado
proceso de búsqueda, una de las más utilizadas es
la realizada mediante las llamadas Funciones
heurÃsticas o funciones de evaluación de estados
(nodos) - Una función heurÃstica es una cuantificación (o
evaluación) de un estado de un sistema , que nos
permite determinar su deseabilidad respecto a
un objetivo determinado - El propósito de dicha función es guiar el proceso
de búsqueda en la dirección más prometedora,
sugiriendo cual escoger cuando se presentan
varias opciones - La eficiencia de la búsqueda mejora notablemente
si existe una forma de ordenar las selecciones de
modo que las más prometedoras se exploren
primero. Los métodos que sacan provecho de tales
mediciones se conocen como métodos informados
heurÃsticamente.
5Técnica de la escalada
- El método consiste en un bucle que constantemente
se desplaza en dirección de un valor ascendente
(nodos más prometedores). Para decidir en que
dirección debe moverse se necesita una función
de evaluación de los nodos , por ejemplo por
medio de una función que estime la proximidad de
un estado a una meta - La técnica de escalada es un procedimiento de
búsqueda en profundidad, pero ahora dispondremos
de una función que ayude a decidir en qué
dirección nos moveremos en el espacio de búsqueda - La escalada se utiliza frecuentemente cuando se
dispone de una buena función para evaluar los
estados intermedios, y es necesario asimismo un
objetivo hacia el que moverse, si no existe este
estado a priori no debe utilizarse este método
6Algoritmo de escalada simple
- Se queda con el primer sucesor que es mejor
- El algoritmo
- Evaluar el estado inicial, lo denominaremos M. Si
es estado objetivo, entonces devolverlo y
terminar, si no, convertirlo en estado actual - Repetir hasta que se encuentre solución o hasta
que no se pueda seguir (no hay operadores nuevos
que aplicar) - A. Seleccionar un nuevo operador que no se haya
aplicado al estado actual y aplicarlo para
generar un sucesor al estado actual, lo llamamos
nuevo estado - B. Evaluar nuevo estado
- Si el nuevo estado es estado objetivo, devolverlo
y terminar - Si no es estado objetivo, pero es mejor que el
estado actual, entonces convertirlo en estado
actual - Si no es mejor que el actual, seguir el bucle (2)
- El algoritmo no guarda el árbol de búsqueda
recorrido (la traza). - La comparación es muy local sólo se compara la
bondad del estado actual con sus sucesores
inmediatos
7Un ejemplo
- Veamos que este algoritmo de escalada es
demasiado inflexible, sólo se queda con el
primero mejor - El valor de la función de evaluación aparece
asociado al nodo - La meta es el nodo H (nodo de mayor puntuación
según la función de evaluación)
Estado actual Estado nuevo Mejor A B B B D D E
l algoritmo termina, ya que D no tiene sucesores.
D es bueno, pero no el mejor global
(meta). El algoritmo debió tomar C, pero el
primero que era mejor es B.
8Algoritmo de escalada por la máxima pendiente
- El algoritmo
- Evaluar el estado inicial. Si es estado objetivo,
entonces devolverlo y terminar, si no,
convertirlo en estado actual - Repetir hasta que se encuentre solución o hasta
que una iteración completa no produzca un cambio
en el estado actual - A. Aplicar cada operador al estado actual y
conseguir sucesores E1, ... En. - B. Evaluar E1 .... En. Si alguno es objetivo,
devolverlo y terminar Si no es asÃ, seleccionar
el mejor (Em) - C. Si Em es mejor que el estado actual, hacer que
Em sea el estado actual. Volver a (A) - Frente a la escalada simple, considera todos los
posibles estados nuevos (no el primero que es
mejor)
9Un ejemplo que funciona
- Queremos ir del Sur al Norte (de A hasta J) de
modo que en cada cruce nos aproximemos más. Los
cruces se representan en la siguiente figura por
los nodos. - La función heurÃstica puede basarse en la medida
de distancia espacial a la meta. A cada nodo
asociamos su distancia. - Los operadores son Ir al siguiente del Norte,
Ir al siguiente del Este e Ir al siguiente del
Oeste. Observar que aunque existiese un operador
Ir al siguiente hacia el Sur el algoritmo
evitarÃa el nuevo nodo, ya que siempre serÃa peor
(más distante).
Estado actual Sucesores Mejor A B,C B B D D D
C,E,H H H I I I J J Meta
10Un ejemplo que no funciona
- Hemos modificado el ejemplo anterior. Por qué se
queda parado en D?
Estado actual Sucesores Mejor A B,C B B D D D
C,E C D El estado actual vuelve e ser D, ya
que ninguno de sus sucesores es mejor que él
J
0
I
H
2
1
G
3
4
3
C
D
E
4
5
4
B
A
- El estado D es un mÃnimo local, no el mÃnimo
absoluto (la meta)
11Inconvenientes de los métodos de escalada
- El proceso de búsqueda puede no encontrar una
solución cuando se encuentra con - Máximo/mÃnimo local un estado que es mejor que
todos sus vecinos, pero no es mejor que otros
estados de otros lugares. Puesto que todos los
estados vecinos son peores el proceso se queda
paralizado - Meseta los estados vecinos tienen el mismo
valor. El proceso, basado en comparación local,
no discrimina la mejor dirección - El origen de estos problemas es que el método de
la escalada se basa en comparaciones locales, no
explora exhaustivamente todas las consecuencias.
Frente a otros métodos menos locales, tiene la
ventaja de provocar una explosión combinatoria
menor - Soluciones parciales
- Almacenar la traza para poder ir hacia atrás,
hasta un estado prometedor (o tan bueno como el
que hemos dejado) - Dar un gran salto para seguir la búsqueda. Útil
en el caso de mesetas
12Un ejemplo de los inconvenientes del método de
escalada
- Considerar el problema de ordenar los bloques
- Supongamos la siguiente función heurÃstica
añadir un punto por cada bloque que este sobre el
bloque que debe estar, restar un punto en caso
contrario - Disponemos de dos operadores
- Coger bloque y situarlo sobre otro Encima (x,
y) - Coger un bloque y situarlo sobre la mesa
SobreMesa(x) - Al usar esta función el estado inicial tiene un
valor de 4, y el final 8. Sólo es posible
realizar un movimiento a partir del estado
inicial (SobreMesa (A)), este movimiento, produce
un estado de valor 6 y el algoritmo de escalada
acepta este movimiento. - En el nuevo estado aparecen tres movimientos
posibles que dan lugar a tres estados de valor 4
(a,b,c). El proceso se detiene ya que las tres
opciones son peores que el estado inicial (6)
13Cambiamos de método o cambiamos de función?
- El problema de los bloques nos muestra que el
método se ha quedado atascado en un máximo local
(el segundo estado). Podemos - Cambiar de método. Escoger una técnica que no sea
tan local - Cambiar de función heurÃstica. Por ejemplo por
cada bloque que se sitúe en una estructura
correcta( es decir , tenga debajo la estructura
objetivo) añadir tantos puntos como bloques tenga
debajo. En caso contrario restar un valor
equivalente - Esta nueva función hace que el estado inicial
tenga un valor de 28, el final 28. Con el
segundo estado tenemos un valor de 21.
Solucionamos el problema con esta función?
14Búsqueda del mejor primero
- Los métodos anteriores no tienen vuelta atrás,
esto es, una vez escogido un estado como actual
no se puede recorrer el camino hacia atrás a fin
de deshacerlo (irrevocables) - La búsqueda. en profundidad tiene la ventaja de
permitir encontrar soluciones sin tener que
expandirse por todas las ramas, y la búsqueda en
anchura presenta la ventaja de no quedar atrapada
en callejones sin salida - Introducimos un nuevo modelo de búsqueda que
intenta combinar ambas ventajas, llamado búsqueda
del primero mejor (best-first search), cuya
estrategia básica es como sigue - En cada paso se selecciona el nodo más prometedor
(como en el caso de la escalada) - Se expande este nodo, si alguno de los generados
es una solución se termina, si no es asà los
nuevos nodos obtenidos se añaden a la lista de
nodos generados - De nuevo se selecciona el más prometedor y el
proceso continúa - Si en una rama no se encuentra solución, se
explora alguna rama de las antes ignoradas que
sea más prometedora sin embargo la ultima rama
no se olvida, su último nodo sin explorar se
almacena en el conjunto de nodos a fin de poder
volver si fuera conveniente
15Funciones de coste
- Para muchas aplicaciones es interesante definir
una función que sea la suma de dos componentes
que llamamos g y h - La función g representa el coste para ir desde el
inicio hasta el estado actual la h es una
estimación del coste adicional necesario para
llegar a la solución - La función suma f g h representa pues el
coste de un camino completo desde el nodo inicial
a la solución - Dicho de forma más precisa
- Dados dos nodos cualesquiera ni , nj , la función
k(ni , nj) determina el coste mÃnimo de un camino
entre ambos nodos - El costo de un camino mÃnimo entre un nodo n y
una meta t , es por tanto h(n) k(n, t) - h es una estimación del coste para llegar a la
meta y depende del conocimiento del dominio del
problema - El costo de un camino mÃnimo entre el nodo
inicial i y un nodo n se denomina g(n) k(i,
n) - El valor de g no es una estimación, sino la suma
de costes de aplicación de las reglas a través de
la ruta - El costo real de un camino mÃnimo desde y hasta
t será por tanto - f(n) g(n) h(n)
16Un ejemplo
En el siguiente ejemplo se muestran los nodos con
su h(x), es decir, la estimación de coste de
desarrollarlo. G(x) será 1 por cada nivel
recorrido
A
A
A
B
C
D
B
C
D
(3)
(5)
(1)
(3)
(5)
A
A
E
F
(4)
(6)
B
C
D
B
C
D
(5)
(5)
E
F
G
H
E
F
G
H
(6)
(5)
(4)
(6)
(6)
(4)
(6)
(5)
I
J
(2)
(1)
17El algoritmo A en árboles
- Del tipo Primero mejor
- Versión aplicable a árboles. En un árbol no es
necesario comprobar si el nuevo nodo (sucesor)
está en ABIERTOS o CERRADOS - Pasos
- Colocar en ABIERTOS el nodo inicial i. Hacer
g(i)0 Calcular h(i) Hacer f(i) g(i) h(i) - Crear CERRADOS como lista vacÃa
- Si AB. está vacÃo salir con fracaso. Si no,
continuar - Eliminar el primer nodo de AB. y colocarlo en CE.
Llamarlo nodo n - Si n es meta salir con éxito
- Si no, desarrollar el nodo n generando sus
sucesores que no sean antecedentes de n - Por cada sucesor generado, hacer
- Colocar a cada sucesor un puntero (direccionador)
a n - Calcular g(suc) g(n) k(n, suc)
- Calcular f(suc) g(suc) h(suc)
- Colocar el sucesor en AB
- Reordenar la lista AB. de acuerdo al valor de f
- Ir al punto 3
- En caso de ÉXITO el camino desde i hasta n,
obtenido a través de los direccionadores, es la
solución de coste mÃnimo, cuyo costo es g(n)
18Aplicando A a un árbol
- Comprobar el algoritmo con el ejemplo anterior
- Calculamos f(A), que es 6.
- Ponemos A en CERRADOS
- Generamos sus sucesores B, C y D
- Por cada sucesor calculamos f y lo ponemos en
ABIERTOS - F(B) 31
- F(C) 51
- F(D) 11
- El quid del asunto reordenamos ABIERTOS de
acuerdo a f - Tomamos el primer elemento de ABIERTOS (que ya ha
sido ordenado) D, lo borramos de ABIERTOS y lo
ponemos en CERRADOS - Generamos sus sucesores E y F
- Por cada sucesor calculamos f y lo ponemos en
ABIERTOS - F(E) 41
- F(F) 61
- Reordenamos ABIERTOS de acuerdo a f
- ...
A
B
C
D
(3)
(5)
(1)
A
B
C
D
(3)
(5)
E
F
(4)
(6)
19Ejemplo depredador (I)
- Supongamos un depredador (D) ciego, pero con buen
olfato y tacto. Su olfato le permite dirigirse
hacia el punto donde esta la presa (P). Puesto
que es ciego no puede anticipar o percibir el
obstáculo (O). Aunque el obstáculo no le impide
oler de forma precisa a su presa. - Para simplificar el problema a nuestro depredador
sólo le podremos aplicar tres operadores Ir al
Norte, Ir al Este e Ir al Sur (el orden de
las agujas del reloj) - Tenemos una forma sencilla de calcular g(n) y
h(n) cada casilla en la matriz del terreno es
una unidad. - Para reordenar los elementos de ABIERTA (paso 8)
si hay igualdad en f(n), ponemos primero los
nodos más cercanos a la meta, de menor h(n). - Notación los nodos se etiquetan con la posición
(X,Y), pudiendo señalar a continuación los
valores g(n) y h(n), de la forma (X,Y) g(n)h(n)
ABIERTA CERRADA SUCESORES 1 (2,1)03 VacÃa
VacÃa 2 VacÃa (2,1) (1,1) 14 (2,2) 12
(3,1) 14 3 (2,2) 12 (1,1) 14 (3,1)
14 (2,1) 4 (1,1) 14 (3,1) 14 (2,1)
(2,2) (1,2) 23 (3,2) 23 5 (1,2) 23
(3,2) 23 (1,1) 14 (3,1) 14 (2,1)
(2,2) 6 (3,2) 23 (1,1) 14 (3,1)
14 (2,1) (2,2) (1,2) (1,3) 32
() 7 (1,3) 32 (3,2) 23 (1,1) 14 (3,1)
14 (2,1) (2,2) (1,2) 8 (3,2) 23 (1,1) 14
(3,1) 14 (2,1) (2,2) (1,2) (1,3) (1,4)
42 9 (1,4) 42 (3,2) 23 (1,1) 14 (3,1)
14 (2,1) (2,2) (1,2) (1,3) 10 (3,2) 23
(1,1) 14 (3,1) 14 (2,1) (2,2) (1,2)
(1,3) (2,4) 50 (1,4) 11 (2,4) 50
(3,2) 23 (1,1) 14 (3,1) 14 El primer nodo
de ABIERTA es META () No aplicamos operador SUR
a (1,2), ya que me da (2,2), que es antecesor
20A en un grafo
- Si hay ciclos, tenemos que ampliar el paso 7
- Por cada sucesor (si está en ABIERTOS o en
CERRADOS) - Si el SUC está en ABIERTOS y no en CERRADOS (ha
sido generado, pero no explorado) - Entonces llamamos VIEJO al nodo que está en
ABIERTOS. Con cuál nos quedamos? Vamos a evaluar
el coste de las dos instancias del mismo nodo
(VIEJO y SUC) - Si g(VIEJO) gt g(SUC), entonces nos quedamos con
los valores de SUC (el mejor camino) y los
ponemos en VIEJO - Colocamos a VIEJO un puntero (paterno) a n (el
padre de SUC) - Calculamos de nuevo g(VIEJO) Hacer g(viejo)
g(suc) y recalcular f(VIEJO) - Si g(VIEJO) lt g(SUC), entonces nos quedamos con
los valores de VIEJO (que ya está en ABIERTOS)
dejamos VIEJO en ABIERTOS y no incluimos SUC - Si el SUC no está en ABIERTOS y si en CERRADOS
(ha sido generado y explorado) - Si g(VIEJO) gt g(SUC), entonces nos quedamos con
los valores de SUC (el mejor camino) y los
ponemos en VIEJO - Colocamos a VIEJO un puntero (paterno) a n (el
padre de SUC) - Calculamos de nuevo g(VIEJO) Hacer g(viejo)
g(suc) y recalcular f(VIEJO) - Hemos encontrado un mejor camino al nodo (SUC y
VIEJO son el mismo nodo), por tanto debemos
propagar la mejora a los sucesores de VIEJO, ya
que deseamos que el árbol de exploración conserve
el camino menos costoso. Hacer una búsqueda en
amplitud tomando como nodo inicial a viejo, y
descender por cada rama recalculando g(n) y f(n)
hasta encontrar un nodo sin sucesor, o que se
encuentre en AB, o que ya tenga un camino igual
o mejor que el recién encontrado. - Si g(VIEJO) lt g(SUC), entonces nos quedamos con
los valores de VIEJO (el mejor camino) no
hacemos nada (no se incluye SUC en ABIERTOS)
21Aplicando A a un grafo
- Supongamos el siguiente grafo (tiene ciclos)
- ABIERTOS es C,B, ya que f(C)4 Y f(B)5
- CERRADOS es A,D, SUC es B, VIEJO es B
- g(VIEJO) gt g(SUC). Por tanto nos interesa el
camino de SUC - Colocamos a VIEJO un puntero (paterno) a n (el
padre de SUC, que es D) - Recalculamos VIEJO g(B) 2, por tanto f(B)
21 - Seguimos en el punto 8 reordenamos ABIERTOS y
resulta que es B,C, ya que f(B) 3 y f(C)4
A
(4)
(1)
(1)
B
C
D
(1)
(1)
(3)
(1)
(2)
B
F
(1)
(6)
22Ejemplo depredador (II)
- Se lo hemos puesto bastante más difÃcil al
depredador, hemos aumentado los obstáculos.
Comerá?
ABIERTA CERRADA SUCESORES 1 (2,1)03 VacÃa
VacÃa 2 VacÃa (2,1) (1,1) 14 (2,2) 12
(3,1) 14 3 (2,2) 12 (1,1) 14 (3,1)
14 (2,1) 4 (1,1) 14 (3,1) 14 (2,1)
(2,2) (1,2) 23 5 (1,2) 23 (3,2) 23
(1,1) 14 (3,1) 14 (2,1) (2,2) 6 (1,1) 14
(3,1) 14 (2,1) (2,2) (1,2) Vacia
() 7 (1,1) 14 (3,1) 14 (2,1) (2,2)
(1,2) 8 (3,1) 14 (2,1) (2,2) (1,2)
(1,1) (1,2) 23 YA ESTA EN CERRADA. NO ES
MEJOR, NO SE INCLUYE EN AB. 9 (3,1) 14 (2,1)
(2,2) (1,2) (1,1) 10 VacÃa (2,1) (2,2)
(1,2) (1,1) (4,1) 25 (3,1) 11 (4,1)
25 (2,1) (2,2) (1,2) (1,1) (3,1)
12 VacÃa (2,1) (2,2) (1,2) (1,1) (4,2)
34 (3,1) (4,1) 13 .... Cómo puede
construir el camino correcto a la meta? Sencillo,
recordemos que cada nodo apunta a su
antecesor (2,1) ? (3,1) ? (4,1) ? (4,2) ? ....
? (2,4) Meta () No aplicamos operador SUR a
(1,2), ya que me da (2,2), que es antecesor
23Consideraciones a A
- Si sólo es relevante obtener el objetivo (sea
cual sea su coste), entonces g es 0 - Si h es 0, entonces g controla la búsqueda. En
este caso, si g tiene el mismo valor (normalmente
1), entonces estamos ante una búsqueda en anchura
(no informada) - Lo esencial en este procedimiento de búsqueda es
dar con una función h(n) que no sobreestime el
coste de alcanzar la meta (h es minorante de h
), esto es lo que se conoce como heurÃstica
admisible. Esta regla da lugar a funciones h(n)
que son optimistas, ya que h(n) es normalmente
inferior al coste real de llegar a la meta
24Reducción del problema
- Otra heurÃstica que depende del conocimiento del
problema es la estrategia de divide y vencerás
el problema se descompone en subproblemas - Veremos que una buena representación son los
grafos Y-O - Hasta ahora los grafos eran del tipo O, en los
que existe un camino simple para llegar a una
meta. - La descomposición o reducción en subproblemas
genera arcos Y es un tipo de arco en el que
todos sus sucesores deben resolverse para que el
arco apunte a una solución - Supongamos el siguiente ejemplo alguien se
plantea como objetivo construir una aplicación.
Tiene dos opciones - A. Subcontratarla (externalizarla)
- B. Comprar un paquete y personalizarlo
- C. Desarrollo propio, que se subdivide en (C.1)
planificación, (C.2) análisis/diseño y (C.3)
programación/pruebas
Objetivo conseguir aplicación de contabilidad
Subcontratar el desarrollo
Comprar paquete
Desarrollo propio
C.1
C.2
C.3
25Verificación de restricciones
- El estado meta es aquel que satisface un conjunto
dado de restricciones - Los problemas de planificación y agendas son
tÃpicos en este sentido, ya que el diseño de la
solución debe realizarse dentro de unos lÃmites
de tiempo, coste y recursos humanos o materiales - Los estados se definen mediante un conjunto de
variables(Vi), cada variable tiene un dominio
(Di) que es el conjunto de posibles valores de la
variable. Puede ser continuo (por ejemplo, un
valor entre 0,1) o discreto. La prueba de que
se ha llegado a la meta es que el estado
satisface todas las restricciones (este requisito
se puede ablandar en función del problema)
26Análisis de medios y fines
- Se centra en las diferencias entre el estado
actual y el estado objetivo. El sistema trata de
encontrar uno o varios operadores que reduzcan la
diferencia. - Si el operador no puede utilizarse para este
estado, entonces se crea un subproblema
consistente en buscar el estado al que se puede
aplicar, es decir, se buscan estados que cumplan
las precondiciones del operador - El proceso puede continuar recursÃvamente
- Los operadores son reglas que contienen
- Precondiciones (en el antecedente de la regla)
- Cambios o resultados
- Existe una tabla de diferencias, que ordena las
reglas de acuerdo con su capacidad para reducir
la diferencia
27Un ejemplo de análisis (I)
- Imaginemos un robot, que debe mover un escritorio
de una habitación a otra, con dos objetos encima
de él. Los objetos también deben trasladarse de
habitación. - Operadores
- EMPUJAR(obj, lug)
- Precondiciones en(robot,,obj) grande(obj)
despejado(obj) brazo_vacio - Resultado en(obj, lug) en(robot, lug)
- LLEVAR(obj, lug)
- Precondiciones en(robot,obj) pequeño(obj)
- Resultado en(obj, lug) en(robot, lug)
- ANDAR(lug) (no hay precondición)
- Resultado en(robot,lug)
- COGER(obj)
- Precondición en(robot,obj)
- Resultado sostiene(obj)
- DEJAR(obj)
- Precondición sostiene(obj)
- Resultado sostiene(obj)
28Un ejemplo de análisis (II)
- Tabla de diferencias
- Es importante que las diferencias importantes se
reduzcan antes que las menos importantes
- Existen al principio dos reglas que podamos
utilizar para aminorar la diferencia - LLEVAR una de las precondiciones no tiene un
operador que pueda satisfacerla - EMPUJAR para aplicarla es necesario hacer
- En(robot,escritorio)
- Despejado(escritorio)
- qué operadores nos ayudan a cumplir las
precondiciones? - Inconvenientes
- Al tratar de aminorar una diferencia se puede
aumentar otra - En problemas complejos las tablas de diferencia
son muy costosas. Resultan necesarias técnicas de
planificación