Vous êtes sur la page 1sur 15

TECNICAS DE BUSQUEDA-IA Bsqueda en anchura y bsqueda en profundidad para rboles

En programacin es muy comn usar Estructuras de Datos para poder ordenar y almacenar informacin. sta puede ser desde primitivas como nmeros enteros hasta cadenas de texto hasta tipos definidos por el programador como productos, personas o estados de un juego. Existen diversas Estructuras de Datos entre las cuales estn los arrays, las listas, las colas, las pilas, los conjuntos, los rboles, los grafos En esta entrada vamos a centrarnos en los rboles y en los dos algoritmos de bsqueda ms sencillos que podemos usar en ellos: la bsqueda en anchura y la bsqueda en profundidad.

Comencemos entonces.

Un rbol es una estructura de datos compuesta por nodos y ramas. Un nodo es un elemento, el dato que queremos organizar. Una rama es una unin dirigida entre un par de nodos. Un nodo se dice que es padre si existe alguna rama que le una con otro nodo, del mismo modo que un nodo es hijo si existe una rama que una a otro nodo con ste. Decimos que un nodo es hoja si no tiene hijos. Un grafo es una generalizacin de un rbol. Para entenderlo mejor, consultemos la siguiente figura:

Como toda estructura de datos, los rboles tienen tres operaciones bsicas:

Insercin de nuevos elementos. Eliminacin de elementos existentes. Bsqueda de un elemento en la estructura. Existen otras operaciones como la ordenacin y la mezcla de dos estructuras de datos del mismo tipo, pero no vamos a tratarlas aqu.

Durante el resto de la entrada vamos a utilizar el siguiente rbol:

Bsqueda en anchura La busqueda en anchura (o bsqueda en amplitud), llamada Breadth First Search en ingls, es un algoritmo usado para recorrer o buscar elementos en una estructura de datos como los rboles y los grafos (aunque nosotros nos centremos ahora mismo en los rboles). Pertenece al grupo de las bsquedas no informadas (sin heursticas). Su procedimiento consiste en ir visitando todos los nodos de un nivel antes de proceder con el siguiente nivel tal y como mostramos en la siguiente figura (los nmeros en naranja indican el orden de exploracin de los nodos):

De modo que lo primero que har ser visitar la raz, luego los hijos de la raz, luego los hijos de cada uno de estos hijos y as sucesivamente. Cmo hacemos esto para que funcione, pensaris? La respuesta es sencilla: usar una cola como estructura de datos auxiliar.

Una cola es una estructura FIFO (First In, First Out) en la que slo disponemos de dos operaciones: insertar al final de la cola y extraer del principio de la cola. Por tanto, el elemento que entra el ltimo ser el ltimo en salir. Como hemos elegido Java como lenguaje de programacin para esta entrada, disponemos ya de la interfaz Queue<E> y la clase LinkedList<E> que nos van a brindar la funcionalidad de las colas sin programar nada.

Nuestro procedimiento va a ser el siguiente:

Insertamos la raz en la cola, como preparacin. Si la cola no est vaca, sacamos el primer elemento (el primer nodo que haya en la cola) y comprobamos si es el elemento que estamos buscando. Si es igual entonces acabamos, si no es igual obtenemos todos los hijos de dicho nodo y los insertamos en la cola (recordamos que las inserciones son por el final). Repetimos hasta que hayamos encontrado el elemento o la cola sea vaca.

Ventajas de la bsqueda en anchura:

Es completo: siempre encuentra la solucin si existe.

Es ptimo si el coste de cada rama es constante: en Inteligencia Artificial puede que cada nodo sea un estado de un problema, y que unas ramas tengan un coste diferente a las dems. Inconvenientes de la bsqueda en anchura:

Complejidad exponencial en espacio y tiempo (incluso peor la del espacio que la del tiempo). Bsqueda en profundidad

La busqueda en profundidad, llamada Depth First Search en ingls, es un algoritmo usado para recorrer o buscar elementos en un rbol o un grafo y pertenece al grupo de las bsquedas no informadas (sin heursticas). Su procedimiento consiste en visitar todos los nodos de forma ordenada pero no uniforme en un camino concreto, dejando caminos sin visitar en su proceso. Una vez llega al final del camino vuelve atrs hasta que encuentra una bifurcacin que no ha explorado, y repite el proceso hasta acabar el rbol (esto se conoce como backtracking). En la siguiente figura mostramos el orden de visita, siendo los nmeros en naranja dicho orden:

Para poder programar dicho comportamiento vamos a apoyarnos en una estructura de datos llamada pila. Una pila es una estructura de datos LIFO (Last In, First Out) en la que slo disponemos de dos operaciones: apilar y desapilar. Apilar aade el elemento en la cabeza y desapilar lo extrae y elimina. Por tanto, el primer elemento que entre se quedar en el fondo y ser el ltimo en visitarse. Igual que con las colas, Java nos brinda la clase Stack<T> que nos va a servir el comportamiento deseado.

