0% encontró este documento útil (0 votos)
182 vistas29 páginas

Búsqueda No Informada e Informada

El documento aborda los conceptos de búsqueda no informada e informada en algoritmos de búsqueda, describiendo la estructura de árboles y grafos para encontrar soluciones desde un estado inicial hasta un estado objetivo. Se explican diferentes estrategias de búsqueda, incluyendo búsqueda de anchura, costo uniforme, profundidad, y métodos heurísticos como A*, destacando sus características, ventajas y desventajas. Además, se menciona la implementación de estos algoritmos en Python y se evalúa su rendimiento en términos de completitud, optimalidad, complejidad temporal y espacial.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
182 vistas29 páginas

Búsqueda No Informada e Informada

El documento aborda los conceptos de búsqueda no informada e informada en algoritmos de búsqueda, describiendo la estructura de árboles y grafos para encontrar soluciones desde un estado inicial hasta un estado objetivo. Se explican diferentes estrategias de búsqueda, incluyendo búsqueda de anchura, costo uniforme, profundidad, y métodos heurísticos como A*, destacando sus características, ventajas y desventajas. Además, se menciona la implementación de estos algoritmos en Python y se evalúa su rendimiento en términos de completitud, optimalidad, complejidad temporal y espacial.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 29

Búsqueda no informada e informada

Dr. Omar Mendoza Montoya

31/08/2021
Búsqueda de árbol
• El objetivo en un algoritmo de búsqueda es generar una
secuencia de acciones comenzando del estado inicial, para llegar
al estado objetivo.

• En la búsqueda de árbol, se construye un árbol de búsqueda


teniendo como raíz el estado inicial. Los siguientes nodos
indican los estados posibles a alcanzar al realizar las distintas
acciones disponibles.

• El proceso se repite hasta que se identifique un estado objeto.

2
Búsqueda de árbol

Fuente: Artificial intelligence: A modern approach


3
Búsqueda de árbol
Estado inicial
Arad

Después de expander el nodo

Arad

Sibiu Timisoara Zerind

4
Búsqueda de árbol
Arad

Sibiu Timisoara Zerind

Rimnicu
Fagaras Lugoj
Vilcea Oradea

5
Búsqueda de árbol
• Cada nodo corresponde a un estado específico. El estado inicial es el nodo raíz.

• Un nodo puede tener un padre y uno o más hijos.

• El nodo raíz no tiene nodos padre.

• Un nodo con ningún hijo es llamado nodo hoja.

• A través de expandir los nodos hojas, se genera una secuencia de acciones y sus
correspondientes estados. Si uno de los nodos es el estado objetivo, se detiene la
expansión, de lo contrario, continuamos expandiendo el resto de las hojas.

• Al conjunto de los nodos hoja para expansión se le conoce como la frontera.


6
Búsqueda de árbol
function tree_search returns a solution or failure
initialize the frontier using the initial state
while(true)
if the frontier is empty then
return failure
choose a leaf node and remove it from the frontier
if the node contains a goal state then
return the sequence that generates the node
expand the chosen node
add the new nodes to the frontier

7
Búsqueda de árbol
• El proceso de expandir los nodos de la frontera continua hasta
que se encuentra una solución.

• La solución es la secuencia de acciones que van desde el nodo


raíz hasta el nodo frontera.

• Todos los algoritmos de búsqueda comparten esta estructura


básica, lo que cambia es el orden en el que se expande la
frontera (estrategia de búsqueda).

8
Búsqueda de grafo
• El algoritmo de búsqueda de árbol puede producir caminos
cerrados cíclicos ya que hay redundancia. Por ello, el árbol puede
ser infinito.

• Una forma de eliminar caminos redundantes o excluir aquellos


que no producen una solución, es a través de recordar aquellos
estados que ya se han visitado en el árbol.

• En el algoritmo de búsqueda en grafo, se incluye una estructura


de datos llamada conjunto explorado, el cual se guardan todos
los nodos expandidos.

