1. REPUBLICA BOLIVARIANA DE VENEZUELA
MINISTERIO DEL PODER POPULAR PARA LA DEFENSA
UNIVERSIDAD NACIONAL EXPERIMENTAL POLITECNICA
DE LA FUERZA ARMADA NACIONAL
UNEFA-LARA
METODOS DE BUSQUEDA
PARTICIPANTE:
ALFREDO ALEJOS
CI:22329360
PROF: EDECIO FREITEZ
BARQUISIMETO, ABRIL 2019
2. Búsqueda en Anchura Búsqueda en Profundidad
Búsqueda General en
Grafos
Descripción
Es un algoritmo de búsqueda sin
información, que expando y examina
todo los nodos de un árbol
sistemáticamente para buscar una
solución.
Esta técnica su fin es recorrer todos
los nodos del mismo nivel que de
donde se encuentra recorre todo
siempre la posición ser el inicio y
corre final el objetivo buscado.
Cualquier proceso de búsqueda debe
tener la posibilidad de terminar si
un nuevo esta ha sido generado y
expandido previamente.
Características
Búsqueda nivel a nivel.
Para cada una de los nodos de un
nivel se aplican todos los posibles
operadores.
No se expande ningún nodo de un
nivel antes de haber expandido
todos los del nivel anterior.
La búsqueda se realiza por una sola
rama de árbol hasta encontrar una
solución.
En general maneja dos listas: Abierta
y cerrada.
EL grafo se va generando durante la
ejecución de la primera.
Aplicación
Usado en cualquier tipo de grafos en
donde se requiera buscar elementos.
Es usado en espacios de estados en
donde las acciones están limitadas.
Usado para la resolución de
problemas en general.
Ventajas
Si existe la solución, la encuentra en
la menor profundidad posible.
Tiene menor complejidad espacial
que búsqueda en amplitud.
Evita repetir la exploración de
caminos.
Permite reanudar caminos
abandonados.
Desventajas
El alto orden de complejidad
computacional, hace que, de no
mantenerse muy limitados los
parámetros del problema, crezcan
rápidamente los requerimientos y se
vuelvan inaceptables.
Puede caer en ciclos infinitos. Expande muchos nodos inútiles.
Algoritmo Asociado
BFS(grafo G, nodo_fuente s)
{
// recorremos todos los vértices del grafo inicializándolos a NO_VISITADO,
// distancia INFINITAy padre de cada nodo NULL
for u V[G] do∈
{
estado[u] =NO_VISITADO;
distancia[u] =INFINITO; /* distancia infinita siel nodo no es alcanzable */
padre[u] =NULL;
}
estado[s] = VISITADO;
distancia[s] =0;
padre[s] =NULL;
CrearCola(Q); /* nos aseguramos que la cola está vacía */
Encolar(Q, s);
while !vacia(Q) do
{
// extraemos el nodo u de la cola Q y exploramos todos sus nodos adyacentes
u = extraer(Q);
for v adyacencia[u] do∈
{
if estado[v] ==NO_VISITADOthen
{
estado[v] =VISITADO;
distancia[v] =distancia[u] +1;
padre[v] = u;
Encolar(Q, v);
}
}
}
}
DFS(grafo G)
PARA CADA vértice u V[G] HACER∈
estado[u] NO_VISITADO←
padre[u] NULO←
tiempo 0←
PARA CADA vértice u V[G] HACER∈
SI estado[u] = NO_VISITADO ENTONCES
DFS_Visitar(u,tiempo)
DFS_Visitar(nodo u, int tiempo)
estado[u] VISITADO←
tiempo tiempo + 1←
d[u] tiempo←
PARA CADA v Vecinos[u] HACER∈
SI estado[v] = NO_VISITADO ENTONCES
padre[v] u←
DFS_Visitar(v,tiempo)
estado[u] TERMINADO←
tiempo tiempo + 1←
f[u] tiempo←
Crear dos listas vacias, Abiertos y Cerrados
Meter el nodo origen 0 en la lista Abiertos
Repetir
Si(Abiertos esta vacia) entonces
Devolver error
Selecciónar el primer nodo, N de Abiertos y ponerlo en Cerrados
Si (N == Destino) entonces
Devolver N
Expandir(N) obteniendo un conjunto de sucesores
Para cada ( S E { Sucesores{N}})
Si (S Abierta y S Cerrada) entoncesɆ Ɇ
Guarda N como el predecesor de S
Meter S en la lista Abiertos
Hasta que el nodo destino se haya encontrado
3. Búsqueda “Primero el mejor” Búsqueda en Haz Algoritmo A* Exploración de Grafos Y/O
Descripción
Crea una agenda de un nodo
elemento (el nodo raíz) hasta
que la agenda esta vacía o se
alcance la meta si el primer
elemento es la meta entonces
acaba sino elimina el primer
elemento y añade sus sucesores
a la agenda ordenada todos los
elementos de la agenda.
Elegir un conjunto de nodos
como los siguientes a expandir,
y hacerlo de forma irrevocable.
Es el único que garantiza, sea
cual sea la función heurística,
que se tiene en cuenta el camino
recorrido y por ende es mejor
que la versión más extendida de
“primer el mejor”, aquella que
solo considera la distancia a la
meta.
Los nodos de un grafo Y/O
representan subproblemas a
resolver originados a partir de
un problema inicial.
Características
Estimación de la “deseabilidad”.
Expandir el nodo más deseable.
Permite solo que un número fijo
de los nodos más prometedores
es generado en cada paso sean
expandidos mas adelante.
Realiza la busque informada
deteniendo en cuenta
determinando ciertos factores.
EL algoritmo no desarrolla un
camino por interacción.
Descompone en subproblemas,
y así sucesivamente, hasta
conseguir problemas lo
suficientemente trivial.
Aplicación
Minería de datos.
Medicina humana.
Aviones y Transporte.
Video Juegos de estrategias.
Procesamiento de imágenes.
Es usado en donde la heurística
es admisible, donde el coste de
ir al nodo objetivo no
sobreestime el coste de alcanzar
el nodo objetivo.
Usado en problemas que
puedan ser divido en problemas
más pequeño
Ventajas
No depende de una función de
evaluación.
Disminuye la cantidad de nodos
a generar.
Solución más cercana la raíz. Puede resolver problemas
mucho mas complejos.
Desventajas
Excesiva complejidad espacial. No es óptimo porque no
consigue la solución más
óptima.
La función de evaluación se
complica.
Dos problemas diferentes
pueden generar un subproblema
común.
Algoritmo Asociado
1. Sea L una lista de nodos iniciales.
2. Sea N el nodo más cercano a la meta
(el mejor). Si L esta vacía, falla.
3. Si N es la meta. Regrese la trayectoria
desde el nodo inicial al nodo N.
4. Si N no es meta. Buscar los hijos de N,
colocarlos en L, etiquetándolos con la
trayectoria desde el nodo inicial.
Retome al paso 2.
Función Búsqueda-Haz(problema, k) returns una lista de estados
Entrada: problema, un problema k, tamaño del haz
Static: siguiente, sucesores, población, listas de nodos
Begin
Población Hacer-lista-nodos(estados-iniciales-aleatorios(problema,k))←
While(not condicionTerminacion) do
Siguiente Ø←
For each nodo E población do
Sucesores hacer-lista-nodos(Expandir(nodo))←
Siguiente Siguiente sucesores← ᵕ
End
Población k mejores elementos de siguiente←
Endwhile
Return (población)
end
ABIERTOS := [INICIAL] //inicialización
CERRADOS := []
f'(INICIAL) := h'(INICIAL)
repetir
si ABIERTOS = [] entonces FALLO
si no // quedan nodos
extraer MEJORNODO de ABIERTOS con f' mí-nima
// cola de prioridad
mover MEJORNODO de ABIERTOS a CERRADOS
si MEJORNODO contiene estado_objetivo entonces
SOLUCION_ENCONTRADA := TRUE
si no
generar SUCESORES de MEJORNODO
para cada SUCESOR hacer TRATAR_SUCESOR
hasta SOLUCION_ENCONTRADA o FALLO
4. Método Minimax Método de Poda
Descripción
Es un método de decisión para minimizar
la perdida máxima esperada en un juego
con adversario y con información
perfecta. Minimax es un algoritmo
recursivo.
Es una técnica de búsqueda que reduce el
número de nodos evaluados en árbol de
juego por el algoritmo minimax.
Características
El método minimax es impracticable
exeto en supuestos sencillos.
Realizar la búsqueda completa requeriría
cantidades excesivas de tiempo y
memoria.
El número de estados a explorar es
exponencial al número de movimientos.
Partiendo de este hecho la técnica de
poda trata de eliminar partes del árbol.
Aplicación
Usado ampliamente en juegos en donde
se necesita saber cuáles son las posibles
opciones a elegir en una partida.
Utilizada en problemas donde el factor de
ramificación ya sea muy elevado y sus
costes sean muy prohibitivos.
Ventajas
Eficacia en cuanto al uso de memoria. Ahorra algo de espacio y de tiempo
computacional.
Desventajas
No realiza un control estricto de la
memoria.
Es dependiente de la memoria de la que
disponga nuestro ordenador.
Algoritmo Asociado
1. Generación del árbol de juego. Se generarán todos
los nodos hasta llegar a un estado terminal.
2. Cálculo de los valores de la función de utilidad
para cada nodo terminal.
3. Calcular el valor de los nodos superiores a partir
del valor de los inferiores. Según nivel si es MAX o
MIN se elegirán los valores mínimos y máximos
representando los movimientos del jugador y del
oponente, de ahí el nombre de minimax.
4. Elegir la jugada valorando los valores que han
llegado al nivel superior.
función alfa-beta(nodo //en nuestro caso el tablero, profundidad, α, β, jugador)
si nodo es un nodo terminal o profundidad = 0
devolver el valor heurístico del nodo
si jugador1
para cada hijo de nodo
α := max(α, alfa-beta(hijo, profundidad-1, α, β, jugador2))
si β≤α
romper (* poda β *)
devolver α
si no
para cada hijo de nodo
β := min(β, alfa-beta(hijo, profundidad-1, α, β, jugador1))
si β≤α
romper (* poda α *)
devolver β