Nuestro procedimiento, por tanto, ser:

Insertamos la raz en la pila, para preparacin.

Mientras haya algo en la pila, desapilamos la cabeza. Comprobamos si es el elemento que buscamos y si lo es acabamos. Si no lo es, cogemos todos los hijos de dicho nodo y los apilamos todos. Repetimos hasta que encontremos el elemento buscado o la pila est vaca. Finalizamos. Como vemos, la bsqueda en profundidad busca el elemento por el camino de mxima profundidad y cuando ste se acaba, vuelve al ltimo nodo que haba visitado con caminos posibles (caminos abiertos).

Ventajas de la bsqueda en profundidad:

Es completa si no existen ciclos repetidos. Tiene menor complejidad en espacio que la bsqueda en anchura, porque solo mantenemos en memoria un camino simultneamente. Inconvenientes de la bsqueda en profundidad:

No es ptima. Quiz el ejemplo anterior no sea demasiado ilustrativo para el caso de la letra c. Veamos el siguiente rbol, que est simplificado pero nos ayudar a entenderlo mejor:

Ahora veamos qu pasa si buscamos con ambos algoritmos el elemento cuyo carcter es una c.

Comenzamos con la bsqueda en anchura:

Ahora la bsqueda en profundidad:

Qu vemos aqu? La bsqueda en anchura ha visitado slo 3 nodos hasta encontrar la solucin mientras que la bsqueda en profundidad ha visitado 11 nodos para encontrar la suya. Significa esto que la bsqueda en anchura es mejor que la bsqueda en profundidad? Miremos un ltimo ejemplo:

Buscamos el elemento cuyo carcter es c y los dos recorridos sern los que se ven en la siguiente figura (click para agrandar):

Y ahora? Cul es mejor? Parece que la bsqueda en profundidad.

Concluiremos con que en realidad no hay una bsqueda no informada mejor o peor, porque dependen mucho de la posicin de nuestra solucin dentro del rbol (entendemos solucin por lo que estamos buscando). Cmo solucionamos esto, entonces? La respuesta es usar bsquedas informadas (usando heursticas). Sin embargo es un campo muy amplio y en esta entrada no vamos a tratarlo. Algunos usos de las bsquedas Antes de acabar voy a hablar muy brevemente sobre las aplicaciones de estas bsquedas.

La aplicacin bsica es la de encontrar un elemento en concreto dentro de nuestra estructura de datos, como hemos visto.

Por su parte, la Inteligencia Artificial trata de, dado un problema, hayar su solucin. Supongamos un laberinto. Nuestro agente inteligente debe encontrar la salida. Si esta bsqueda de la salida la realiza con bsquedas no informadas (sin heursticas) puede acabar en ciclos infinitos (en caso de la bsqueda en profundidad) o tardar muchsimo tiempo (en la bsqueda en anchura siempre encontramos la solucin ms corta si existe, pero esto puede ser en la parte inferior derecha del rbol, que es lo ltimo en visitar). Tambin existen modificaciones de dichos algoritmos como la bsqueda en profundidad limitada (para evitar ciclos infinitos).

Para solventar estos problemas surgieron las bsquedas informadas que usan heursticas. stas, antes de explorar un nuevo nodo evaluan cul de los hijos le ofrece mayor recompensa. Esta forma de decidir qu nodo es mejor depende de la heurstica usada, que pueden ser muy variadas e incluso ineficientes.

Por ejemplo la heurstica lo que ms me acerque a la meta puede parecer una gran idea. Pero puede traer un inconveniente: y si hay una pared desde donde estoy hasta la meta? S, me queda una casilla para llegar, pero no puedo atravesar el muro!

Esto es solamente un ejemplo y hara falta mucha explicacin para cubrir los casos y sobre todo hacer una comparativa en complejidad espacial y temporal de cada una de las bsquedas. Sin embargo como idea inicial de posibles usos de las bsquedas vistas durante la entrada es suficiente.

Las bsquedas heursticas se basan en mtodos formados por la experiencia, se adquiere conocimiento con base en informacin. Cuando se aplican a problemas especficos, su eficacia depende en gran medida de la forma en que exploten el conocimiento del dominio particular, ya que por si solas las tcnicas heursticas no son capaces de salvar la explosin combinatoria a la que son tan vulnerables los procesos de bsqueda. Por esta razn estas tcnicas tambin son llamadas mtodos dbiles. En las bsquedas heursticas encontramos tambin los siguientes tipos de bsqueda:

Generacin y prueba Escalada

Bsqueda el primero mejor Reduccin del problema Verificacin de restricciones Anlisis de medios y fines

