Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


La búsqueda heurística, Apuntes de Ingeniería Infórmatica

Asignatura: Sistemas Basados en el Conocimiento, Profesor: , Carrera: Ingeniería Informática, Universidad: UAX

Tipo: Apuntes

Antes del 2010

Subido el 28/05/2007

_vivayo_
_vivayo_ 🇪🇸

3.7

(117)

149 documentos

1 / 14

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
BUSQUEDA HEURISTICA
Todos los algoritmos de fuerza bruta son poco eficientes debido
a que son búsquedas a ciegas, es decir, no usan conocimiento sobre el
dominio para guiarse en busca del siguiente nodo mejor situado.
La búsqueda heurística se basa en que la mayor parte de los
"espacios problemas" proporcionan información adicional con un pequeño
coste computacional. Esta información adicional nos ayuda a elegir los
nodos que estén más cerca de la meta. Esta información se llama
Heurística.
Se llama Función de Evaluación a una función f que relaciona
cada nodo con un número real y que sirve para estimar el costo relativo de
continuar la búsqueda desde ese nodo. Por lo general, f(N) se considera
que es la distancia estimada que queda entre N y el Nodo Meta. Otras
veces se dice que f(N) es la longitud estimada desde el Nodo Raíz hasta el
Nodo Meta, pasando por el nodo N, etc... Esta función de evaluación se
utilizará para decidir el orden en que se explorarán los nodos durante la
búsqueda. Hay varios algoritmos de búsqueda que usan una de estas
funciones de evaluación heurística. Entre otros veremos los siguientes:
- Escalar colinas
- Mejor primero
- A*
ESCALAR COLINAS
El método de escalar colinas es el más simple de los métodos
heurísticos. El nombre viene de la analogía existente entre el espacio del
problema y un plano bidimensional donde la función heurística define la
elevación de cada punto y la meta es alcanzar el punto más alto del terreno.
Escalar colinas funciona efectuando movimientos en la
dirección que tenga la subida más pronunciada localmente. Lo único que se
memoriza es el estado en curso y el que originalmente era el nodo raíz. En
cada ciclo se expande el nodo en curso y se aplica la función heurística a
cada uno de sus sucesores y el que tenga el mejor valor se convierte en el
nuevo estado en curso.
Es semejante a la búsqueda en profundidad, excepto que el
método de escalar colinas ordena los posibles estados a elegir en cada paso
de la búsqueda de acuerdo con alguna medida 1 función heurística de la
distancia que queda desde cada uno de ellos hasta la meta. Cuanto mejor
sea la medida heurística mejores resultados dará el método de escalar
colinas con respecto al de profundidad.
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe

Vista previa parcial del texto

¡Descarga La búsqueda heurística y más Apuntes en PDF de Ingeniería Infórmatica solo en Docsity!

BUSQUEDA HEURISTICA

Todos los algoritmos de fuerza bruta son poco eficientes debido a que son búsquedas a ciegas, es decir, no usan conocimiento sobre el dominio para guiarse en busca del siguiente nodo mejor situado.

La búsqueda heurística se basa en que la mayor parte de los " espacios problemas " proporcionan información adicional con un pequeño coste computacional. Esta información adicional nos ayuda a elegir los nodos que estén más cerca de la meta. Esta información se llama Heurística.

Se llama Función de Evaluación a una función f que relaciona cada nodo con un número real y que sirve para estimar el costo relativo de continuar la búsqueda desde ese nodo. Por lo general, f(N) se considera que es la distancia estimada que queda entre N y el Nodo Meta. Otras veces se dice que f(N) es la longitud estimada desde el Nodo Raíz hasta el Nodo Meta , pasando por el nodo N , etc... Esta función de evaluación se utilizará para decidir el orden en que se explorarán los nodos durante la búsqueda. Hay varios algoritmos de búsqueda que usan una de estas funciones de evaluación heurística. Entre otros veremos los siguientes:

  • Escalar colinas
  • Mejor primero
  • A*

