








Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Encuentra los documentos específicos para los exámenes de tu universidad
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
Asignatura: Sistemas Basados en el Conocimiento, Profesor: , Carrera: Ingeniería Informática, Universidad: UAX
Tipo: Apuntes
1 / 14
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!









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
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.
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:
Resolver utilizando el método de mejor-primero:
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
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:
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.
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:
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.
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+
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
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