Este documento describe diferentes métodos de búsqueda en inteligencia artificial, incluyendo búsquedas ciegas, informadas e informadas adversarias. Define búsquedas en anchura, profundidad y generales en grafos, así como búsquedas heurísticas como "primero el mejor", en haz y A*. También cubre la búsqueda con adversario usando los métodos minimax y poda alfa-beta.
1. Métodos de búsqueda
Republica Bolivariana de Venezuela
Ministerio del Poder Popular para la Defensa
Universidad Nacional Experimental Politécnica
De la Fuerza Armada
Participante:
Velásquez Nora
C.I: 17.033.914
Facilitador: Edecio F
Asignatura: Inteligencia Artificial
Sección: 9N01IS
2. Tipos Definición Características Aplicación
Búsquedas Sin
Información del
Dominio (A
Ciegas)
Búsqueda en Amplitud o
Anchura
Es una estrategia sencilla en la
que se expande primero el
nodo raíz, a continuación se
expanden todos los sucesores
del nodo raíz, después sus
sucesores, etc.
se expanden todos los nodos a una
profundidad en
el árbol de búsqueda antes de expandir
cualquier nodo del próximo nivel.
La búsqueda primero en anchura se
puede implementar llamando a la
BÚSQUEDA-
ÁRBOLES con una frontera vacía que sea
una cola primero en entrar primero en
salir
(FIFO), asegurando que los nodos
primeros visitados serán los primeros
expandidos.
Ideal para problemas
pequeños en donde el coste
de las acciones sean
realmente pequeñas.
Búsqueda en
Profundidad
Siempre expande el nodo
más profundo en la
frontera actual del árbol de
búsqueda.
La búsqueda procede inmediatamente
al nivel más profundo del árbol de
búsqueda, donde los nodos no tienen
ningún sucesor.
Esta estrategia puede implementarse
por la BÚSQUEDA-ÁRBOLES con
una cola último en entrar primero en
salir (LIFO)
Es aplicado en problemas en
donde en el rango de
acciones este limitado.
Búsqueda General en
Grafos
Puede determinar si un
nuevo estado ha sido
generado y expandido
previamente.
Maneja dos listas ABIERTAS Y
CERRADAS.
Si en algun momento necesita
retroceder a un nodo abandonado
solo se consulta la lista abierta.
Aplicado en casi todos los
algoritmos de búsquedas,
3. Tipos Ventajas Desventajas Algoritmo asociado
Búsquedas Sin
Información del
Dominio (A
Ciegas)
Búsqueda en Amplitud o
Anchura
La búsqueda primero en
anchura es óptima si el costo
del camino es una
función no decreciente de la
profundidad del nodo
La complejidad en espacio
tiempo es exponencial.
1.Crear una lista de nodos llamado abierta.
2. Hasta que ABIERTA este vacía o se encuentre meta:
2.1 Extraer el primer nodo de ABIERTA y llamarlo m.
2.2 Expandir m y para cada operador:
2.2.1 Aplicar operador a m y obtener un nuevo estado.
2.2.2 Si el estado es meta salir del proceso y devolver el estado
2.2.3 Incluir un nueva estado al final de ABIERTA.
Búsqueda en Profundidad
La búsqueda primero en
profundidad tiene unos
requisitos muy modestos de
memoria
El inconveniente de la
búsqueda primero en
profundidad es que puede
hacer una elección equivocada
y obtener un camino muy largo
(o infinito)
1. Crea una lista llamada ABIERTA y asignar el nodo raíz.
2. Hasta que se encuentre una meta o devuelve fallo:
2.1 Si ABIERTA esta vacía terminar con fallo, sino continuar.
2.2 Extraer el primero nodo de ABIERTA y llamarlo m.
2.3 Si la profundidad de m es igual lp(limite de profundidad) regresar a 2 sino
continuar.
2.4 Expandir m creando punteros hacia este nodo desde todos sus
sucesores.
2.4.1 Si algún sucesor de m es meta, abandonar el proceso, y devuelve
solución.
2.4.2 Si algún sucesor de m se encuentra en un callejón sin salida eliminar
de ABIERTA.
Búsqueda General en
Grafos
Indica los caminos de menor
coste.
Expande muchos nodos
innecesarios.
1. Crear un grafo general y una lista ABIERTA y asignarle el nodo raíz.
2. Crear una lista CERRADA vacía.
3. Hasta que se encuentre una meta o se devuelva fallo:
3.1 Si abierta esta vacía, devolver fallo.
3.2 Eliminar el primer nodo de abierta, llamarlo m e introducirlo en cerrada.
3.3 Expandir m:
3.3.1 Generar el conjunto m de todos sus sucesores que no sean antecesores
e introducirlos como sucesores de m.
3.3.2 Si algún miembro de m es meta, abandonar el proceso y devolver la
solución.
3.3.3 Poner un puntero a m desde los nuevos nodos generado e incluirlos en
abierta.
3.3.4 Para cada nodo de m que este en abierta o en cerrada, decide si
redirige o no su puntero a m.
3.3.5 Para cada nodo de m que estuviese en cerrada, decidir si sus
descendientes se redirigen o no sus punteros.
3.4 Reordenar abierta aplicando algún criterio.
4. Tipos Definición Características Aplicación
Búsquedas
Informadas
(Heurísticas
)
Búsqueda
“Primero el
Mejor”
Trata de expandir el nodo
más cercano al objetivo,
alegando que probablemente
conduzca rápidamente a una
solución.
Evalúa los
nodos utilizando solamente la función heurística: f(n)
+ h(n).
primero el mejor se parece a la búsqueda primero en
profundidad en el modo que prefiere seguir un
camino hacia el objetivo, pero volverá atrás cuando
llegue a un callejón sin salida.
Aplicado a problemas en
donde el coste para llegar a la
solución esta en un único
camino.
Búsqueda en Haz
Guarda la pista de k estados
(no sólo uno). Comienza con
estados generados
aleatoriamente.
En cada paso, se generan
todos los sucesores de los k
estados.
La información útil es pasada entre los k hilos
paralelos de búsqueda.
Usado en algoritmos genéticos
en donde cada nodo se
comporta como un padre
teniendo dos hijos o mas
siendo estos mismos los
nodos sucesores.
Algoritmo A*
Evalúa los nodos
combinando g(n), el
coste para alcanzar el nodo,
y h(n), el coste de ir al nodo
objetivo:
f(n) g(n) h(n)
Si tratamos de encontrar la solución más barata, es
razonable intentar primero el nodo
con el valor más bajo de g(n) h(n).
Resulta que esta estrategia es más que razonable:
con tal de que la función heurística h(n) satisfaga
ciertas condiciones, la búsqueda A*
es tanto completa como óptima.
Es usado solo en problemas
con heurística admisible,
donde el coste estimado de ir
al nodo objetivo no sobrepase
el coste de ir al nodo objetivo.
Exploración de
Grafos Y/O
Se empieza con un nodo
inicial que corresponde al
nodo superior del grafo, y
luego se subdivide el
problemas mas pequeños
denominado Y/O.
Los nodos O son las alternativas a la solución.
Los nodos Y son los diferentes subproblemas a
resolver.
Aplicado en problemas que
pueden convertirse en
subproblemas y a su vez estos
garanticen llegar a la solución.
5. Tipos Ventajas Desventajas Algoritmo asociado
Búsquedas
Informadas
(Heurísticas)
Búsqueda “Primero
el Mejor”
La heurística
provoca nodos innecesarios para
expandir.
Sufre los mismos defectos que la
búsqueda primero
en profundidad, no es óptima, y es
incompleta (porque puede ir hacia
abajo en un camino infinito y
nunca volver para intentar otras
posibilidades).
función BÚSQUEDA-RECURSIVA-PRIMERO-MEJOR(problema) devuelve una solución, o fallo
BRPM(problema, HACER-NODO(ESTADO-INICIAL[problema]),∞)
función BRPM(problema,nodo,f_límite) devuelve una solución, o fallo y un nuevo límite
f-costo
si TEST-OBJETIVO[problema](estado) entonces devolver nodo
sucesores ← EXPANDIR(nodo,problema)
si sucesores está vacío entonces devolver fallo, ∞
para cada s en sucesores hacer
f [s] ← max(g(s) h(s), f [nodo])
repetir
mejor ← nodo con f-valor más pequeño de sucesores
si f [mejor] f_límite entonces devolver fallo, f [mejor]
alternativa ← nodo con el segundo f-valor más pequeño entre los sucesores
resultado,f [mejor] ← BRPM(problema,mejor,min( f_límite,alternativa))
si resultado fallo entonces devolver resultado
Búsqueda en Haz Reduce la cantidad nodos a
generar.
No consigue la solución mas
optima.
funciónBUSQUEDA-HAZ-LOCAL(problema, k) returnsuna lista de estados
entrada: problema, un problema
k, tamaño del haz
static:siguiente, sucesores, población, listas de nodos
begin
poblaciónHACER-LISTA-NODOS(ESTADOS-INICIALES-ALEATORIOS(problema,k))
while (notCondicionTerminación)do
siguiente∅
foreachnodo poblacióndo∈
sucesoresHACER-LISTA-NODOS(EXPANDIR(nodo))
siguiente siguiente sucesores∪
end
poblaciónkmejores elementos de siguiente
endwhile
return(población)
end
Algoritmo A*
A* es óptima si h(n) es una
heurística admisible, es decir, con
tal de que
la h(n) nunca sobrestime el coste
de alcanzar el objetivo.
En el espacio de búsqueda es
todavía exponencial
función BÚSQUEDA-A*(problema) devuelve solución o fallo
nodo-raíz ← CREAR-NODO-RAÍZ(problema)
frontera ← CREAR-PRIORIDAD()
frontera.AGREGAR(nodo-raíz)
explorada ← CREAR-CONJUNTO()
repetir
si frontera.ESTÁ-VACÍA() entonces devolver fallo
nodo ← frontera.POP()
si problema.ES-OBJETIVO(nodo.ESTADO) entonces devolver nodo
explorada.AGREGAR(nodo)
por cada acción en problema.ACCIONES(nodo.ESTADO) hacer
hijo ← CREAR-NODO-HIJO(problema, nodo, acción)
si hijo.ESTADO no está en explorada y
hijo.ESTADO no está en frontera.ESTADOS() entonces
frontera.AGREGAR(hijo)
sino
nodo-frontera ← frontera.BUSCAR(hijo.ESTADO)
si hijo.VALOR < nodo-frontera.VALOR entonces
nodo-frontera ← hijo
Exploración de
Grafos Y/O
Reduce la complejidad y si
encuentra una solución.
Es de complejidad exponencial.
6. Tipos Definición Características Aplicación
Búsqueda con
Adversario
Método Minimax En cada posible problema se
debe analizar las posibles
soluciones del otro jugador.
Minimiza las estrategias del
contrincante, y maximiza las del
agente.
Usado en juegos o en
situaciones en donde hay mas
de dos agentes compitiendo.
Método de Poda
Mejora el algoritmo minimax
ya que no mira todos los
nodos del árbol generado.
Las mismas que minimax pero solo
centrándose en los nodos que
posiblemente contengan la solución.
Al igual que minimax pero solo
en donde ya se considere que
el factor de ramificación va a
ser muy elevado.
7. Tipos Ventajas Desventajas Algoritmo asociado
Búsqueda con
Adversario
Método Minimax Tiene la capacidad de aprender
de lo que hace el oponente.
Cada posible estado debe ser
visitado dos veces.
MiniMax(estado):
- Es-Objetivo(estado) → Utilidad(estado)
- Jugador(estado) = MAX
maxacción[MiniMax(Resultado(estado, acción))]
- Jugador(estado) = MIN
minacción[MiniMax(Resultado(estado, acción))]
Método de Poda
Es muchas eficiente debido a
que este mismo usa mucho
menos variables.
Es muy probable de que el
algoritmo no consiga la solución
aun exista una.
función ALFA-BETA(problema)
devuelve acción
inicial ← problema.ESTADO-INICIAL
(accion, valor) ← VALOR-MAX(problema,
inicial,
–inifinito,
+infinito)
devolver accion
funcion VALOR-MAX(problema, estado, alfa, beta)
devuelve (accion, valor)
si problema.ES-OBJETIVO(estado) entonces
devolver problema.UTILIDAD(estado)
mayor-valor ← –infinito
mejor-accion ← nulo
por cada accion en problema.ACCIONES(estado) hacer
resultado ← problema.RESULTADO(estado, accion)
utilidad ← VALOR-MIN(problema, resultado, alfa, beta)
si utilidad > mayor-valor entonces
mayor-valor ← utilidad
mejor-accion ← accion
si mayor-valor >= beta entonces
devolver (mejor-accion, mayor-valor)
si mayor-valor > alfa entonces
alfa ← mayor-valor
devolver (mejor-accion, mayor-valor)
funcion VALOR-MIN(problema, estado, alfa, beta)
devuelve (accion, valor)
si problema.ES-OBJETIVO(estado) entonces
devolver problema.UTILIDAD(estado)
menor-valor ← +infinito
mejor-accion ← nulo
por cada accion en problema.ACCIONES(estado) hacer
resultado ← problema.RESULTADO(estado, accion)
utilidad ← VALOR-MAX(problema, resultado, alfa, beta)
si utilidad < menor-valor entonces
menor-valor ← utilidad
mejor-accion ← accion
si menor-valor <= alfa entonces
devolver (mejor-accion, mayor-valor)
si menor-valor > beta entonces
beta ← menor-valor
devolver (mejor-accion, menor-valor)