ESCALAR COLINAS

El método de escalar colinas es el más simple de los métodos heurísticos. El nombre viene de la analogía existente entre el espacio del problema y un plano bidimensional donde la función heurística define la elevación de cada punto y la meta es alcanzar el punto más alto del terreno.

Escalar colinas funciona efectuando movimientos en la dirección que tenga la subida más pronunciada localmente. Lo único que se memoriza es el estado en curso y el que originalmente era el nodo raíz. En cada ciclo se expande el nodo en curso y se aplica la función heurística a cada uno de sus sucesores y el que tenga el mejor valor se convierte en el nuevo estado en curso.

Es semejante a la búsqueda en profundidad, excepto que el método de escalar colinas ordena los posibles estados a elegir en cada paso de la búsqueda de acuerdo con alguna medida 1 función heurística de la distancia que queda desde cada uno de ellos hasta la meta. Cuanto mejor sea la medida heurística mejores resultados dará el método de escalar colinas con respecto al de profundidad.

BUSQUEDA EL MEJOR-PRIMERO

En la búsqueda "el mejor primero" el movimiento hacia adelante se hace desde el nodo mejor situado con respecto a la meta, sin tener en cuenta su situación en el árbol.

Los caminos que se encuentren utilizando este método de búsqueda serán más cortos que los que se encuentren buscando con otros métodos, ya que con esta estrategia se parte del nodo mejor situado.

Igual que con el método de escalar colinas este método requiere clasificar los nodos de acuerdo con su situación. En este caso, sin embargo, se clasifica toda la estructura de datos.

Por lo tanto, en cada paso del proceso de búsqueda se selecciona el nodo más prometedor de todos los que se han generado hasta el momento. Esto se consigue aplicando una función heurística apropiada a cada nodo generado expandiendo, a continuación, aquel que ha dado el mejor resultado al evaluar dicha función heurística. Si uno de los sucesores (hijo) del nodo expandido es la meta, la búsqueda termina. En caso contrario, estos sucesores se suman al conjunto de nodos generados hasta el momento y se repite el proceso de selección del nodo más prometedor

El algoritmo que se presenta a continuación realiza la búsqueda a través de un grafo dirigido en el cual cada nodo representa un punto, o estado, en el espacio del problema. Cada nodo es, entonces, una estructura que contiene, además de una descripción del estado del problema que representa, una indicación de lo prometedor que es respecto a los demás nodos, un enlace-padre que apunta al mejor nodo de los nodos- padre que cuelga, y por último, una lista de sus nodos sucesores (aquellos que se generan a partir de él). El enlace-padre permite recobrar el camino hasta la meta una vez se ha llegado a ella. La lista de sucesores permite, cuando se encuentra un camino mejor hasta un nodo ya generado, propagar esta mejora hacia sus sucesores. Para implementar este procedimiento se necesitan dos listas de nodos:

  • OPEN : Contiene los nodos que se han generado y a los cuales se ha aplicado la función heurística pero todavía no han sido examinados (no se han generado sus sucesores). OPEN es, en realidad, una cola de prioridad en la que los elementos con mayor prioridad son aquellos con valor más prometedor para la función heurística.
  • CLOSED : Contiene los nodos que ya han sido examinados. Es necesario mantener estos nodos en memoria ya que cuando se genera un nuevo nodo hay que comprobar su ya ha sido generado antes.

EJEMPLO:

Resolver utilizando el método de mejor-primero:

SOLUCION

1.- OPEN Å A

f(A) =

P(A) = Null

Luego al final de esta primera etapa tenemos:

OPEN = A

CLOSE = NULL

2.- A ≠ Meta y además es el único nodo en OPEN, luego

CLOSE Å A

Generamos los sucesores de A

B, F, H ∉ OPEN v CLOSED