9
Búsqueda de grafo
function graph_search returns a solution or failure
initialize the frontier using the initial state
initialize the explored set to be empty
while(true)
if the frontier is empty then
return failure
choose a leaf node and remove it from the frontier
if the node contains a goal state then
return the sequence that generates the node
add the node to the explored set
expand the chosen node only if not in the frontier
or explored set
add the new nodes to the frontier

10
Implementación de los algoritmos de búsqueda
• El elemento básico para un algoritmo de búsqueda es el nodo.
• Un nodo contiene al menos los siguientes cuatro elementos:
• Estado. El estado en el espacio de estados al cual el nodo corresponde.
• Padre. Una liga con el nodo padre.
• Acción. La acción que generó el nodo.
• El costo del camino. El costo necesario para llegar al nodo desde el
nodo raíz.

Fuente: Artificial
intelligence: A modern
approach

11
Implementación de los algoritmos de búsqueda
• El conjunto explorado puede ser implementado con una tabla Hash para
permitir una búsqueda eficiente para los estados repetidos.

• La tabla Hash debe tener la noción correcta de equivalencia entre estados.


Por ejemplo, en el ejemplo del agente viajero, la tabla debe saber que el
conjunto de ciudades visitadas {Bucharest, Urziceni, Vaslui} es el mismo
que {Urziceno, Vaslui, Bucharest}.

• En ocasiones, es posible lograr esta característica a través de una forma de


representación canónica de los estados, es decir, estados lógicamente
equivalentes deben tener una misma estructura de datos. Por ejemplo, con
estados descritos por conjuntos, una lista ordenada puede permitir esta
representación canónica.

12
Implementación de los algoritmos de búsqueda
• En Python, para representar nodos se pueden utilizar clases,
tuplas o listas.

• La lista soporta las típicas operaciones de una cola (queue), pero


el rendimiento es bajo. Para ello, es pertinente utilizar clases
especializadas que sirvan como colas para representar a la
frontera.

• El diccionario de Python puede ser usado como una tabla Hash.

13
Rendimiento de los algoritmos de búsqueda
• El rendimiento de un algoritmo de búsqueda se puede evaluar de cuatro formas:
• Completitud. ¿El algoritmo garantiza encontrar una solución si la hay?
• Optimalidad. ¿El algoritmo encuentra la mejor solución dada la función de
costo?
• Complejidad temporal. ¿Qué tanto tiempo requiere el algoritmo para llegar a la
solución?
• Complejidad espacial. ¿Cuanta memoria u otros recursos son necesarios para
realizar la búsqueda?

• La complejidad se puede expresar en términos de tres cantidades:


• b, o factor de ramificación, o el máximo número de sucesores por nodo.
• d, o profundidad del nodo objetivo menos profundo (el número de pasos desde
el nodo raíz hasta el nodo objetivo).
• m, o la máxima longitud de cualquier camino en el espacio de estados.

14
Búsqueda no informada VS búsqueda heurística
• Los algoritmos de búsqueda se distinguen por el orden en el cual los
nodos se expanden.

• Las estrategias que tienen conocimiento sobre que nodos no


objetivos son más prometedores para llegar a la solución, se conocen
como estrategias de búsqueda heurísticas o estrategias de búsqueda
informadas.

• Las estrategias que no tienen información adicional acerca de los


estados más allá de la que se tiene en la definición del problema se
conocen como estrategias de búsquedas no informadas.

15
Estrategias de búsqueda no informadas
Búsqueda de anchura (Breadth-first search)

Fuente: Artificial intelligence: A modern approach

• El nodo raíz se expande al inicio.


• Luego, todos los sucesores de este nodo se expanden.
• Luego, se expanden los siguientes sucesores.
• Se puede implementar este algoritmo con una cola tipo FIFO para la frontera.
• El algoritmo es completo, óptimo para costos unitarios para cada paso, pero tiene
una complejidad espacial exponencial.

17
Búsqueda de costo uniforme (Uniform-cost search)
• Expande el nodo con el costo de camino más bajo.

