Title: Principios de Inteligencia Artificial
1Principios de Inteligencia Artificial
Búsqueda heurÃstica
- Universidad Antonio de Nebrija
- Ramiro Lago
- Curso 2004-5
2Indice del capÃtulo
- Introducción al concepto de heurÃstica
- Algoritmos con el método de la escalada
- Algoritmo A
- Funciones heurÃsticas
- Algoritmo IDA
- Otros métodos
3Introducción al concepto de heurÃstica
- El concepto básico de heurÃstica aquel
conocimiento que nos permite reducir el espacio
de búsqueda
4HeurÃstica
- La caracterÃstica más importante de una
heurÃstica es la reducción del espacio de
búsqueda. No todas las heurÃsticas te garantizan
llegar a la mejor solución, pero si te deben
permitir podar el espacio de búsqueda de tal
forma que llegas a una solución buena. - Las reglas heurÃsticas son reglas empÃricas que
se han desarrollado a partir de la experiencia en
la resolución de problemas. Por ejemplo - Si has pinchado una rueda, entonces afloja
ligeramente las tuercas de la rueda antes de
levantar el coche con el gato. - En ajedrez, si tienes que mover el caballo
procura mantenerlo alejado de los bordes. - Para ir de W a K usa el camino más corto, salvo
que sea hora punta. - Las heurÃsticas acortan el camino hacia la meta
de diversas formas - Pueden ser funciones que estimen para cada nodo
los costes de llegar a la meta, y asà poder
ordenar los nodos para explorar primero los más
prometedores. - Una heurÃstica puede también ordenar los
operadores, con la finalidad aplicar primero los
más prometedores. Esto es lo que ocurre con
MYCIN, donde las metarreglas de control
heurÃstico seleccionan los módulos de reglas que
hay que evaluar. - Los expertos generan más y mejores heurÃsticas
que los novatos. Las heurÃsticas no son sólo
importantes en los problemas de búsqueda
algorÃtmica. Además es importante para una parte
de la IA conocida como IngenierÃa del
Conocimiento (KE), algunos de los sistemas que
realiza esta disciplina se denominan Sistemas
Expertos, ya que tratan de simular la capacidad
de decisión de expertos humanos. En estos
sistemas una de las tareas más importantes de los
ingenieros es llegar a formalizar las heurÃsticas
de los expertos.
5Funciones 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. - Los nodos más prometedores pueden ser
- Crecientes por ejemplo en un sistema de búsqueda
de inversiones se selecciona aquellas que
maximizan el beneficio. - Decrecientes por ejemplo, en un sistema de
diseño de rutas se seleccionan las que sean menos
costosas.
6Algoritmos con el método de la escalada
- Un método sencillo, que nos permite solucionar
problemas de búsqueda en los que tengamos una
función heurÃstica sin mesetas o máximos locales
7Té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
8Algoritmo 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 y se queda con el primero que es mejor
que el estado actual.
9Un ejemplo
- Veamos que este algoritmo de escalada es
demasiado inflexible, sólo se queda con el primer
sucesor que es mejor que el nodo actual - 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.
10Algoritmo 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)
11Un 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
12Un 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)
13Inconvenientes 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
14Un 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)
15Cambiamos 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?
16El algoritmo A
- Veremos uno de los más conocidos algoritmos de la
historia de la IA. Si la función heurÃstica
cumple ciertas condiciones, el algoritmo
encuentra la mejor solución al problema (el
camino óptimo)
17Funciones 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
C(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) C(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) C(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
18Bú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 (lista ABIERTOS). - De nuevo se selecciona el más prometedor y el
proceso continúa. - Es más flexible que el método de la escalada si
en una rama no se encuentra solución, se explora
alguna rama de las antes ignoradas que sea más
prometedora esto es posible porque los nodos
generados (pero no explorados o desarrollados) se
han almacenado previamente (lista ABIERTA). Las
ramas no prometedoras no se olvidan, su último
nodo sin explorar se ha almacenado a fin de poder
volver si fuera conveniente. - Algunos autores la denominan búsqueda avara o
voraz. - Un ejemplo clásico de este tipo de búsqueda es el
algoritmo A.
19El algoritmo A en árboles
- Definimos dos listas de nodos
- ABIERTOS nodos generados, pero todavÃa no
explorados (no se han desarrollado sus
sucesores). - CERRADOS nodos generados y explorados (se han
generado sus sucesores). - 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 ABIERTOS está vacÃa salir con fracaso. Si no,
continuar - Eliminar el primer nodo de ABIERTOS y colocarlo
en CERRADOS. 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 ABIERTOS
- Reordenar la lista ABIERTOS 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 punteros, es la solución
de coste mÃnimo, cuyo costo es g(n)
20Aplicando A a un árbol
- En el siguiente ejemplo se muestran los nodos con
su h(x), es decir, la estimación de coste de
desarrollarlo hasta la meta. g(x) será 1 por cada
nivel recorrido. - ABIERTOS CERRADOS SUCESORES
- A(06) A B(13), C(15), D(14)
- B(13), D(14) , C(15) A, B G(24), H(25)
- D(14) , C(15) G(24), H(25) A, B,
D E(22), F(23) - E(22), F(23), C(15) G(24), H(25) A, B,
D, E I(31), J(30) - J(30), I(31), F(23), C(15) G(24), H(25)
- El nodo J es la meta, gracias a los punteros
construimos la ruta solución A? D ? E ? J. - El eje del método es que ordenamos ABIERTOS de
acuerdo a f(n).
21Ejemplo de A en árbol depredador
- Supongamos un depredador (D) ciego, pero con buen
olfato y tacto. 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 (P). - 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, es decir, 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 (1,2)03 (1
,2) (1,1) 14 (2,2) 12 (1,3)
14 2 (2,2) 12 (1,1) 14 (1,3)
14 (1,2)(2,2) (2,1) 23 (2,3)
23 3 (2,1) 23 (2,3) 23 (1,1) 14 (1,3)
14 (1,2)(2,2)(2,1) (3,1) 32
() 4 (3,1) 32 (2,3) 23 (1,1) 14 (1,3)
14 (1,2)(2,2)(2,1)(3,1) (4,1) 41
() 5 (4,1) 41 (2,3) 23 (1,1) 14 (1,3)
14 (1,2)(2,2)(2,1)(3,1)(4,1) (4,2)
50 6 (4,2) 50 (2,3) 23 (1,1) 14 (1,3)
14 El primer nodo de ABIERTA es META () No
aplicamos operador SUR a (2,1), ya que obtenemos
(2,2), que es antecesor () Idem La solución se
construye a partir de los punteros a los
antecesores (1,2)(2,2)(2,1)(3,1)(4,1)(4,2) C
olores del gráfico con Rojo la ruta solución
con Verde los nodos que quedan en ABIERTA.
22A en un grafo
- Si hay ciclos, tenemos que ampliar el paso 7 por
cada sucesor que ya está en ABIERTOS o en
CERRADOS, es decir, el sucesor es una segunda
instancia de un nodo que ya hemos generado - Llamamos VIEJO al nodo que está en ABIERTOS o
CERRADOS. Cuál es mejor camino? sucesor o
VIEJO?. Compararemos el coste (g) de las dos
instancias - SI SUC ESTA EN ABIERTOS (ha sido generado, pero
no explorado o desarrollado) - 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 SUC ESTA EN CERRADOS (ha sido generado y
explorado, es decir, hemos generado sucesores) - 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)
23Aplicando 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 (B) 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)
24Ejemplo del depredador en un grafo
- Se lo hemos puesto bastante más difÃcil al
depredador, hemos aumentado los obstáculos.
Comerá? Hemos añadido el operador Ir al Oeste.
ABIERTOS CERRADOS SUCESORES 1 (1,2)03
(1,2) (1,1) 14 (2,2) 12 (1,3)
14 2 (2,2) 12 (1,1) 14 (1,3) 14 (1,2)
(2,2) (2,1) 23 3 (2,1) 23 (1,1) 14
(1,3) 14 (1,2) (2,2)(2,1) Nota (1) 4 (1,1)
14 (1,3) 14 (1,2) (2,2)(2,1)(1,1) Nota
(2) 5 (1,3) 14 (1,2) (2,2)(2,1)(1,1)
(1,4) 25 (1,3) 6 (1,4) 25 (1,2)
(2,2)(2,1)(1,1) (2,4) 34 (1,3)
(1,4) 7 (2,4) 34 (1,2) (2,2)(2,1)(1,1)
(3,4) 43 (1,3) (1,4) (2,4) 8 .... Cómo
puede construir el camino correcto a la meta?
Sencillo, recordemos que cada nodo apunta a su
antecesor (1,2) ? (1,3) ? (1,4) ? (2,4) ? ....
? (4,2) Meta (1) No aplicamos operador Sur a
(2,1), ya que me da (2,2), que es antecesor.
Además la aplicación de Oeste nos devuelve
(1,1)34 pero ya tenemos (1,1) en ABIERTOS, que
es mejor. Por tanto no se incluye (1,1) en
sucesores. (2) No aplicamos operador Este a
(1,1), ya que me da (2,1), que es antecesor.
Además la aplicación de Sur nos devuelve
(1,2)43 pero ya tenemos (1,2) en CERRADOS, que
es mejor. Por tanto no se incluye (1,2) en
sucesores.
25Consideraciones a A
- Hemos podido observar que A resulta muy costoso
en dos aspectos - Cálculo hay que estar ordenando continuamente el
vector de nodos generados pero todavÃa no
explorados (ABIERTA). - Almacenamiento el peor inconveniente es que su
consumo de memoria crece exponencialmente con la
profundidad del grafo. Esto hace que A no sea
una buena técnica para problemas grandes. Si p es
la profundidad del árbol y B es el número medio
de descendientes, entonces - El vector ABIERTA (el número de hojas del árbol)
tiene B p elementos. Por ejemplo en el problema
del 8-puzzle hay 22 pasos para llegar a la
solución y el número medio de sucesores es 3. Por
tanto, tiene 322 estados. - El vector CERRADA (nodos interiores) contiene el
siguiente número de elementos B 0 B 1 ...
B p-1. - 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).
26Funciones heurÃsticas
- Veremos que las funciones heurÃsticas pueden
tener una serie de caracterÃsticas (monotonÃa,
admisibilidad y creciente). En función de sus
caracterÃsticas harán que nuestros algoritmos
puedan ser óptimos y completos. - Además tenemos que conseguir algún criterio para
diseñar y seleccionar las funciones heurÃsticas
de un algoritmo.
27HeurÃsticas monotonÃa y crecimiento
- Sea C(n,m) el coste entre n y m y d(n,m) la
distancia mÃnima (la lÃnea recta de los
ejemplos). - Una heurÃstica es monótona o consistente cuando
para todo nodo n y cada sucesor m de n, el coste
estimado por h de alcanzar el objetivo desde n no
es mayor que C(n, m) y la suma de h(n) - h(n) ? C(n, m) h(m), ?n,m
- Por tanto
- h(n) ? d(n, m) ? C(n, m) h(m), ?n,m
- Esto es una forma de la regla general de la
desigualdad triangular, que especifica que un
lado de un triángulo no puede ser mayor que la
suma de los otros dos. - Un ejemplo de heurÃstica no monótona es la que
vemos a continuación, donde - 4 h(c) gt C(c,b) h(b) 1 1
- De lo dicho se deduce que para todo h que es
monótona, su f es creciente. Demostración - g(m) g(n) C(n,m)
- f(m) g(m) h(m) g(n) C(n,m) h(m) ? g(n)
h(n) f(n)
28HeurÃsticas admisibilidad
- Una función heurÃstica h se dice que es admisible
si - h(n) ? h(n), ?n
- en donde h(n)mÃnima distancia real desde n
hasta el objetivo - Las heurÃsticas admisibles son optimistas
siempre dan valores menores o iguales a los
costes reales. Un ejemplo es usar como h entre
dos puntos la lÃnea recta, ya que cualquier h que
escojamos no puede sobreestimar a la lÃnea recta. - 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
, la distancia mÃnima real). - Si h es monótona, entonces h es admisible. Lo
contrario no es cierto, como muestra el ejemplo,
donde h es admisible pero no monótona para h(c). - A es óptimo y completo si h es admisible.
29Existen diversas heurÃsticas admisibles
- En el problema del 8-puzzle hay más de una
heurÃstica admisible (y monótona) - h1(n) número de fichas fuera de orden.
- H1(n0) 8
- h2(n) suma de distancias de Manhattan, o sea el
número de cuadrados que apartan a una ficha de su
posición según la meta. Tener en cuenta que sólo
se admiten movimientos horizontales y verticales - H1(n0) 2332420218
30Determinar la calidad de la heurÃstica b
- En numerosas ocasiones nos encontraremos con más
de una heurÃstica admisible. En tales situaciones
requerimos de algún criterio para seleccionar las
mejores heurÃsticas, es decir, aquellas que
generan menos nodos. - Una forma de evaluar la calidad de una heurÃstica
es el b factor de ramificación eficaz. Partimos
de - N número total de nodos generados
- d profundidad de la solución
- b es el factor de ramificación eficaz que tendrá
un árbol con profundidad d y N1 nodos. Asà - N 1 b (b)2 ... (b)d ((b)d1 1)
/ (b-1) - Esta ecuación no se resuelve por métodos
algebraicos, sino con cálculo numérico. Por
ejemplo, si una aplicación de A tiene d5 y N52
nodos, entonces b1,92. - Una heurÃstica bien diseñada debe tener una b
cercana a uno, es decir, si h ? h, entonces b ?
1.
31Determinar la calidad de la heurÃstica
heurÃsticas dominantes
- Antes vimos que el 8-puzzle tenÃa dos heurÃsticas
admisibles (h1 y h2). Con la finalidad de
observar las diferencias de seleccionar una
función u otra se pueden comparar los resultados
de aplicar A al 8-puzzle con las diferentes
funciones (Russell y Norvig 2004, p. 121) - Para d24
- Coste de búsqueda A(h1) 39.135 y A(h2)
1.641 - Factor de ramificación eficaz A(h1) 1,48 y
A(h2) 1,26 - Diremos que h2 está más informada que h1 si para
cualquier nodo n, h2(n) ? h1(n) y ambos son
admisibles. Los valores de h2 son mayores que h1. - Entonces diremos que h2 domina a h1. Por tanto,
la dominación implica que h2 expande menos nodos
que h1. - También se dice que h2 es una heurÃstica mejor
informada que a h1. Otro ejemplo - Para mapas se puede utilizar la distancia
euclideana h(n) raÃz cuadrada de los cuadrados
de las distancias o max(distancia_x,
distancia_y). - Es fácil comprobar que la primera está mejor
informada y genera menos nodos (Escolano et al.
2003, p.26) - Recomendaciones
- Buscar heurÃsticas con valores mayores, siempre
que no sobreestimen h. - Buscar heurÃsticas con valores mayores siempre
que el tiempo de cálculo que exigen no sea grande.
32El algoritmo IDA
- El algoritmo A puede llegar a ser muy costoso en
cuanto a espacio de almacenamiento. Vamos a ver
una variante interesante de esta algoritmo IDA
o Iterative Deepening A, que solventa este
problema.
33Introducción a IDA (I)
- Hemos podido observar que A resulta muy costoso
en dos aspectos - Cálculo hay que estar ordenando continuamente el
vector de nodos generados pero todavÃa no
explorados (ABIERTA). - Almacenamiento el peor inconveniente es que su
consumo de memoria crece exponencialmente con la
profundidad del grafo. Si p es la profundidad del
árbol y B es el número medio de descendientes,
entonces - El vector ABIERTA (el número de hojas del árbol)
tiene B p elementos. - El vector CERRADA (nodos interiores) contiene el
siguiente número de elementos B 0 B 1 ...
B p-1. - Por ejemplo, este consumo de espacio hace que A
sea muy costoso en juegos de estrategia donde hay
que usar planificación de rutas en mapas grandes.
34Introducción a IDA (II)
- El algoritmo de descenso iterativo (Iterative
Deepening A) nos asegura que el coste de
almacenamiento crece linealmente con la
profundidad de la búsqueda. - Ideas esenciales del algoritmo
- Definimos un coste inicial o coste de corte
(Corte), que para el primer nodo es f(n0) g(n0)
h(n0) 0 h(n0) h(n0). Si h(n) es
admisible nos aseguramos que en todo momento el
coste de corte es menor o igual al coste mÃnimo,
Corte ? Cóptimo. Por tanto el algoritmo de modo
iterativo va haciendo crecer Corte hasta llegar a
Cóptimo. - En cada iteración el algoritmo desencadena una
búsqueda en profundidad de forma recursiva, que
terminará cuando encuentra un nodo n cuyo coste
coste sea mayor que el coste de corte,
Corteltf(n), o que sea el nodo solución. - Para entender el algoritmo conviene comprender
como comienza. Cuando se hayan generado todos los
sucesores de n0, la búsqueda en profundidad
recursiva encuentra la solución o devuelve el
mÃnimo de los costes de las ramas desarrolladas,
este mÃnimo (que es mayor que Corte) se convierte
en el nuevo valor de Corte. Comenzará una nueva
búsqueda en profundidad con el valor de Corte
incrementado.
35Algoritmo IDA
- Algoritmo IDA
- Corte ? f(n0)
- Repetir
- (Corte, Sol) ? BP( Corte, n0 )
- SI Sol ? 0 Devolver (Sol)
- SI Corte 8 Devolver (Fallo)
-
-
- Función BP( Corte, n )
- fsig ? 8
- SI Corte lt f(n) Devolver ( f(n), 0 )
- SI n meta Devolver ( Corte, n )
- Para cada s ? SUCESORES( n ) Hacer
- ( fnueva, Sol ) ? BP( Corte, s )
- SI Sol ? 0 Devolver (Corte, Sol)
- fsig ? min( fsig, fnueva )
-
- Devolver ( fsig, 0 )
Inicio de la búsqueda en profundidad (BP).
Devuelve el nuevo valor de Corte incrementado (si
no ha encontrado la solución)
Si el coste del nodo es mayor que Corte,
regresamos devolviendo f(n)
Puesto que el nodo actual no es la solución ni
tampoco es más costoso que Corte, entonces
tomamos los sucesores (s) para seguir buscando en
profundidad
Obtenemos el menor coste (fsig) de los sucesores
36Un ejemplo de IDA salir de la habitación (I)
- Supongamos que un robot (R) quiere salir de una
habitación en completa oscuridad. Entre su
posición y la puerta (P) se encuentra un muro.
Los operadores son ir al Este, ir al Sureste
e Ir al Sur. Dos notas - Evidentemente, el orden en el que se aplican los
operadores es importante. Aunque en este ejemplo
no sea el caso, conviene tener heurÃsticas sobre
dicho orden. - Operadores como Ir al Oeste no son aplicados.
Si lo fuese, el f(n) serÃa mayor que Corte, con
lo que terminarÃa la búsqueda en profundidad. Si
estuviéramos en un laberinto, deberÃa ser
aplicado. - La aplicación de cualquier operador tiene un
coste de uno. - h(n) es la distancia aérea hasta la puerta, por
tanto h(n0) 2.
37Un ejemplo de IDA salir de la habitación (II)
- En la primera iteración Corte 2. Llama a la
función BP (Búsqueda en Profundidad) con
argumentos Corte2 y n0(1,1). En la función BP
se desarrollan los dos sucesores de (1,1).
Algoritmo IDA 1ª Iteración con Corte2
Devuelve fsig 3, el mÃnimo f(n) de los
sucesores de (1,1)
BP ( 2, (1,1) )
Devuelve f(n)3
Devuelve f(n)3
BP ( 2, (2,1) ) 2 Corte lt f(2,1) 12
3 Devolver (3,0)
BP ( 2, (1,2) ) 2 Corte lt f(1,2) 12
3 Devolver (3,0)
- Los sucesores de (1,1) superan el corte de coste.
Por tanto cada sucesor devuelve su coste, su
f(n). - (1,1) devuelve fsig, el mÃnimo f(n) de los
sucesores, que es 3.
38Un ejemplo de IDA salir de la habitación (III)
- En la segunda iteración Corte 3. Llama a la
función BP (Búsqueda en Profundidad) con
argumentos Corte3 y n0(1,1). En la función BP
se desarrollan los dos sucesores de (1,1).
Algoritmo IDA 1ª Iteración con Corte3
BP ( 3, (1,1) )
Devuelve f(n)4
BP ( 3, (2,1) )
BP ( 3, (1,2) )
No genera (1,3) porque antes llega a la meta (3,3)
BP ( 3, (3,1) ) 3 Corte lt f(3,1) 22
4 Devolver (4,0)
BP ( 3, (2,3) )
BP ( 3, (3,3) ) Es la meta. Devuelve (3, (3,3))
- Con la rama de (2,1) llega a un fallo y devuelve
un fsig 4. - Con la rama de (1,2) llega a la meta.
39Notas finales a IDA
- El algoritmo va realizando búsquedas en
profundidad que terminan o rebotan cuando
supera el coste de corte. Entonces el Corte se
incrementa y se vuelve a realizar la búsqueda en
profundidad hasta que encuentra la meta. - IDA es notablemente más económico que A en
problemas sencillos, pero en problemas más
difÃciles, como ocurre con el ejemplo de la
habitación, tiene un rendimiento similar a A. - Para probar esta economÃa del algoritmo se puede
probar con el ejemplo de la habitación, quitando
los obstáculos.
40Otros métodos
- Reducción del problema (problem reduction)
- Verificación de restricciones (constraint
satisfaction) - Análisis de medios y fines (means-ends analysis)
41Reducció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
42Verificació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)
43Aná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
44Un 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)
45Un 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