f(B) = 6, P(B) = A

f(F) = √37, P(F) = A

f(H) =√37, P(H) = A

quedando entonces: OPEN = B, F, H

CLOSED = A

3.- f(B) < f(F). por lo tanto metemos B en CLOSED

CLOSED Å B

generamos los sucesores de B

C ∉ OPEN v CLOSED

OPEN Å C

f(C) = 4, P(C) = B

quedando entonces: OPEN = F, H, C

CLOSED = A, B

4.-f(C) < f (F). por lo tanto metemos C en CLOSED

CLOSED Å C

generamos los sucesores de C

D ∉ OPEN v CLOSED

f(D) = 2, P (D) = C quedando entonces: OPEN = F, H, D

CLOSED = A, B, C

5.- f(D) < f(F). por lo tanto metemos D en CLOSED

CLOSED Å D

generamos los sucesores de D

E, G ∉ OPEN v CLOSED

f(E) = 0, P(E) = D

f(G) = 6, P(G) = D

METODO DE BUSQUEDA A*

Este método de búsqueda examina los nodos en un orden que da la mayor prioridad a los nodos que parecen pertenecer al camino más corto desde el nodo inicial hasta la meta. Es por tanto, similar al método "El Mejor Primero" pero siendo la diferencia fundamental la función heurística f , ya que ésta no es, simplemente, la estimación de la distancia que queda desde el nodo, en cuestión, hasta la meta, sino que se suma un factor g , que representa el coste del mejor camino encontrado hasta el momento, desde el nodo inicial hasta el nodo actual.

Así, la función heurística f utilizada en la búsqueda A* queda de la siguiente forma:

f = g + h

donde las funciones g y h reflejan respectivamente:

g = el coste del mejor camino desde el nodo inicial hasta el actual.

h =estimación del coste involucrado en llegar desde el nodo actual a la meta. En esta función h es donde se explota, realmente, el conocimiento que se tiene sobre el dominio del problema.

La función combinada f , para un nodo N , representa, por tanto, una estimación del coste involucrado en llegar desde el nodo inicial hasta un nodo meta a través del camino que genera el presente nodo N. Si más de un camino generan el nodo N , el algoritmo A* registra el mejor.

Asumiendo que la estimación dada por h nunca excede la distancia real entre el nodo actual y la meta, el método A* siempre encuentra el camino más corto entre el nodo inicial y la meta. Esto se conoce como la admisibilidad del método A.*

Para implementar este método, cada nodo contendrá la misma información que para el método "El Mejor Primero" y se utilizaran las mismas listas OPEN y CLOSED.

ALGORITMO DE BÚSQUEDA A*

1.-Meter en OPEN el nodo inicial. Inicializar el valor g de este nodo a 0, el valor h a lo que corresponda, y el valor f a (0 + h). Inicializar CLOSED con la lista vacía.

2.-Hasta que se encuentre un nodo meta, repetir el siguiente procedimiento: Si no hay ningún nodo en OPEN , devolver fallo. En caso contrario coger el nodo de OPEN que tenga el menor valor para f. Llamar a este nodo MEJOR - NODO. Eliminarlo de OPEN. Ponerlo en CLOSED. Ver si MEJOR - NODO es un nodo meta. Si lo es devolver la solución (bien MEJOR - NODO o el camino creado entre el estado inicial y MEJOR - NODO , según lo que se quiera). En caso contrario, generar los sucesores de MEJOR - NODO. Para cada SUCESOR hacer lo siguiente:

a.- Poner el enlace-padre de SUCESOR apuntando a MEJOR-NODO.

b.- Evaluar g ( S U C E S O R ) = g ( M E J O R - N O D O ) + coste de ir desde MEJOR-NODO a SUCESOR.

c.- Ver si SUCESOR está ya en OPEN (es decir, ya ha sido generado pero no procesado):

