Búsquedas en Inteligencia Artificial: Búsqueda en profundidad, heurística y adversario
1. INTEGRANTE: Leonys Benitez
C.I:25459277
Búsquedas en Inteligencia Artificial
Búsqueda sin información del dominio (a ciegas)
Búsqueda de Amplitud y Anchura Búsqueda en profundidad Búsqueda general en grafos
Definición Es un algoritmo de búsqueda no
informada utilizado para recorrer o
buscar elementos en un grafo (usado
frecuentemente sobre árboles)
Se quiere es recorrer desde la
raíz hasta los nodos extremos u
hojas por cada una de las ramas.
En este caso los niveles de cada
nodo no son importantes.
Representa un conjunto de nodos
unidos en una red. Si dos nodos
están unidos, al viajar de uno a
otro se considerara sucesor el
nodo al que nos movemos, y
predecesor el nodo del que
venimos. Además, normalmente
existirá un coste vinculado al
desplazamiento entre nodos. Un
algoritmo de búsqueda tratará de
encontrar un camino optimo entre
dos nodos como por ejemplo un
camino que minimice el coste de
desplazamiento, o el número de
pasos a realizar
Características - Procedimientos de búsqueda nivel a
nivel.
- Para cada uno 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.
- Se implementa con una estructura
-La búsqueda se realiza por una
sola rama del árbol hasta
encontrar una solución o hasta
que se tome la decisión de
terminar la búsqueda por esa
dirección.
- Terminar la búsqueda por una
dirección se debe a no haber
posibles operadores que aplicar
2. FIFO. sobre el nodo hoja o por haber
alcanzado un nivel de
profundidad muy grande.
- Si esto ocurre se produce una
vuelta atrás (backtracking) y se
sigue por otra rama hasta visitar
todas las ramas del árbol
si es necesario.
Aplicación Se comienza en la raíz (eligiendo algún
nodo como elemento raíz en el caso de
un grafo) y se exploran todos los
vecinos de este nodo. A continuación
para cada uno de los vecinos se
exploran sus respectivos vecinos
adyacentes, y así hasta que se recorra
todo el árbol
Se aplica de forma recursiva, de
lo contrario tendríamos que usar
en lugar de una cola una pila,
pero con la recursión nos
ahorramos la necesidad de
utilizar esta estructura
explícitamente y en lugar de ello
nos valemos de la pila de
recursión.
En muchas aplicaciones es
necesario visitar todos los
vértices del grafo a partir de un
nodo dado. Algunas aplicaciones
son:
Encontrar ciclos
Encontrar componentes conexas
Encontrar árboles cobertores
Ventajas Si existe la solución, la encuentra en la
menor profundidad posible
Tiene menor complejidad espacial
que búsqueda en amplitud.
Se puede determinar en un
tiempo fijo y constante si un
enlace(arco) pertenece o no al
grafo.
Es fácil determinar si existe o no
un arco o enlace, solo se debe
posicionar en la matriz.
Es fácil determinar si existe un
ciclo en el grafo, basta multiplicar
la matriz por ella misma n veces
hasta obtener la matriz nula(no
hay ciclos) o bien una sucesión
periódica de matrices(hay ciclo)
Desventajas -Explosión combinatoria aparece
frecuentemente debido a la alta
-Se pueden encontrar soluciones
que están más alejadas de la
Se requiere un almacenamiento
|v|*|v|. Es decir O(n2).
3. complejidad espacial y temporal de esta
técnica.
raíz que otras.
- Existe el riesgo de presencia de
bucles infinitos.
Solo al leer o examinar la matriz
puede llevar un tiempo de O(n2).
Algoritmo asociado Sea G=(V,A) un grafo conexo; V´=V un
conjunto de vértices, A` un vector vació
y P un vector de arcos inicialmente
vació y P un vector auxiliar inicialmente
vació:
Se introduce el vértice inicial en P y se
elimina del conjunto
Mientras V` no sea vació repetir los
puntos 3 y 4. En otro caso parar.
Se toma el primer elemento P como
vértice del activo
Si el vértice activo tienen algún vértice
adyacente que se encuentre en V`:
Se toma el de menor índice
Se inserta en P como último elemento
Se elimina de V
Se inserta en A` el arco que le une con
el vértice activo
Si el vértice activo no tiene adyacentes
se elimina de P.
Sea G=(V,A) un grafo conexo;
V´=V un conjunto de vértices, A`
un vector vació y P un vector de
arcos inicialmente vació y P un
vector auxiliar inicialmente vació:
Se introduce el vértice inicial en P
y se elimina del conjunto
Mientras V` no sea vació repetir
los puntos 3 y 4. En otro caso
parar.
Se toma el primer elemento P
como vértice del activo
Si el vértice activo tienen algún
vértice adyacente que se
encuentre en V`:
Se toma el de menor índice
Se inserta en P como último
elemento
Se elimina de V
Se inserta en A` el arco que le
une con el vértice activo
Si el vértice activo no tiene
adyacentes se elimina de P.
- Abiertos:= (nodo_inicial);
Resuelto:= FALSO;
- Mientras que abierto no es
vacia y NO.
RESUELTO
- N:= quitar elementos
abiertos.
4. Búsqueda Heurística
Búsqueda “Primero el
mejor”
Búsqueda en Haz Algoritmo A*
Definición Elegir como siguiente nodo
aquel con mayor función de
evaluación.
Elegir un conjunto de nodos como
los siguientes a expandir, y
hacerlo de forma irrevocable.
Ponderar a la vez lo cerca que
estamos del nodo meta y lo lejos
que estamos del nodo inicial.
Características Analizar preferentemente los
nodos con heurística más
baja.
Ordenar la cola de abiertos
por heurística, de menor a
mayor
Guardar sólo un nodo en memoria
puede parecer una reacción
extrema al problema de limitación
de memoria.
En su forma más simple, puede
sufrir una carencia de diversidad
entre los k estados (concentrados
en una pequeña región del
espacio de estados) y volverse en
poco más que una versión cara de
la AdC.
Se clasifica dentro de
los algoritmos de búsqueda en
grafos.
El algoritmo A* encuentra,
siempre y cuando se cumplan
unas determinadas condiciones.
el camino de menor coste entre un
nodo origen y uno objetivo
Aplicación Nodo de búsqueda: estado +
camino + heurística
Funciones de acceso:
ESTADO(NODO),
CAMINO(NODO) y
HEURISTICA-DEL-
NODO(nodo)
Comienza con k estados
generados aleatoriamente.
– En cada paso se generan todos
los sucesores de los k estados.
– Se comprueba si alguno es un
objetivo.
– Si no, se seleccionan los k
mejores sucesores de la lista
completa y se repite el proceso.
Este algoritmo utiliza una función
de evaluación f(n) = g(n) + h'(n),
donde h'(n) representa el valor
heurístico del nodo a evaluar
desde el actual, n, hasta el final, y
g(n), el costo real del camino
recorrido para llegar a dicho nodo,
n. A* mantiene dos estructuras de
datos auxiliares, que podemos
denominar abiertos, implementado
como una cola de
prioridad ordenada por el valor f(n)
de cada nodo, y cerrados, donde
se guarda la información de los
5. nodos que ya han sido visitados.
En cada paso del algoritmo, se
expande el nodo que esté primero
en abiertos, y en caso de que no
sea un nodo objetivo, calcula la
f(n) de todos sus hijos, los inserta
en abiertos, y pasa el nodo
evaluado a cerrados.
Ventajas no depende en exceso de la
función de evaluación.
más permisible. soluciones más cercanas a la
raíz.
Desventajas excesiva complejidad
espacial, pues se deben
guardar todos los nodos
abiertos.
en caso de que el sistema sea
irrevocable, este método no actúa
con eficacia
la función de evaluación se
complica
Algoritmo asociado Inicio 1. LE :=
((O,Estado_Inicial)); LV:=();
Test de Parada 2. Si ( LE = () )
entonces Escribir(“no hay
solución”), PARE; 3. (F,P):=
Mejor(LE) 4. Si ( P es Meta )
entonces
Determinar_Solucion, PARE;
Genera Sucesores: 5.
Adiciona_ultimo((F,P), LV); 6.
Elimina_mejor(LE); 7. Para
(Nodo (Hijos(P) - LV))
Adicionar_primero((P,Nodo),
LE); 8. Ir a 2
Función BUSQUEDA-HAZ-
LOCAL(problema, K) returns una lista
de estados
Entrada: problema, un problema
K ,tamaño haz
static:siguiente,sucesor,población,lista
de nodos
begin población <-HACER-LISTA-
NODOS(ESTADOS-INICIALES-
ALEATORIOS(problemas,K))
siguiente <-0
for cach nodo E población do
sucesores <-HACER-LISTA-
NODOS(EXPANDIR(nodos))
end
población <- K mejores elementos
siguientes
endwhile
return(poblacion)
Este algoritmo es similar al
algoritmo “primero el mejor” con la
única diferencia que la función
evaluadora es definido como
sigue: Donde: g(e) es la menor
distancia (costo) desde el “estado
inicial” hasta “e” h(e) es una
sobre-estimación de la menor
distancia (costo) de “e” al estado
meta tal que h(estado meta)=0. f
(e) g(e) h(e)
6. end
Búsqueda con Adversario
Metodo Minimax Metodo de Poda
Definición Minimax es un método de decisión para
minimizar la pérdida máxima esperada en
juegos con adversario y con información
perfecta.
Se aplica en técnicas con adversos y se usa
para reducir el coste computacional de
MINIMAX podando las ramas que nos llevan
a una solución peor que las ya encontradas.
Características Minimax es un algoritmo recursivo.
El funcionamiento de Minimax puede
resumirse como elegir mejor movimiento para
ti mismo suponiendo que tu contrincante
escogerá el peor para ti.
Puede suspenderse la exploración por debajo
de un nodo en cualquiera de los casos
siguientes:
A. Por debajo de cualquier nodo min
que tenga valores beta
menores o iguales a los valores de
cualquier nodo max ascendiente suyo.
B. Por debajo de un nodo max que
tenga un valor alfa mayor o igual al
valor beta de cualquier nodo min
ascendiente.
Aplicación -Generación del árbol de juego. Se
generarán todos los nodos hasta llegar a un
estado terminal.
-Cálculo de los valores de la función de
evaluación para cada nodo terminal.
-Calcular el valor de los nodos superiores a
partir del valor de los inferiores.
-Desde los nodos de nivel n, buscar la mejor
situación para mi y la peor para mi rival.
Elegir la jugada valorando los valores que
han llegado al nivel superior, es decir,
obtengo la mejor rama.
Es una técnica muy utilizada en programas
de juegos entre adversarios como el ajedrez.
Se aplica en espacios de estados
demasiados grandes como para analizar
todos los nodos
7. Ventajas El algoritmo tiene la capacidad de aprender
de acuerdo a una base de datos histórica de
movimientos realizados, es decir, aprende
con la experiencia.
Aprende del oponente y al tiempo le da
ventaja.
La eficacia de la poda alfa-beta depende del
orden en el que se examinan los sucesoras.
La poda no afecta el resultado final
Desventajas Algoritmo de complejidad elevada a la hora
de implementar.
Solo funciona para enfrentar un oponente a la
vez
Es posible que no encuentre una solución
aunque exista
Algoritmo asociado El algoritmo explora los nodos del árbol
asignándoles un valor númerico mediante
una función de evaluación, empezando por
los nodos terminalesy subiendo hacia la raíz.
La función de evaluación definirá lo buena
que es la posición de un jugador cuando lo
alcanza.
Función alfa-beta (nodo//en nuestro caso el
tablero, profundidad, a,β, jugador)
Si nodo es un nodo terminal o profundidad=0
Devolver el valor heurístico del nodo
Si jugador 1 para cada hijo de nodo
a:= max(a, alfa-beta(hijo, profundidad-1, a,
β≤a
romper (*poda β*)
devolver a
si no
para cada hijo de nodo
β:= min(β, alfa-beta (hijo, profundidad-1,a,β,
jugador 1))
siβ≤a