• El costo del camino 𝑔(𝑛) es la función que indica el costo de


producir el nodo 𝑛.

• Esto se puede implementar con una cola de prioridad ordenada


de acuerdo a los costos de los caminos para guardar la frontera.

• Es óptimo para cualquier costo de pasos.

18
Búsqueda de profundidad (Depth-first search)
• Expande el nodo más profundo no explorado.
• No es completo ni óptimo, pero tiene complejidad lineal espacial.
• Una variante es la búsqueda de profundidad limitada, la cual agrega un límite de
profundidad.

Fuente: Artificial intelligence: A modern approach


19
Búsqueda de profundidad iterativa (Iterative deepening search)
• Se invoca el algoritmo de búsqueda en profundidad para valores
de límites de profundidad incrementales hasta que se encuentra
el objetivo.

• Es completo, óptimo para costos unitarios de paso, tiene una


complejidad temporal comparable al de búsqueda de
profundidad, y la complejidad espacial es lineal.

20
Búsqueda de profundidad iterativa (Iterative deepening search)

Fuente: Artificial intelligence: A modern approach


21
Búsqueda bidireccional (Bidirectional search)
• La idea es correr de manera simultanea dos búsquedas, una
comenzando desde el estado inicial y otra desde el estado final.

• La idea es que en algún punto intermedio ambas búsquedas se van a


cruzar.

• La búsqueda bidireccional se implementa remplazando la prueba de


objetivo de tal forma que la frontera de ambas búsquedas se
intercepten en algún estado.

• Este método puede reducir enormemente la complejidad temporal,


pero no siempre es aplicable y puede requerir mucho espacio.
22
Búsqueda bidireccional (Bidirectional search)

Fuente: Artificial intelligence: A modern approach

23
Comparación de búsquedas no informadas

Fuente: Artificial intelligence: A modern approach

24
Estrategias de búsqueda heurísticas
Búsqueda de mejor el primero (Best-first search)
• En búsquedas informadas, se incorpora conocimiento específico
más allá de la definición del problema para decidir cómo
expandir el árbol o el grafo.

• En la búsqueda de mejor el primero, la expansión se basa en la


evaluación de una función 𝑓 𝑛 , donde 𝑛 es un nodo.

• La función 𝑓 𝑛 regresa un valor para el nodo 𝑛, de tal forma que


el nodo con el menor costo es el primero en expandir.

• La implementación de este método requiere una cola de


prioridad ordenada de acuerdo a la función de costo 𝑓.

26
Búsqueda codiciosa de mejor el primero (Greedy Best-first search)

• Algunos algoritmos requieren de una función ℎ 𝑛 , llamada


función heurística, la cual regresa el costo estimado del mejor
camino hipotético desde el nodo 𝑛 al nodo objetivo.

• Por ejemplo, en el caso del mapa de Rumania, h(n) puede ser la


distancia de una ciudad a Hirsova en línea recta.

• En la búsqueda codiciosa, la función de evaluación está dada por


f(n) = h(n).

• El algoritmo no es óptimo, pero suele ser muy eficiente.

27
A* (A-star) search
• Los nodos se expanden de acuerdo a los valores de 𝑓 𝑛 =
ℎ 𝑛 + 𝑔(𝑛), donde 𝑔(𝑛) es el costo para cada nodo 𝑛.

• El algoritmo es similar al de búsqueda de costo uniforme, pero el


algoritmo A* usa ℎ 𝑛 + 𝑔(𝑛) en lugar de 𝑔(𝑛).

• El algoritmo A* es completo en algunas situaciones. Aun así, su


complejidad espacial sigue siendo prohibitiva.

28
Bibliografía
• Artificial intelligence: A modern approach. Stuart J. Russell y
Peter Norvig., 3ra edición, año 2015, Person. Capítulo 3, páginas:
64-75.
• Artificial Intelligence with Python. Alberto Artasanchez y Prateek
Joshi. 2da edición, 2020, Pack. Capítulo 10.

29

También podría gustarte