i.- Si SUCESOR está ya en OPEN : llamar VIEJO a ese nodo. Hay que decidir si el enlace-padre de VIEJO debe cambiarse para apuntar a MEJOR - NODO. Este debe ser el caso cuando el camino que acabamos de encontrar hasta SUCESOR es más "barato" que el camino ya existente hasta VIEJO ( SUCESOR y VIEJO son el mismo nodo en el grafo). Para ello se comparan los valores g de SUCESOR y VIEJO. Si VIEJO es más barato (o igual), no hacer nada. Si, por el contrario, SUCESOR es más barato, cambiar el enlace-padre de VIEJO para apuntar a MEJOR - NODO , registrar el nuevo camino más barato en g(viejo) y actualizar f(VIEJO). Añadir VIEJO a la lista de sucesores de MEJOR - NODO.

Ejemplo:

¿Es posible aplicar el método de búsqueda A* en este "mapa de carreteras"?

Si tenemos la función f(N) = g(N) + h(N) donde:

g(N) = menor distancia real desde el inició hasta N. h(N) = menor distancia estimada desde N hasta la meta.

Mediante las coordenadas X, Y de cada nodo se puede calcular la distancia entre cada par de nodos, luego sí podemos hallar la g(N). Igualmente podemos estimar la "distancia en línea recta" desde N hasta la meta, por lo tanto, también se puede hallar h(N). Por consiguiente, podemos aplicar el método de A*.

Solución:

1.- Hay un único nodo de OPEN, el origen A.

OPEN Å A

P(A) = NULL g(A) = 0 h(A) = √ 173 f(A) = √ 173

quedando al final de esta primera etapa: OPEN = A

CLOSED =NIL

2.- A ≠ Meta y además es el único nodo en OPEN luego,

CLOSED Å A Generamos los sucesores de A

B, C ∉ OPEN v CLOSED

P(B) = A P(C) = A

g(B) = g(A) + dist (A - B) g(C) = g(A) + dist (A - C) = 0+√10 =√ 10 = 0+√ 20

h(B) = √ 109 h(C) = √ 81

f(B) = √10 + √109 = 13.6 f (C) = √20 + √81 = 13.

OPEN Å B OPEN Å C

quedando al final-de esta etapa:

OPEN Å B, C

CLOSED Å A

3.- f(C) < f(B) luego metemos C a CLOSED

CLOSED Å C

generamos los sucesores de C, que en este caso es únicamente D

D ∉OPEN v CLOSED

P(D) = C

g(D) = g(C) + dist(C - D) = √20+√8=7.

h(D)= √ 53

f(D)=7.3+√53=14.

OPEN Å D

E ∉ OPEN v CLOSED F ∉ OPEN v CLOSED P(E) = D P(F) = D

g(E) = g(D) + dist (D - E) g(F) = g(D) + dist (D - F) = 6.32 + √37 = 12.4 =6.32 + √8=9.

h(E) = √ 10 h(F) = √25 = 5

f(E) =12.4 + √10 = 15.56 f(F) = 9.15+

OPEN Å E OPEN Å F

quedando al final de esta etapa:

OPEN Å E, F CLOSED Å A, B, D

6.- f(F) < f(E), por lo tanto, metemos F en CLOSED

CLOSED Å F

generamos los sucesores de F, siendo en este caso solo G

G ∉ OPEN v CLOSED P(G) = F

g(G) = g(F) + dist (F - G)

= 9.15 + 5 = 14.

h(G) = 0 f(G)=14.15+0=14. OPEN Å G

quedando al final de esta etapa:

OPEN Å E, G CLOSED Å A, B, D, F

7.- f(G) < f(E) y además G es la meta luego metemos G a CLOSED

CLOSED Å G

Quedando al final de esta etapa:

OPEN Å E CLOSED Å A, B, D, F, G

Para, por fin, obtener el camino solución:

G P(G) = F P(F) = D P(D) = B P(B) = A