UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA
ESCUELA DE CIENCIA BÁSICA TECNOLOGÍA E INGENIERÍA
INTELIGENCIA ARTIFICIAL
ACTIVIDAD 6 TRABAJO COLABORATIVO NO. 2
PRESENTADO POR: GEOVANNY ALONSO RAMIREZ HERRERA CÓDIGO: 15.489.822 CEAD: MEDELLÍN CARLOS SANTACRUZ CEAD: PALMIRA EMERSON HERNÁNDEZ CEAD: BUCARAMANGA WILSON HERNÁNDEZ CEAD: EJE CAFETERO FAIBER BERNAL CEAD: FLORENCIA GRUPO: 90169_4
TUTORA: ÁNGELA MARÍA GONZÁLEZ
MAYO 2 DE 2014
INTRODUCCIÓN
El presente trabajo tiene la finalidad finalidad de profundizar las temáticas temáticas que conforman la unidad Nº 2 del módulo de la UNAD y específicamente área de la “Inteligencia
Artificial ”, las cuales tienen la
finalidad de retomar y afianzar afianzar los conocimientos ofrecidos por cada cada una de las actividades actividades que conforman el modulo del respectivo curso;
además todo este proceso formativo
tiene la
fundamentación fundamentación de enriquecer de habilidades habilidades y destrezas a cada uno de los aprehendientes aprehendientes y de los cuales se pretende pretende transmitir los conocimientos conocimientos básicos en esta área de la informática informática y de los sistemas; destinada a la preparación y formación de los nuevos profesionales, profesionales, en el campo campo de las técnicas de búsqueda son una serie de esquemas de representación del conocimiento, que mediante diversos algoritmos nos permite resolver ciertos problemas desde el punto de vista de la I.A.
Objetivo General:
Ofrecer una introducción a las técnicas básicas de la búsqueda en inteligencia artificial (IA), bajo una orientación orientación práctica orientada orientada a la resolución de problemas en esta área. área.
Objetivos específicos:
Tratar con mayor m ayor detalle detall e la resolución resolu ción general de d e problemas y las técnicas de representación del conocimiento (búsqueda de la solución en un espacio de estados, heurística, inferencia y control). Una parte fundamental de la Inteligencia Artificial es su aspecto práctico, para ello se Estudiarán y desarrollarán programas programas que permitan comprobar comprobar su interés desde desde el el punto de vista informático.
INTELIGENCIA ARTIFICIAL ESTRATEGIAS DE BÚSQUEDA Búsqueda en la Inteligencia Artificial En Inteligencia Artificial (IA) los términos resolución de problemas y búsqueda se refieren a un núcleo fundamental de técnicas que se utilizan en dominios como la deducción, elaboración de planes de actuación, razonamientos de sentido común, prueba automática de teoremas, etc. Aplicaciones de estas ideas generales aparecen en la práctica totalidad de los sistemas inteligentes, como por ejemplo en los programas que tratan de entender el lenguaje natural, en los programas que tratan de sintetizar un conjunto de reglas de clasificación en un determinado dominio de actuación, o en los sistemas que realizan inferencias a partir de un conjunto de reglas.
Técnicas de búsqueda Las técnicas de búsqueda son una serie de esquemas de representación del conocimiento, que mediante diversos algoritmos nos permite resolver ciertos problemas desde el punto de vista de la I.A. Los elementos que integran las técnicas de búsqueda son: • • • •
Conjunto de estados: todas las configuraciones posibles en el dominio. Estados iniciales: estados desde los que partimos. Estados finales: las soluciones del problema. Operadores: se aplican para pasar de un estado a otro.
Tipos de búsqueda •
•
Ciega (Sin información). No cuenta con información previa para encontrar una solución al problema planteado. Heurística (Con información). Se realiza la búsqueda de la solución a un determinado problema, partiendo de conocimientos previos.
Búsqueda heurística
Búsqueda preferente por lo mejor
Búsqueda A*
El algoritmo de búsqueda A* (pronunciado "A asterisco" o "A estrella") se clasifica dentro de los algoritmos de búsqueda en grafos. Presentado por primera vez en 1968 por Peter E. Hart, Nils J. Nilsson y Bertram Raphael, el algoritmo A* encuentra, siempre y cuando se cumplan unas determinadas condiciones, el camino de menor coste entre un nodo origen y uno objetivo. El algoritmo A* utiliza una función de evaluación , donde representa el valor heurístico del nodo a evaluar desde el actual, n, hasta el final, y , el coste real del camino recorrido para llegar a dicho nodo, n, desde el nodo inicial. A* mantiene dos estructuras de datos auxiliares, que podemos denominar abiertos, implementado como una cola de prioridad (ordenada por el valor de cada nodo), y cerrados, donde se guarda la información de los 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 de todos sus hijos, los inserta en abiertos, y pasa el nodo evaluado a cerrados. El algoritmo es una combinación entre búsquedas del tipo primero en anchura con primero en profundidad: mientras que tiende a primero en profundidad, tiende a primero en anchura. De este modo, se cambia de camino de búsqueda cada vez que existen nodos más prometedores.
Características
Como todo algoritmo de búsqueda en anchura, A* es un algoritmo completo: en caso de existir una solución, siempre dará con ella.
Si para todo nodo n del grafo se cumple g(n) = 0, nos encontramos ante una búsqueda voraz. Si para todo nodo n del grafo se cumple h(n) = 0, A* pasa a ser una búsqueda de coste uniforme no informada.
Para garantizar la optimalizad del algoritmo, la función h(n) debe ser admisible, o sea que no sobrestime el coste real de alcanzar el nodo objetivo.
De no cumplirse dicha condición, el algoritmo pasa a denominarse simplemente A, y a pesar de seguir siendo completo, no se asegura que el resultado obtenido sea el camino de coste mínimo. Asimismo, si garantizamos que h(n) es consistente (o monótona), es decir, que para cualquier nodo n y cualquiera de sus sucesores, el coste estimado de alcanzar el objetivo desde n no es mayor que el de alcanzar el sucesor más el coste de alcanzar el objetivo desde el sucesor.
La complejidad computacional está relacionada con la calidad de la heurística que se utilice en el problema. En el caso peor, con una heurística de pésima calidad, la complejidad será exponencial, mientras que en el caso mejor, con una buena h'(n), el algoritmo se ejecutará en tiempo lineal.
El espacio requerido por A* para ser ejecutado es su mayor problema. Dado que tiene que almacenar todos los posibles siguientes nodos de cada estado, la cantidad de memoria que requerirá será exponencial con respecto al tamaño del problema. Para solucionar este problema, se han propuesto diversas variaciones de este algoritmo, como pueden ser RTA*, IDA* o SMA*.
El rendimiento de los algoritmos de búsqueda heurística depende de la calidad de la función heurística.
FUNCIÓN HEURÍSTICA H(N) Se utiliza como una función heurística h(n), a la distancia en línea recta de todas las ciudades a la ciudad meta; en otras palabras, lo que se hace es recabar información y utilizarla para hallar una buena solución a un problema dado, sin tener la certeza de que esa solución sea la mejor o la correcta.
Características:
Usa información “heurística” para adivinar cuál nodo expandir
La heurística aparece bajo la forma de una función de evaluación basada en la información específica para el dominio o contexto relacionada con el problema El problema de búsqueda se puede considerar como la maximización o minimización de una función, como es del todo general. La función de evaluación nos proporciona una manera de evaluar un nodo “localmente”
basado en una estimación del costo de llegar desde el nodo al nodo meta. La heurística suele ser poco certera problema abierto El valor de la actividad a una meta-nivel - problema abierto Puede no encontrar la mejor respuesta - superado por algoritmo A*
Las principales ventajas y desventajas de la heurística son:
Los métodos heurísticos generalmente por su tipo de búsqueda nos puede conducir a errores u operaciones equivocadas; aunque raras veces aparecen los peores casos en la práctica. Algunas heurísticas se pueden contradecir al aplicarse al mismo problema, creando con esto confusión. Las soluciones óptimas determinadas por la heurística pueden hacer menos exhaustiva la búsqueda. Como nos podemos dar cuenta los métodos de búsqueda heurística son la mejor opción, aunque recordemos que no siempre la mejor opción es la correcta, sino que más bien, todo depende del cristal con que lo veamos
Búsqueda avara La búsqueda avara es una búsqueda heurística informada la cual consiste en que utiliza el conocimiento específico del problema más allá de la definición del problema en sí mismo, puede encontrar soluciones de una manera más óptima, es una de las más sencillas estrategias consiste en reducir al mínimo el costo estimado para una meta, este costo no se puede calcular con precisión; la cual consiste en expandir primero aquel nodo con mejor la evaluación del nodo devuelve un número que sirve para representar lo deseable que sería la expansión de un nodo. Para tener una idea clara observemos lo siguiente:
Inglés: greedy search (Búsqueda codiciosa) La idea es: Minimizar el coste estimado para llegar a la meta Estrategia: Entre las hojas del árbol de búsqueda, seleccionar el nodo que minimice h*(n) Algoritmo: Mantener la lista abierta ordenada por valores crecientes de h* Insertar nuevos nodos en abierta según sus valores h* {Búsqueda avara} Abierta ← s0
Repetir Si vacía? (abierta) entonces Devolver (negativo) Nodo primero (abierta) Si meta? (nodo) entonces Devolver (nodo) ←
Sucesores ← expandir (nodo)
Para cada n que pertenece sucesores hacer n.padre ← nodo
ordInsertar(n,abierta,h*) Fin {repetir} Con esta búsqueda se trata de reducir al mínimo el costo estimado de la ruta, para llagar a la meta propuesta. E l nodo más cercano al nodo meta, es el que siempre se expande primero. En esta la búsqueda avara se utiliza una función heurística h (u) para calcular los estimados del costo. Esta se denota de la siguiente manera: h(n) = costo estimado de la ruta más barata que une el estado del nodo N con un estado META. Aquella búsqueda preferente por lo mejor que utiliza h para escoger cuál es el siguiente nodo que se va a expandir es denominada búsqueda avara. El único requisito es que h(n) = 0 cuando n es una meta, además las funciones heurísticas se refieren a problemas específicos, donde una buena función heurística en problemas de determinación de ruta como la anterior corresponde a la distancia en línea recta a la meta. Hdlr(n) = distancia en línea recta entre n y la ubicación de la meta. Para calcular los valores de hdlr es necesario contar con las coordenadas de las ciudades. Es útil porque una carretera que va de A a B por lo general tiende a dirigirse más o menos la dirección correcta y la información como esta, es el tipo de información adicional que permite a la heurística contribuir con la reducción del costo de búsqueda. Los algoritmos por avaricia tienen un desempeño bastante bueno, los cuales permiten que en una búsqueda avara se equivoquen las pistas si no se tiene la precaución de detectar estados repetidos. Entre sus características podemos encontrar: Las búsquedas que seleccionan primero lo mejor son más sencillas - MIN costo estimado para llegar a la meta (f = h ) • Ese costo se puede estimar pero no determinar con exactitud; la buena heurística ayuda. • h(n) = costo estimado de la ruta más barata desde el estado n hasta el estado meta. • Las funciones heurísticas son pr obl ema - especí ficas •
•
En problemas de búsqueda de ruta una buena h es hDLR , donde DLR es distancia en línea recta.
Análisis En términos generales, la búsqueda avara sufre los mismos problemas que la búsqueda en profundidad, los cuales son que no es óptima y no es completa, además nunca puede regresar a probar otras posibilidades; sin embargo, suele encontrar una solución aceptable de forma rápida, cuyo objetivo principal Puesto que su objetivo es encontrar soluciones de bajo costo, por lo general en estos algoritmos se utiliza alguna medida estimada del costo de la solución, y se hacen esfuerzos por reducir esta medida al mínimo. Para enfocar la búsqueda, en tal medida debe figurar algún tipo de cálculo del costo de ruta que va de un estado al estado más cercano a la meta. El problema fundamental de la búsqueda avara, consiste en: Solo considera el coste para llegar al nodo actual. No se fija en la distancia restante del nodo actual. Asegura la completitud necesaria, para evitar todos los estados repetidos. El método es óptimo, solo en aquellos espacios de estados en los que el coste de un nodo n es independiente del camino por el que se llega hasta él, por lo tanto también se reduce el tiempo de búsqueda. Ejecución del algoritmo de búsqueda en profundidad
EJEMPLO DE BÚSQUEDA AVARA
Solución suboptima:
c(D-H-E-I)=550 c(D-H-G-P-I)=518
Características del Algoritmo A*. Un algoritmo de búsqueda por el mejor nodo combina las características de los métodos en anchura y en profundidad. Se caracteriza porque para cada nodo se generan todos los posibles sucesores y de estos sólo se expande aquel que sea más prometedor después de la aplicación sobre ellos de una función heurística h(n) que estima el coste del camino desde cada nodo al objetivo. El uso de este tipo de algoritmo, al minimizar el coste estimado hasta el objetivo, disminuye considerablemente el coste de la búsqueda. Desafortunadamente, no es ni óptimo ni completo. Por otra parte, la búsqueda de coste uniforme minimiza el coste del camino hasta el nodo, g(n), es decir, expande para cada conjunto de sucesores aquel cuyo camino desde el nodo raíz tenga un menor coste. Este es un algoritmo óptimo y completo, pero puede ser muy ineficiente. Sería bueno poder combinar estas dos estrategias para conseguir las ventajas de ambos. Afortunadamente, podemos hacer eso exactamente, combinando las dos funciones de evaluación simplemente sumándolas: f(n) = g(n) + h(n).
Ya que g(n) proporciona el coste del camino desde el nodo de inicio hasta el nodo n, y h(n) es el coste estimado del camino de menos coste desde n hasta el objetivo, f(n) es el coste estimado de la solución de menor coste que atraviesa el nodo n. Si se intenta encontrar la solución de menor coste, es razonable intentar primero el nodo con el menor valor de f . Lo bueno de esta estrategia, es que es más que razonable. Se puede comprobar que es completa y óptima, dando una simple restricción de la función h. La restricción es escoger una función h que nunca sobreestime el coste para alcanzar el objetivo. Una función h de este tipo es una heurística admisible. A este algoritmo se le conoce con el nombre de A*.
Ejemplo:
El algoritmo A* tiene sus limitaciones de espacio impuestas, principalmente por poder acabar degenerando en una búsqueda en anchura si la función heurística no es demasiado buena. Además, si la solución del problema está a mucha profundidad o el tamaño del espacio de búsqueda es muy grande, no hace falta mucho para llegar a necesidades de espacio prohibitivas. Esto lleva a plantearnos algoritmos alternativos con menores necesidades de espacio.
Búsqueda A* por profundización iterativa Características del Algoritmo IDA*. El IDA* (Iterative-Deepening A*) es al igual que el DFID un algoritmo basado en la profundización iterativa. La única diferencia entre ambos algoritmos estriba en que mientras el DFID se basa en la profundidad para cada una de sus iteraciones, el IDA se basa en la información heurística que posee para determinar el siguiente límite de la iteración. El tratamiento de esa información se realiza de igual forma que en el algoritmo del A*, o sea mediante la función de evaluación f introducida anteriormente. El funcionamiento del algoritmo es el siguiente: En cada iteración el algoritmo realiza una búsqueda en profundidad hasta donde se lo permita su límite de coste. Cada vez que se visita todo el grafo de búsqueda contenido dentro de ese límite sin hallar la solución entonces, el algoritmo incrementa el límite de coste. Ese nuevo límite viene dado por el menor de los límites de corte, o sea, por el menor valor del coste de los nodos que tenían un valor superior en la anterior iteración. Como señalamos anteriormente, este algoritmo se considera limitado en profundidad, aunque esta afirmación no sea estrictamente cierta. La razón de ello viene dado por su eficacia en cuanto al uso de memoria pero como se puede ver de su funcionamiento no realiza un control estricto de la memoria. Posee las siguientes particularidades: 1. 2. 3. 4.
Uso de toda la memoria disponible. En la medida que lo facilite la memoria, salto de los estados repetidos. Es completo si dispone de suficiente memoria como para guardar la solución más cercana. Es óptima si dispone de la memoria para guardar la ruta solución óptima más cercana. Sino produce la mejor solución disponible con esa capacidad de memoria. 5. Si se dispone la capacidad de memoria para todo el árbol de búsqueda, entonces resultará optimizado y eficiente.
Ejemplo algoritmo búsqueda A* por profundización iterativa
Diferencia de ejecución algoritmo A* e IDA*
Ejemplo de búsqueda heurística A*. Origen : Q Meta : N
Solución 1: Q-R-T-K-M-N Solución 2: Q-I-W-K-M-N (Ruiz Reina, Alonso, & Martín Mateos, 2011) Ejemplo de búsqueda bidireccional. Origen : 1 Meta : 2
Solución: 1
–
4
–
9 [coincidencia (3,3)] –
–
10
–
5
–
2
Búsqueda por ascenso de cima La búsqueda por ascenso de cima se esfuerza por efectuar cambios que permitan mejorar el estado actual. Simplemente se trata de un bucle que constantemente se desplaza en la dirección de un valor ascendente. Como el algoritmo no mantiene un árbol de búsqueda, la estructura de datos del nodo sólo tiene que registrar el estado y su evaluación, denominado VALOR. Esta sencilla política tiene tres bien conocidas desventajas:
Máximas locales: Un máximo local, contrariamente a un máximo global, es una cima cuya altura es inferior a la cima más alta de todo el espacio de estados. Una vez que ha alcanzado un máximo local, el algoritmo para. Planicie: Las planicies son áreas del espacio de estados en donde la función de evaluación básicamente es plana. La búsqueda realizará un paseo al azar.
Riscos: Las laderas de algunos riscos tienen pendientes muy pronunciadas, por lo que es fácil para una búsqueda llegar a la cima del risco; sin embargo, puede suceder que la pendiente de tal cima se aproxime demasiado gradualmente a un pico. El algoritmo llega a un punto más allá del cual no se logra ningún avance. Lo que se hace mediante el ascenso de cima con reinicio aleatorio: efectúa una serie de búsquedas de ascenso de cima desde estados iniciales generados aleatoriamente, hasta parar o cuando no se logra ningún avance significativo. Se guarda el mejor resultado que hasta un momento dado se haya obtenido en las diversas búsquedas; puede usar un número fijo de iteraciones, o puede continuar hasta que el mejor de los resultados almacenados no haya sido mejorado para cierta cantidad de iteraciones.
Búsqueda por ascenso de cima Función Ascenso-de-cima (problema) responde con un estado de solución entradas: problema, un problema estático: actual , un nodo siguiente, un nodo actual Hacer-nodo(Estado Inicial[ problema]) hacer ciclo siguiente el sucesor de actual de más alto valor si Valor[ siguiente] < Valor[actual ] entonces responde con actual actual siguiente
fin
Profundización iterativa en juegos bipersonales: MINIMAX Si se aplica el algoritmo MINIMAX puro descripto puede suceder que se encuentre fuera de tiempo cuando aún no ha recorrido todo el árbol y por lo tanto no tiene ninguna decisión tomada. Mediante la profundización iterativa puede cortarse la búsqueda en cualquier momento dado que siempre se tiene una solución resultado de la última iteración completada Otra ventaja de la profundización iterativa es que cada iteración proporciona un valor para los movimientos, y por lo tanto esto puede proporcionar un orden. Es decir, si un movimiento es superior a sus hermanos puede explorarse primero en la siguiente iteración. Con este ordenamiento, según ya se mencionó, el procedimiento de poda alfa-beta puede podar mayor cantidad de ramas y con esto reducirse el tiempo total.
Características del Algoritmo DFID. El algoritmo de búsqueda DFID (Depth-First Iterative-Deepening) fue introducido por primera vez en el año 1977 cuando Slate y Atkin presentaron un programa de ajedrez. El algoritmo combina las ventajas de la búsqueda en anchura y de la búsqueda en profundidad. De la primera guarda el concepto de encontrar la solución siempre a la menor profundidad, mientras que de la segunda
conserva el estilo de búsqueda con lo cual asegura que su necesidad de memoria será lineal. Para asegurar la completitud del algoritmo, el DFID introduce un límite de profundidad en cada una de sus iteraciones. El desarrollo del algoritmo es el siguiente: En cada iteración el algoritmo realiza una búsqueda limitada en profundidad. Si en dicha iteración no se alcanza la solución óptima, entonces se incrementa dicho límite en una unidad de profundidad y se vuelve a realizar la búsqueda.
BÚSQUEDA CIEGA
Búsqueda bidireccional
Es básicamente una búsqueda simultánea que avanza a partir del estado inicial y que retrocede a partir de la meta y que se detiene cuando ambas búsquedas se encuentran en algún punto intermedio. Si en un problema el factor de ramificación b es el mismo en ambas direcciones, la búsqueda bidireccional puede ser muy útil. Si la solución está a profundidad d, entonces la solución estará a O (2bd/2) = O (bd/2) pasos.
Contexto de Aplicación
La búsqueda hacia atrás implica la sucesiva generación de predecesores a partir del nodo meta. Si todos los operadores son reversibles, los conjuntos de predecesor y sucesor son idénticos, pero en algunos problemas, el cálculo de los predecesores puede resultar muy difícil. Si hay varios estados meta listados en forma explícita, se puede aplicar una función de predecesor al conjunto de estados como en el caso de la búsqueda de estado múltiple. Pero si sólo hay una descripción de los estados meta, es realmente difícil (¿qué estados son predecesores del jaque mate en ajedrez?) Se requiere una manera eficiente de verificar cada uno de los nodos nuevos para ver si ya están en el otro árbol. Se tiene que definir un tipo de búsqueda para cada mitad. Amplitud – amplitud, amplitud – profundidad, etc. La complejidad espacial es igual a la temporal para esta búsqueda.
Ventajas Complejidad temporal de
, siendo:
b1: factor de ramificación de la búsqueda en dirección 1. b2: factor de ramificación de la búsqueda en dirección 2. d: profundidad de la solución.
Desventajas El factor de ramificación de la búsqueda inversa podría ser mucho mayor que el de la directa.
Complejidad espacial de
, siendo:
bi: factor de ramificación de la búsqueda de la que se guarda el árbol en memoria. Puede ser muy difícil o imposible encontrar una función inversa.
Implementación
Construcción de sistemas expertos (es un caso particular de sistema inteligente en el que la información ha sido aportada por expertos en una determinada área). Conocer la demostración de teoremas matemáticos. Robots que modelan algo.
Endurecimiento simulado En vez de empezar otra vez, cuando se queda atorado; éste algoritmo desciende unos cuantos pasos (al azar); si se logra mejorar la situación se ejecuta. De otra forma, realizará la acción con cierta probabilidad inferior a 1, que disminuye exponencialmente con lo "malo" de la situación. Para determinar la probabilidad, se utiliza un parámetro T, cuando: § T es muy elevado, hay más probabilidad de que se acepten acciones "malas". § T tiende a cero, es menos probable su aceptación. Cada método posee sus ventajas y desventajas, ninguno es más óptimo que otro a nivel general, sino que se ajusta a distintas características de un problema determinado. Para encontrar una trayectoria adecuada se deben considerar dos costos: Ø El costo de cálculo para encontrar la trayectoria. Ø El costo del viaje cuando se sigue la trayectoria Si se desea realizar el viaje con frecuencia, hallar una trayectoria realmente buena justifica la inversión del tiempo de búsqueda. Si al contrario, se utilizará una sola vez, y resulta difícil hallar cualquier trayectoria, obtener una resultará satisfactorio, aun cuando invirtiendo más tiempo se logre encontrar una mejor.
Búsqueda por amplitud y/o anchura En Ciencias de la Computación (en inglés BFS - Breadth First Search) es un algoritmo para recorrer o buscar elementos en un grafo (usado frecuentemente sobre árboles). Intuitivamente, 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. Formalmente, BFS es un algoritmo de búsqueda sin información, que expande y examina todos los nodos de un árbol sistemáticamente para buscar una solución. El algoritmo no usa ninguna estrategia heurística. Si las aristas tienen pesos negativos aplicaremos el algoritmo de BellmanFord en alguna de sus dos versiones.
Búsqueda preferente por profundidad La búsqueda en profundidad preferente intenta seguir un camino hasta la mayor profundidad posible, retrocediendo cuando acaba el camino y retomando la última posibilidad de elección disponible. Para obtener este algoritmo solo hemos de instanciar la estructura que guarda los nodos abiertos a una pila en el algoritmo genérico. Esta estructura nos consigue que se visiten los nodos en el orden que hemos establecido. El principal problema de este algoritmo es que no acaba si existe la posibilidad de que hayan caminos infinitos. Una variante de este algoritmo que evita este problema es el algoritmo de profundidad limitada.
Ejemplo 1 Seudocódigo 1. Crear una lista con un solo elemento: el nodo raíz 2. Hasta que (el primer camino de la lista arribe al nodo objetivo) o se arribe (a la lista vacía) HACER a. Extraer el primer camino de la lista b. Expandir el nodo final de este camino. c. Eliminar los ciclos de los caminos expandidos. d. Insertar estos nuevos caminos al INICIO de la lista. 3. FIN HACER 4. Si la lista está vacía, entonces NO hay solución 5. Sino el primer camino de la lista es la solución
Ejemplo 2 1. Este algoritmo comenzaría empilando el nodo inicial (nodo 1). 2. Los nodos sucesores del primer nodo son los nodos 2 y 3, que pasarían a ser empilados 3. El siguiente nodo extraído de la pila sería el 2, que tiene como sucesores el 4 y el 6. 4. El siguiente nodo extraído de la pila sería el 4, que tiene como sucesor el 5. 5. El siguiente nodo extraído de la pila sería el 5, que tiene como sucesores el 6 y el 7. Como el nodo 6 está en la pila en con nivel superior descartaríamos este nodo. 6. El siguiente nodo extraído de la pila sería el 7, que tiene como sucesor el 8. 7. El siguiente nodo extraído de la pila sería el 8 que es el nodo solución y por tanto acabaría la ejecución.
Búsqueda profundización iterativa La profundización iterativa es una idea que se utilizó por primera vez en un programa llamado CHESS 4.5 (Slate y Atkin, 1977). El nombre profundización iterativa hace referencia a que se realizan iteraciones de búsquedas cada vez más profundas. El inconveniente de la búsqueda profundización iterativa puede ser la redundancia de que se vuelva a inspeccionar cada nodo ya comprobado con cada nueva iteración. La principal razón para realizar iteraciones de búsquedas de diferentes profundidades incrementales, en lugar de realizar una búsqueda a la profundidad deseada, es que los programas de juegos pueden estar sujetos a restricciones de tiempo. Mediante esta técnica la primera iteración realiza una búsqueda de profundidad uno, la segunda iteración realiza una búsqueda de profundidad dos, etc. hasta que el tiempo destinado al movimiento se agote. Puede parecer que se pierde una gran cantidad de tiempo al efectuar los análisis de los niveles menos profundos. Sin embargo, está demostrado que aproximadamente se necesita 1/(b-1) evaluaciones extras para realizar la exploración iterativa en un árbol de un factor de ramificación igual a b (por ej., si b=16 la profundización iterativa necesita 1/15 del total de exploraciones de los nodos hijos del último nivel). La técnica de profundización iterativa puede aplicarse con éxito tanto a búsquedas con agente único o juegos unipersonales como a juegos bipersonales.
2 Explicar que es, las características, las estrategias de búsquedas y por medio de ejemplos identificar qué papel tiene la búsqueda en la inteligencia artificial. CARACTERÍSTICAS DE LAS BÚSQUEDAS EN INTELIGENCIA ARTIFICIAL: TIPO DE CARACTERÍSTICAS ESTRATEGIAS EJEMPLO BÚSQUEDA Si existe una solución en el espacio Expanden el nodo menos profundo, Se puede ver el árbol de búsqueda que se genera. En este caso encontramos el camino de estados (independientemente de que no haya sido expandido. la estructura combinatorial de Cada nodo generado debe más corto, ya que este algoritmo explora los Anchura éste), la encuentra y además con la permanecer en memoria, ya que es caminos en orden de longitud como la secuencia solución más corta. parte de la frontera, o un búsqueda en anchura. Para mantener la ganancia en espacio en este caso no se han antepasado de un nodo frontera. Si el espacio de estados es un grafo guardado los nodos cerraros, es por ello que dirigido acíclico la ejecución no se ha tratado en nodo 4 en el paso 3.7 termina en todos los casos. como repetido. Si el grafo tiene ciclos dirigidos (o es un grafo no dirigido), el algoritmo puede no terminar si no existe solución y si ésta existe el algoritmo puede ser muy ineficaz por las mismas razones que en el caso de los grafos dirigidos acíclicos.
No garantizan que se encuentre una solución, aunque existan soluciones. Si encuentran una solución, no se asegura que ésta tenga buenas propiedades (que sea de longitud mínima o de coste óptimo). En algunas ocasiones (que, en general, no se podrán determinar a priori), encontrarán una solución (aceptablemente buena) en un tiempo razonable.
Heurísticas
El grado de complejidad de estas Números de cuadros fuera de su sitio. operaciones mentales es muy diverso. Pueden ir de la sencillez más evidente a la dificultad más desalentadora. Saben estimar si un estado es “más prometedor” que otro.
Si no podemos encontrar una función Usan la información de definición heurística suficientemente buena, deberemos del problema y el costo del estado usar algoritmos que no busquen el óptimo, pero que nos garanticen que nos acercaremos actual al objetivo. lo suficiente a él para obtener una buena Best first solución. Búsqueda Avara A* IDA* Mejora iterativa
Mantienen la lista de nodos ABIERTOS ordenada de modo que se puedan considerar siempre la alternativa más prometedora de entre todas las que están siendo consideradas. Combinan las de la búsqueda en profundidad (puede encontrar una solución sin expandir todos los nodos.
Primero mejor.
el
Ciega
Usan la información de la definición del problema. No disponen de ninguna información adicional a la propia definición del mismo.
Concretamente, la estrategia de control primero el mejor consiste en darle a la lista ABIERTOS una estructura de cola de prioridad, ordenada (de menor a mayor) por los valores heurísticos de los estados asociados a los nodos. Habrá versiones en árbol y en grafo (es decir, en ésta última se mantiene una lista de estados CERRADOS).
Un hombre se encuentra en una extensa llanura y tiene sed, en ese momento ha llegado a una pequeña elevación que es la única en esa región y se sube a ella. Desde la elevación el hombre observa el cuadro siguiente: NORTE: vegetación verde y movimiento de animales SUR: vegetación amarilla ESTE: vegetación amarilla OESTE: vegetación verde Evidentemente la vegetación verde es un indicio de que hay humedad, luego es muy probable que exista agua en la superficie o subterránea. El movimiento de animales puede indicar que ellos se dirigen allí a beber, lo cual sugiere que el agua está en la superficie. Esta información le dice al hombre que debe dirigirse al norte, constituye una búsqueda heurística.
Utilizan estrategias de búsqueda de soluciones que no explotan información adicional que pueda guiar el proceso. Búsqueda primero en anchura. Búsqueda primero en profundidad. Búsqueda limitada en profundidad. Búsqueda iterativa en profundidad. Búsqueda bidireccional. Estos algoritmos se basan en la estructura del espacio de estados y determinan estrategias
sistemáticas para su exploración. Es decir, siguen una estrategia fija a la hora de visitar los nodos que representan los estados del problema. Coste uniforme
Búsqueda al ancho es óptimo si todos los costos so n iguales porque expande siempre el nodo menos profundo. Por simple extensión encontramos este algoritmo para árboles con costos no iguales. Expandir nodo no expandido de mínimo costo. Si el conjunto open se maneja como una lista FIFO, es decir, como una cola, siempre se estará visitando primero los primeros estados en ser generados. El recorrido del espacio de estados se hace por niveles de profundidad.
Expande primero los nodos no expandidos con menor coste de camino.
En amplitud
Si el factor de ramificación es B y la profundidad a la cual se encuentra el estado objetivo más cercano es n, este algoritmo tiene una complejidad en tiempo y espacio de O( Bn). Contrariamente a la búsqueda en profundidad, la búsqueda en amplitud garantiza encontrar el camino más corto.
BFS genera un ´arbol de descubrimiento de un grafo G, para esto cada v´ertice v tiene los siguientes campos:
v.α: lista de adyacencia de v. v.color: color para v (blanco, plomo, negro) v.π: padre de v en el ´arbol de descubrimientov.d: paso de descubrimiento de v (distancia desde la ra´ız del ´arbol de descubrimiento)
BFS(G, s) for each u ∈ V (G) − {s} do u.color := blanco u.d := ∞ u.π := nil
s.color := plomo s.d := 0 s.π := nil Q.Enqueue(s) while Q.IsEmpty() = false do u := Q.head for each v ∈ u.α do if v.color = blanco then v.color := plomo v.d := u.d +1 v.π := u
Q.Enqueue(v) Q.Dequeue() u.color := negro Los algoritmos anteriores hacen una búsqueda ciega y exhaustiva, lo que presenta serios problemas en espacios de estado grandes. Esto se puede mejorar expandiendo primero los estados que tienen más expectativas de encontrarse en el camino a la solución, lo que implica utilizar una función heurística que permita darle una mayor prioridad a esos estados. El conjunto open se maneja en este caso como una cola de prioridad ordenada según una función heurística que aporta un conocimiento adicional sobre el problema abordado. Esta función puede ser, por ejemplo, una
En profundidad
Utilizan una cola de prioridad, este algoritmo se diferencia por actualizar los caminos almacenados en la lista open cada vez que se encuentra un camino más corto, lo que mejora la probabilidad de encontrar el camino óptimo. El camino se almacena en cada estado como un puntero al padre. Cuando se llega a un estado en closed por un camino más corto, habría que transmitir esta información a todos sus sucesores. Sin embargo, algunos de estos sucesores pueden haber sido generados o posteriormente actualizados por otro camino que hasta el momento parecía más
Aplicar el algoritmo de búsqueda en profundidad al siguiente grafo:
La búsqueda en profundidad se puede implementar de forma recursiva. Debido al paso 4 del algoritmo descrito arriba, donde se regresa al padre del vértice activo, la búsqueda en profundidad es un algoritmo de retroceso.
estimación del largo del camino que queda por recorrer para llegar al estado objetivo.
corto, por lo cual estarían desvinculados del ancestro que se está considerando. Administrar este problema sería muy engorroso, entonces se opta por repetir la búsqueda. Se puede obtener una versión simplificada de esta búsqueda heurística eliminando toda la información histórica contenida en open y closed. En cada paso se generan los sucesores del estado actual y sólo se conserva al mejor de ellos para el paso siguiente. El algoritmo se detiene cuando ninguno de los sucesores tiene una mejor evaluación que el estado actual (sino entraría en un ciclo infinito). Esta estrategia se llama algoritmo del gradiente (hill climbing en inglés). Funciona adecuadamente cuando no hay óptimos locales.
Iterativa en profundidad
Limitada por la cantidad de memoria
La idea es combinar las buenas características de la búsqueda en profundidad, en cuanto a la complejidad en espacio, con las ventajas de la búsqueda en amplitud. Esto se logra haciendo una búsqueda en profundidad acotada por una profundidad máxima i que se hace variar iterativamente de 1 en adelante con incrementos de 1. Si el estado objetivo más cercano se encuentra a una profundidad n, se hacen n búsquedas en profundidad, a nivel 1, a nivel 2, hasta el nivel n. Cuando se implementan las búsquedas vistas hasta el momento, hay ciertos problemas muy difíciles de resolver y por lo tanto siempre hay que dar algo a cambio para resolverlos, y lo primero que se cede es la memoria disponible.
Esta búsqueda iterativa garantiza encontrar el camino más corto.
Expandir nodo más profundo Implementación: fringe es cola LIFO, i.e., poner sucesores al frente
Según exigencias de memoria, descarta nodos de ella que tengan valores de f altos. Los valores de f descartados quedan memorizados en ancestros. Mecanismo de regeneración de nodos descartados que regenera lo faltante solo si todo el resto de rutas son peores. Óptima y completa si la solución más “chata” cupo en la
memoria.
En el otro caso, entrega la mejor solución alcanzable
TIPO DE B SQUEDA Anchura
PAPEL TIENE LA B SQUEDA EN LA INTELIGENCIA ARTIFICIAL La búsqueda en anchura es utilizada en la IA, para intentar explorar el espacio de búsqueda haciendo un recorrido por niveles, de manera que un nodo se visita solamente cuando todos sus predecesores y sus hermanos anteriores en orden de generación ya se han visitado. Heurísticas Una ventaja con la que nos encontraremos en la inteligencia artificial y en las respectivas búsquedas, es que las propiedades que tienen estos problemas permiten derivar heurísticas que reducen el espacio de búsqueda de manera considerable. Este tipo de búsqueda es muy usual en la inteligencia artificial, este permite explorar Primero el mejor. antes los nodos más cercanos a la solución probablemente nos hará encontrarla antes, pero el no tener en cuenta el coste del camino recorrido hace que no se garantice la solución óptima, ya que a pesar de guiarnos hacia el nodo aparentemente más cercano a la solución, estamos ignorando el coste del camino completo. Ciega Sólo utiliza información acerca de si un estado es o no objetivo para guiar su proceso de búsqueda y permite obtener la información necesaria para guiar el resto del proceso. Coste uniforme Cuando utilizamos una búsqueda, donde la solución obtenida es óptima respecto al número de pasos desde la raíz, si los operadores de búsqueda tienen coste uniforme, el coste de la solución sería el óptimo, permitiéndonos obtener grandes resultados en su implementación. En amplitud Su principal objetivo e utilidad en las búsquedas es alcanzar el objetivo trazado, de lo contrario fallaría. En profundidad La búsqueda en profundidad es utilizada en la inteligencia artificia, para intentar seguir un camino hasta la mayor profundidad posible, retrocediendo cuando acaba el camino y retomando la última posibilidad de elección disponible. Iterativa en profundidad Este algoritmo intenta obtener las propiedades ventajosas de la búsqueda en profundidad y en anchura combinadas, es decir, un coste espacial lineal y asegurar que la solución será óptima respecto a la longitud del camino. Limitada por la cantidad de Este algoritmo es mucho más complejo que los anteriores y existen diferentes versiones. memoria Principalmente la complejidad viene de cómo se han de reorganizar los caminos memorizados cuando se han de borrar de la memoria y como se hace la propagación de los costes a los nodos ascendiente que se mantienen.
3. Teniendo en cuenta el trabajo individual, elabore un cuadro comparativo entre la búsqueda heurística y la búsqueda ciega.
BÚSQUEDA HEURÍSTICA La búsqueda heurística utiliza una estimación del coste o de la calidad de la solución para guiar la búsqueda, de manera que se basan en algún
ciega, no dependen de la información propia del problema a la hora de
criterio heurístico dependiente del problema.
resolverlo, estos son algoritmos generales, por tal razón se pueden aplicar
Por medio de la utilización de los algoritmos que no son sistemáticos,
a cualquier circunstancia.
nos brinda la condición de obtener un orden de exploración no lo
heurístico.
queriendo decir que siguen una estrategia fija a la hora de visitar los
Algunos de los métodos de utilizados en las búsquedas heurísticas, son
nodos que representan los estados del problema.
En la utilización de estos algoritmos de búsqueda, también se puede
ignorar parte del espacio de búsqueda.
tratar los exhaustivos; permitiendo hacer el recorrido de todos los nodos
Existen bastantes algoritmos con funcionamientos muy diferentes, los
del problema para hallar la solución.
La búsqueda ciega utiliza básicamente dos políticas de recorrido de un
solución óptima, ni tan siquiera el hallar una solución.
espacio de búsqueda, los cuales son la búsqueda en anchura y en
El soporte principal en los algoritmos de búsqueda heurística será el
profundidad.
modo de elegir qué nodo explorar primero, para ello podemos utilizar
Los algoritmos de búsqueda ciega, se basan en la estructura del espacio de estados y determinan estrategias sistemáticas para su exploración;
cuales no siempre nos garantizan la posibilidad de encontrar la
determina la estructura del espacio de búsqueda sino el criterio
muy exhaustivos y basan su menor complejidad computacional en
BÚSQUEDA CIEGA Los algoritmos de búsqueda no informada o algoritmos de búsqueda
Cuando utilizamos el método de búsqueda a ciegas, podemos utilizar el
diferentes estrategias que nos darán diferentes propiedades y por ende
más privilegiado, esto nos permitirá aprovechar un espacio grande de
los resultados.
búsqueda y más que todo cuando no se conoce la otra parte.
La estrategia de la búsqueda heurística, se traduce en el algoritmo
primero el mejor avaricioso; donde la única diferencia al respecto a los
La búsqueda no informada o a ciegas que no tienen información del
problema que se quiere solucionar, se puede medir la calidad de los
demás algoritmos, es el utilizar como estructura para almacenar los nodos abiertos una cola con prioridad.
estados.
La primera estrategia que se nos puede ocurrir es utilizar la estimación del coste futuro, para después de esta poder decidir qué nodos explorar
expansión de los nodos del árbol.
primero.
Al comenzar a analizar las soluciones
La búsqueda ciega busca la primer solución sin importar que tan óptima sea; no detecta si se está aproximando o alejando de la solución.
de los problemas, todo
Cuando ejecutamos este tipo de búsqueda y está a la vez no es capaz de
dependerá de las características de la dificultad; donde a veces el
encontrar una solución aceptable en caso de que no exista o sea
número de soluciones válidas es muy reducido debido a que lo que
demasiado costoso, procede en encontrar la solución más óptima.
exigimos para ser una solución es muy estricto y es imposible generar una solución inicial sin realizar una búsqueda adecuada.
La estrategia de la búsqueda ciega, es la elección del orden de la
Si sabemos que partiendo desde una solución inválida podremos alcanzar el espacio de soluciones, no habrá problema, el algoritmo hará esa búsqueda inicial guiado por la función heurística.
Una de las funciones del método utilizado en esta búsqueda, es la aplicación de operadores hasta encontrar la solución.
4. Explique que es un algoritmo genético, mediante un ejemplo explique su proceso de construcción. Los Algoritmos Genéticos son métodos adaptativos que pueden usarse para resolver problemas de búsqueda y optimización, estos se en los procesos genético de los organismos vivos. Estos algoritmos utilizan una equivalencia directa con el conducta natural, los cuales trabajan con una selección de individuos, cada uno de los cuales representa una solución factible a un problema dado. Procediendo con el algoritmo genético, este le asigna a cada individuo un valor o puntuación, relacionado con la propiedad de dicha solución, en las que la naturaleza asemejar el grado de efectividad de un organismo para competir por unos determinados recursos. El dominio de los algoritmos genéticos proviene del hecho de que se trata de una técnica robusta, y pueden tratar con éxito una gran variedad de problemas provenientes de diferentes áreas, incluyendo aquellos en los que otros métodos encuentran dificultades; también hay que tener en cuenta que no se pueden garantizar, que el Algoritmo Genético encuentre la solución óptima del problema, existe evidencia empírica de que se encuentran soluciones de un nivel aceptable, en un tiempo competitivo con el resto de algoritmos de optimización combinatoria.
EL ALGORITMO GENÉTICO SIMPLE
ESTRUCTURA DE UN ALGORITMO GENÉTICO SIMPLE
CODIFICACIÓN: Los cromosomas de alguna manera deberán contener información acerca de la solución que representa. La codificación se puede realizar de varias formas. La más utilizada es mediante una cadena de números binarios (1s o 0s). Pero también se puede realizar la codificación mediante números enteros o incluso cadenas de palabras. CRUCE: Indica la frecuencia con la que se producen cruces entre los cromosomas padre es decir, que haya probabilidad de reproducción entre ellos. En caso de que no exista probabilidad de reproducción, los hijos serán copias exactas se los padres. MUTACIÓN: Nos indica la frecuencia con la que los genes de un cromosoma son mutados. Si no hay mutación, los descendientes son los mismos que había tras la reproducción. En caso de que haya mutaciones, parte del cromosoma descendiente es modificado y si la probabilidad de mutación es del 100%, la totalidad del cromosoma se cambia. SELECCIÓN: Como ya hemos visto anteriormente es necesario hacer una selección con los individuos más capacitados para que éstos sean los que se reproduzcan con más probabilidad de acuerdo con la teoría de Darwin en la cual los más capacitados son los que deben sobrevivir y crear una nueva descendencia más facultada.
Características Cada ejecución del algoritmo puede dar soluciones distintas Son algoritmos de búsquedas múltiples, esto requiere decir que dan varias soluciones, unas más calificadas que otras. La convergencia del algoritmo es poco sensible a la población inicial si esta se escoge de forma aleatoria y si el tamaño es muy grande. Este tipo de algoritmos descarta inmediatamente espacios malos al tener una convergencia rápida.
Aplicaciones
Acústica: Diseñar sala de concierto con propiedades acústicas optimas Ingeniería Aeroespacial: Para diseñar la forma de ala de un avión supersónico Mercados Financieros: Predecir el rendimiento futuro de 1.600 acciones ofertadas públicamente Ejecito: Utilizaron algoritmos genéticos para planes tácticos para las batallas militares Reconocimiento de patrones, Robótica, Diseño de rutas, etc.
Ejemplo de algoritmo genético A continuación utilizaremos como individuo una persona que decide tomar la ruta más corta a su recorrido el gen está caracterizada por el número de rutas disponibles en la toma de decisiones, donde el individuo se posiciona en la ruta más cerca para llegar a su destino.
Posición inicial
Llegada
5. Respuesta y justificación de ejercicios. a. Dentro de las búsquedas sin contar con información también conocidas como búsquedas ciegas se encuentran seis estrategias, según la gráfica indique a qué estrategia corresponde y justifique su respuesta:
R: La estrategia de búsqueda usada corresponde la búsqueda preferente por amplitud o también conocida como búsqueda primero en anchura (Russell & Norving, 2004) la cual consiste en que en que todos los nodos que están en la profundidad d del árbol de búsqueda se expandan antes de los nodos que estén en la profundidad d+1, es decir, se evalúa primero los nodos de niveles más cercanos al nodo raíz siguiendo la expansión con los niveles que se alejan de esta, teniendo en cuenta que al existir el objetivo de búsqueda en alguno de estos niveles de profundidad, la búsqueda termina con solución óptima y completa. b. ¿La estrategia de búsqueda que se encarga de manejar la cantidad de memoria necesaria para encontrar la solución, es? Explíquela mediante un ejemplo y justifique su respuesta.
Búsqueda limitada por la cantidad de memoria: Este algoritmo es mucho más complejo que los anteriores y existen diferentes versiones, su principal complejidad viene de cómo se han de reorganizar los caminos memorizados cuando se han de borrar de la memoria, decir que si tenemos una idea aproximada de la longitud de la solución podemos ajustar a priori la cantidad de memoria, cuanta más memoria permitamos, menos regeneraciones de caminos haremos ya que nos los encontraremos almacenados; permitiremos usar al algoritmo adecuadamente y como se hace la propagación de los costes a los nodos ascendientes que se mantienen; almacena todos los caminos que le caben en el tamaño de memoria que se impone y no solo el actual, de manera que se ahorra regenerar ciertos caminos; además este algoritmo elimina los caminos peores en el momento en el que ya no caben más, guardando en los nodos la información suficiente que le permita saber cuándo se han de regenerar, permitiendo reducir bastante las reexpansiones, con el consiguiente ahorro de tiempo y a la vez es capaz de hallar una solución, si el camino completo cabe en la cantidad de memoria que hemos impuesto.
5c. Recibe el nombre de estado múltiple ya que el agente sabe cuál es el resultado de cada una de sus acciones pero el mundo no es totalmente accesible. El agente deberá razonar en términos de los conjuntos de estados a los que puede llegar en lugar de pensar en función de los estados únicos. Problema de estados múltiples es un caso particular del caso de un problema de estado simple particular del caso de un problema de estado simple, en donde cada estado es un multiestado. Ejemplo: Problema de patear penalti: 1
2
3
4
5
6
7
8
9
10
11
12
Teniendo en cuenta que el tirador se encuentre a la mitad: Si decide tirar a la derecha se encontrara con 6 estado posibles {1, 2, 5, 6, 9, 10} Si decide tirar a la derecha arriba {1, 2} Si decide tirar a la derecha medio {5, 6} Si decide tirar a la derecha abajo {9, 10} Si decide tirar a la izquierda se encontrara con 6 estado posibles {3, 4, 7, 8, 11, 12} Si decide tirar a la izquierda arriba {3, 4} Si decide tirar a la izquierda medio {7, 8} Si decide tirar a la izquierda abajo {11, 12} Dónde: Estados: decisión jugador y recuadros para anotar Estado inicial: decisión del jugador Operadores: Izquierda, derecha, arriba, abajo Objetivo: anotar Costo de camino: 1 por operador.
e. Teniendo en cuenta la siguiente gráfica, en el tipo de búsqueda preferente por profundidad ¿Cuál es el recorrido? Justifique su respuesta. Si se utiliza la búsqueda A* ¿cuál sería el resultado?
R: Para efecto académico y suponiendo que el objetivo es el nodo D, los recorridos totales usando la búsqueda preferente por profundidad, antes de llegar al objetivo serían: A AB ABE ABEI ABEJ ABF ABFK ABFL AC ACG ACGM ACGN ACH ACHO ACHP AD
→ → → → → → → → → → → → → → → →
Raíz 1er nivel de profundidad 2do nivel de profundidad 3er nivel de profundidad 3er nivel de profundidad 2do nivel de profundidad 3er nivel de profundidad 3er nivel de profundidad 1er nivel de profundidad 2do nivel de profundidad 3er nivel de profundidad 3er nivel de profundidad 2do nivel de profundidad 3er nivel de profundidad 3er nivel de profundidad 2do nivel de profundidad
REFERENCIAS
González, Ángela (2013). Módulo del curso Inteligencia Artificial. Russell, S., & Norving, P. (2004). Inteligencia Artificial. Un Enfoque Moderno. En S. Russell, & P. Norving, Inteligencia Artificial. Un Enfoque Moderno (pág. 82). Madrid: Pearson Educación, S.A. González, Ángela (2013). Módulo del curso Inteligencia Artificial. Tipos de búsqueda. Extraído el 16 de abril de 2014 de http://www.slideshare.net/alanl0pez/tipos-de-bsqueda-en-inteligencia-artificial
https://www.cs.us.es/cursos/ia1/temas/tema-04.pdf
http://es.wikipedia.org/wiki/Algoritmo_de_b%C3%BAsqueda_A*
http://busqueda-bidireccional.blogspot.com/2011/11/blog-post.html
http://www.angelfire.com/falcon/popikpe/cap_cuatro.htm
http://arantxa.ii.uam.es/~fdiez/docencia/material/bh.pdf
http://www.oocities.org/erikkalaura/PARTE2/PARTEII_BusquedaCon.htm#BAV
file:///C:/Users/GeovannyR/Downloads/BUSQUEDA_PREFERENTE_POR_LO_MEJOR_ BUSQUEDA_AVARA_2010-2.pdf
http://daquilaj.tripod.com/p2_c4.html
http://eisc.univalle.edu.co/~oscarbed/IA/Tema4.pdf
http://www.iiia.csic.es/~pedro/busqueda1-introduccion.pdf
http://www.julioallasia.4t.com/busquedainf.html
http://tecnologias-lasherramientasdelfuturo.blogspot.com/2010/03/busqueda-heuristica.html
http://prezi.com/awxsbnc_3dbt/busqueda-por-profundidad-iterativa/
http://algoritmo-minimax.blogspot.com/2011/11/algoritmos-alternativos.html
facultat d'informatica de Barcelona, APUNTS D’INTEL.LIG`ENCIA ARTIFICIAL 2013
http://dmi.uib.es/~abasolo/intart/2-juegos.html#2.2.
http://www.dc.fi.udc.es/ai/~barreiro/iadocen/puzzle8-98/introalgoritmos.html
http://www.proescholdt.de/progs/ia/p3/Tercera_practica.pdf
GOLDBERG, D.E. (1989): Genetic Algorithms in Search, Optimization, and
Machine Learning. Addison-Wesley, Reading, MA.