Generacin y prueba Algoritmo 1. generar una posible solucin. Para algunos problemas esto significa generar un objetivo particular en el espacio problema. Para otros supone generar un camino elegido con el conjunto de estados objetivo aceptables. 2. Verificar si realmente el objetivo elegido es una solucin comparndolo con el objetivo final comparando el camino elegido con el conjunto de estados objetivo aceptables. 3. Si se ha encontrado la solucin, terminar, sino volver al paso 1. Si se generan las posibles soluciones de forma sistemtica, si la solucin existe, este procedimiento es capaz de encontrarla en algn momento. Si el espacio problema es muy grande, en algn momento puede ser demasiado tiempo. Escalada La tcnica de escalada es la evolucin de la tcnica de profundidad en la que cada nodo se dispone en una forma de evaluar cmo est de cerca o de lejos la solucin. La forma ms comn de evaluar es la funcin de evaluacin.

f(nodo)= # de casillas bien colocadas (maximizo) f(nodo)= # de casillas mal colocadas (minimizo) Como ejemplo del juego 8-puzzle se puede definir una funcin de evaluacin que fuera igual: f(nodo)= # de casillas bien colocadas (mximo) Que devuelven un nmero que representa como est de cerca un determinado estado de la solucin, cuanto mayor sea el nmero se estar cerca de la solucin. Por tanto si se tiene que elegir entre varios estados se debera escoger aquel, que tendra un valor mayor de esta funcin, es decir es una funcin que se debe maximizar. Procedimiento escalada (estado inicial estado final) 1. N = estado inicial; Exito = Falso. 2. Hasta que xito. o Generar los sucesos de N o Si algn sucesor es estado final entonces Exito = Verdadero. Si No

3. Evaluar cada nodo como la funcin de evaluacin 4. N = mejor sucesor 1. Si Exito entonces Solucin = camino desde nodo del estado-inicial al nodo N por los punteros. Si No Solucin = Fracaso. La tcnica de escalada exagera los problemas de la profundidad en el sentido de que no asegura de que se alcance la solucin ptima relacionada con esto existen dos problemas que ocurren a menudo cuando se utiliza escalada: 1. Puede haber mximo o mnimos locales esto ocurre por ejemplo cuando la funcin de evaluacin elegida es maximizante y todos los sucesores de un determinado nodo tienen menor valor que el valor del nodo. 2. Altiplanicies: Es un caso parecido al anterior y sucede cuando los mejores sucesores de un nodo tienen igual valor que el nodo. Las soluciones que se pueden adoptar son: -Retroceder - Dar mas de un paso Retroceder: A la lista de razones a la que se debe retroceder que provienen a la tcnica de profundidad se le aade cuando ocurra cualquier caso de los anteriores. Dar ms de un paso: En lugar de retroceder se generan todos los sucesores de los sucesores del nodo en cuestin y an as no hay ningn sucesor de los sucesores que sea mejor que el nodo, se puede expandir un nivel mas, hasta que se obtenga un valor mayor / menor que el nodo. Bsqueda el primero mejor

Este mtodo de bsqueda representa una forma de combinar las ventajas que presentan tanto la bsqueda primero en anchura como la primero en profundidad en un solo mtodo. Los grafos O En estas bsquedas se desea encontrar un camino simple hasta un objetivo. Ejemplo:

Reduccin de problemas Se utilizan los grafos Y-O, que son tiles para la representacin de la solucin en problemas que pueden resolverse descomponindolos en un conjunto de problemas ms pequeos, cada uno de los cuales debe resolverse. Esta descomposicin genera arcos denominados arcos Y. Un arco Y puede apuntar a cualquier nmero de nodos sucesores, de forma que

todos ellos deben resolverse para que el arco apunte a sola solucin. Ejemplo:

Verificacin de restricciones En estos problemas el objetivo consiste en descubrir algn estado del problema que satisfaga un conjunto dado de restricciones. El diseo de tareas puede contemplarse como problemas de verificacin de restricciones en los que el diseo debe realizarse dentro de unos lmites de tiempo, coste y materiales. Anlisis de medios y fines El proceso de anlisis de medios y fines se centra en la detencin de diferencias entre el estado actual y el estado objetivo. Una vez se ha aislado una diferencia, debe encontrarse un operador que pueda reducirla. Es posible que tal operador no pueda aplicarse en el estado actual por lo tanto, se crea el subproblema que consiste en alcanzar un estado en el que pueda aplicase dicho operador. Este tipo de encadenamiento hacia atrs, en donde se seleccionan los operadores y se producen subobjetivos para establecer la precondiciones del operador. Sin embargo, es posible que el operador no introduzca el estado objetivo que se desea. En este caso se tiene un segundo subproblema que consiste en llegar desde ese estado hasta un objetivo. Pero si se ha elegido correctamente la diferencia y el operador es realmente eficaz al reducir la diferencia, etos dos subproblemas sern ms fciles de resolver que el problema original. El proceso de anlisis de medios y fines puede entonces aplicarse recursivamente. para centrar la atencin del sistema en los problemas grandes, a las diferencias se les asignan niveles de prioridad. Las diferencias de prioridad mayor deben considerarse antes que las de menor prioridad.

Vous aimerez peut-être aussi