Inteligencia Artificial 092

37
Inteligencia Artificial _________________________________________________________________________ 92 UNIDAD 4 BÚSQUEDA Y SATISFACCIÓN DE RESTRICCIONES

Transcript of Inteligencia Artificial 092

Page 1: Inteligencia Artificial 092

Inteligencia Artificial

_________________________________________________________________________92

UNIDAD 4

BÚSQUEDA Y SATISFACCIÓN DE RESTRICCIONES

Page 2: Inteligencia Artificial 092

Inteligencia Artificial

_________________________________________________________________________93

UNIDAD 4

BÚSQUEDA Y SATISFACCIÓN DE RESTRICCIONES

4.1.- Problemas y espacios de estados. La definición del problema La Inteligencia Artificial ha tenido siempre como objetivo, a más o menos largo plazo, la resolución de problemas. La utilización de procedimientos de búsqueda, primero más directos y luego con técnicas heurísticas más sofisticadas, ha sido uno de los principales campos de esta ciencia [5]. De hecho, la resolución mediante búsqueda ha sido una de las primeras aplicaciones de la Inteligencia Artificial a problemas reales, no “de juguete”, como se le achacó en sus inicios. La orientación de la Inteligencia Artificial siempre fue más hacia un mejor conocimiento de “cómo” resolver los problemas, y no tanto a la consecución del resultado final. Por eso los ejemplos iniciales sobre los que desarrollaron las estrategias de la Inteligencia Artificial fueron problemas simples como puzzles, juegos, apilar bloques, etc., ejemplos ya clásicos que han servido de banco de pruebas. Sin embargo, aunque pudieran parecer realmente procesos simples, ¿cómo definir un problema con la suficiente precisión y cómo representarlo para que una máquina pueda resolverlo? En muchos casos no existe realmente un conocimiento sistemático del problema de forma que se pueda plantear una solución analítica del mismo mediante un sistema de ecuaciones, por ejemplo. En estas circunstancias, los procedimientos de búsqueda sí se pueden aplicar para resolverlos y se han demostrado muy eficientes para abordar este tipo de tareas. En general, el planteamiento de un problema de búsqueda consiste en encontrar o conseguir un objetivo. La resolución del mismo puede estructurarse en los siguientes pasos:

1. Determinar una serie de objetivos o metas que se desean alcanzar. Estos objetivos pueden ser múltiples (restricciones de tiempo, de costo, etc.) o simples (alcanzar un estado final).

2. Disponer de un conjunto de acciones que conduzcan a la obtención de los

objetivos o metas. Estas acciones son denominadas operaciones.

3. Definir un procedimiento de selección entre las diferentes formas de alcanzar las metas. Cada una de estas soluciones constituye una secuencia de acciones determinada y posible. Se suele llamar solucionador al módulo encargado de construir dicha solución.

Page 3: Inteligencia Artificial 092

Inteligencia Artificial

_________________________________________________________________________94

No hay que perder de vista, aunque los métodos de búsqueda se reduzcan en muchos casos a meros algoritmos matemáticos, que lo que se persigue desde el punto de vista de la Inteligencia Artificial es entender el problema que se trata de resolver, analizar sus posibles soluciones y las consecuencias de buscar una solución por un camino u otro. No se trata tanto de encontrar una solución final óptima o al menos convincente como de haber ganado en el conocimiento de un problema que se puede aplicar a una situación real. Aunque hoy día tal y como están implementados los métodos de búsqueda no reflejen la forma en la que los seres humanos resolvemos los problemas, no dejan de ser estrategias muy eficientes y probadas, y siempre han tenido su lugar dentro de la Inteligencia Artificial. Espacio de estados Cuando alguien se plantea resolver un problema, ya sea por ejemplo un juego simple como el “tres en raya” o alguno más complejo, como el ajedrez o el backgammon, tenemos al menos mentalmente una representación del espacio en el que se va a desarrollar el mismo, es decir una imagen gráfica o un mapa del terreno, del tablero, en el que va tener lugar la estrategia de solución. Para su resolución computacional, el primer paso es buscar una estructura de datos que capture lo esencial de ese juego o problema, que refleje con propiedad la distribución de los elementos en un espacio de situaciones o posiciones posibles. Se denomina espacio inicial aquel del que partimos, y que refleja la estructura que subyace en el problema. Por ejemplo, para el juego del “tres en raya” sería una matriz cuadrada de 3x3 posiciones, inicialmente vacías (Véase anexo Tres en Raya). Desde cualquier estado se pueden ampliar una serie de operadores que modifican el estado actual para llevar al sistema a un nuevo estado. Por ejemplo, cuando un jugador coloca una ficha en el tablero. En nuestra representación computacional, esto sería equivalente a rellenar una celda de la matriz con X(1) o O(0) según el jugador que haya movido la pieza. En esta representación al aplicar los operadores a un determinado estado producen un único nuevo estado. La combinación del espacio inicial y los operadores forma el espacio de estados o espacio de representación. Es decir, es el entorno donde se desarrolla el proceso de búsqueda, y lo componen todos los estados por los que se avanza y que se van recorriendo en la tarea de llegar a la meta. Cada uno de los estados recorridos es una situación candidata a ser solución. La secuencia de estados que resulta de la aplicación válida de operadores a partir del estado inicial se denomina traza en el espacio de estados. Esta secuencia de operaciones nos permite ir avanzando en nuestro espacio de estados a situaciones válidas que nos van acercando al objetivo final. La estrategia de control es la encargada de optimizar el proceso de búsqueda, determinando los operadores aplicables y utilizando información del dominio cuando ésta sea conocida.

Page 4: Inteligencia Artificial 092

Inteligencia Artificial

_________________________________________________________________________95

Por contraposición se podría hablar de los espacios de reducción, donde al aplicar un operador se generan una serie de subproblemas, cada uno de los cuales será en general más sencillos que el original (de ahí el término reducción que lo describe). Se aplica el conocido principio de “divide y vencerás”, para llegar a problemas de menor dimensión que tengan solución conocida. Algo importante a implementar en los problemas de búsqueda es el criterio para detectar cuándo se ha llegado a la consecución del objetivo propuesto. En nuestro juego se trataría de identificar sobre el tablero si alguna fila, columna o diagonal está formada por todo Xs o Os. En este caso la prueba final es sencilla, pero la definición del criterio la consecución del objetivo final puede ser en sí misma un problema importante [8]. En muchos problemas de búsqueda el interés se centra no sólo en conseguir un estado final, sino en alcanzarlo en el mínimo tiempo posible, o minimizando otro tipo de costo (en definitiva, maximizando un beneficio). En estos casos se puede asociar un costo o peso a los operadores que se aplican y también a las transiciones de un estado a otro. Esta traza del costo o función de costo se denota habitualmente con la letra g. Permite comparar distintos algoritmos de resolución tanto por la solución obtenida como por la cantidad de la misma en términos de costo asociado. En algunos problemas como el del ejemplo del juego de “tres en raya”, el espacio de búsqueda es limitado, porque también lo está el espacio de estados posibles y de soluciones. Pero en muchos problemas del mundo real el espacio de búsqueda no está acotado, e incluso puede alcanzar dimensiones muy grandes que exijan algoritmos que puedan escalarse para tratar espacios muy extensos. Hay otros aspectos sobre el funcionamiento de los algoritmos de búsqueda que se pueden tener en cuenta. Por ejemplo:

• Un algoritmo es óptimo si encuentra la mejor solución entre todas las posibles. • Una estrategia es completa si garantiza que encontrará una solución siempre y

cuando ésta exista. La eficiencia de un algoritmo en términos de complejidad temporal (cuánto tiempo requiere para alcanzar la solución) o en términos de complejidad espacial (memoria que necesita) son consideraciones prácticas de gran importancia. Un algoritmo óptimo que garantiza encontrar la mejor solución tendrá poco valor práctico si tarda horas en completarse, cuando a lo mejor sólo contamos con unos minutos para tomar una decisión. De forma similar, un algoritmo completo que utilice mucha memoria es inútil si antes de encontrar la solución a un problema se queda sin memoria. Representación en el espacio de estados Para aplicar las estrategias de búsqueda a problemas en el espacio de estados se suele trabajar con una representación de la información mediante grafos.

Page 5: Inteligencia Artificial 092

Inteligencia Artificial

_________________________________________________________________________96

Un grafo representa el conjunto de mundos, escenarios o situaciones que se pueden generar mediante los operadores u acciones. Se denomina por lo tanto grafo de estados ya que indica el recorrido del proceso de búsqueda que va moviéndose de un estado a otro, en la consecución del objetivo final. Un grafo por lo tanto es un conjunto de nodos (estados) y arcos que unen esos nodos figura 18. El recorrido entre dos nodos consecutivos a través de un arco define un camino. Dentro del espacio de estados en un problema de búsqueda, cada nodo representa un elemento que equivale a una situación válida (nodo y estado son sinónimos en este contexto). El nodo Terminal que satisface las condiciones del objetivo, es decir, la función de costo es la meta. Este camino puede ser cerrado si el último nodo coincide con el primero y abierto si no coinciden. Si entre dos nodos existe al menos un camino, es un grafo conexo, y si no contiene ciclos, es acíclico.

Figura 18. Ejemplo de un grafo. Los grafos pueden ser dirigidos, cuando la secuencia entre dos nodos (P, Q) se considera diferente de la que recorre los nodos en el orden (Q, P); en este caso el origen es el nodo predecesor o padre, y el destino el sucesor o nodo hijo; o pueden ser no dirigidos, en el caso contrario. Expandir un nodo es obtener todos sus posibles sucesores en el grafo de búsqueda a través de la aplicación de todos los operadores disponibles relacionados. Un nodo o estado es “cerrado” si ya ha sido expandido, y esta “abierto” si todavía queda por aplicar algún operador. A estos últimos también se les denomina margen o frontera.

H

B C

JG F

A

D E

LK

Nodos Arcos

Page 6: Inteligencia Artificial 092

Inteligencia Artificial

_________________________________________________________________________97

En general un problema de búsqueda se representa por un árbol, que es un grafo dirigido acíclico conexo. El obtener el árbol de búsqueda es la tarea prioritaria en todo problema de búsqueda o de decisión ya que en definitiva la resolución del problema es un recorrido a través del mismo. Por eso es crucial que represente toda la información disponible con las dependencias y relaciones que existan. Aplicando esta representación al juego de “tres en raya”, cada nodo es un estado o valor de la matriz; cada arco apunta la operación que lleva de un valor de la matriz a otro, por ejemplo, cuando el jugador X mueve un 1 de una celda a otra celda válida. Los nodos terminales son aquellos que dan una configuración ganadora. Otro ejemplo sería la representación arbórea de un laberinto, donde cada nodo sería una bifurcación, salida o pared al final de un camino, y cada arco un camino. El problema consiste en encontrar el camino más corto a una salida, nodo final. Problemas de la vida real que se pueden plantear y resolver como espacios de estados [21]:

• Búsqueda de rutas en redes informáticas. • Rutas aéreas para viajar. • Problema del viajante. • Diseño de microchips. • Ensamblaje de componentes. • Desplazamiento de robots.

Ejemplos de espacios de estado Como un simple ejemplo de espacios de estado, consideremos la compra de una bebida gaseosa en una máquina expendedora: cuando se depositan monedas en la máquina, ésta hace una transición de un estado a otro [2]. En la siguiente figura 19 se ilustra el espacio de estado, suponiendo que sólo están disponibles monedas de 25 y de 5 centavos, y que se requieren 55 centavos para obtener una bebida. Si consideramos monedas de otras denominaciones, como de 10 y 50 centavos, se complica más la gráfica y no se muestra aquí.

Page 7: Inteligencia Artificial 092

Inteligencia Artificial

_________________________________________________________________________98

Figura 19. Gráfica de estado para una máquina expendedora de bebidas gaseosas que acepta

monedas de 25 y 5 centavos.

Los estados de inicio y éxito se dibujan como círculos dobles para facilitar su identificación. Los estados se muestran como círculos y las transiciones posibles a otros estados se muestran como flechas. Observe que esta gráfica es una gráfica con pesos, donde éstos son las monedas que pueden entrar a la máquina en cada estado. A esta gráfica también se le llama gráfica de máquina de estado finito, porque describe el número finito de estados de una máquina. El término máquina se usa en un sentido muy general, puede ser un objeto real, un algoritmo, un concepto, etc. Asociadas con cada estado hay acciones que la conducen a otro. En cualquier momento, la máquina puede estar en un solo estado. A medida que acepta la entrada a un estado, pasa de ese estado a otro. Si se dan las entradas correctas, pasará del inicio al éxito o estado final. Si un estado no está diseñado para aceptar cierta entrada, la máquina se detendrá en él. Por ejemplo, la máquina de bebidas gaseosas no tiene la capacidad de aceptar monedas de diez centavos, si alguien pone una de estas monedas en la máquina, la respuesta no está definida. Un buen diseño incluirá la posibilidad de entradas no válidas para cada estado y proporcionará transiciones a un estado de error. Este es diseñado para proporcionar mensajes de error apropiados y llevar a cabo cualquier acción necesaria.

5

10

15

20

25

30

35

40

45

50

Éxito

Inicio

5

5

25

25

25

25

25

5

5

5

5

5

5

5

5

25,5 25

25

25

25

255

10

15

20

25

30

35

40

45

50

Éxito

Inicio

5

5

25

25

25

25

25

5

5

5

5

5

5

5

5

25,5 25

25

25

25

25

Page 8: Inteligencia Artificial 092

Inteligencia Artificial

_________________________________________________________________________99

Otro ejemplo de espacio de problema sucede en el problema clásico del mono y los plátanos que se muestra en la siguiente figura 20. El problema consiste en dar instrucciones a un mono para decirle cómo alcanzar algunos plátanos que cuelgan del techo. Como los frutos están fuera de su alcance, pero dentro del cuarto hay un sofá y una escalera. La configuración inicial típica es la del mono en el sofá. Las instrucciones pueden ser: Salta del sofá Ve a la escalera Pon la escalera bajo los plátanos Trepa la escalera Agarra los plátanos

Figura 20. El espacio de estado para el problema del mono y los plátanos.

Las instrucciones variarán de acuerdo con las posiciones iniciales del mono, el sofá la escalera. Como hay varios estados iniciales, no se muestra aquí el doble círculo especial de inicio. Por ejemplo, otro estado de inicio posible es con el mono en el sofá debajo de los plátanos, de esta manera, el mono tendrá entonces que hacer el sillón a un lado antes de poner la escalera debajo de los plátanos. En el estado inicial más simple, el mono ya se encuentra en la escalera debajo de los plátanos. Aunque este problema parece obvio para un ser humano, requiere una considerable cantidad de razonamiento. Una aplicación práctica de un sistema de razonamiento como

Mono en el sofá

Mono en el piso

Sofá bajolos plátanos

El sofá no está bajo los

plátanos

Mono esta en la

escalera

Si la escalera

está bajo losplátanos

Mono enla escalera

El mono noestá en la escalera

La escaleraNo está bajo

Los plátanos

Éxito,el mono tiene

losplátanos

Baja el sofá Si el sofá está bajolos plátanos

Mover el sofá

Mover al mono

Mover la escalera

Si el mono no está enla escalera

Si la escalera no está bajolos plátanos

Si el sofá no estáBajo los plátanos

Si el mono está en la escalera

Si la escalera estabajo los plátanos

Trepar por la escalera

Agarrar plátanos

Mono en el sofá

Mono en el piso

Sofá bajolos plátanos

El sofá no está bajo los

plátanos

Mono esta en la

escalera

Si la escalera

está bajo losplátanos

Mono enla escalera

El mono noestá en la escalera

La escaleraNo está bajo

Los plátanos

Éxito,el mono tiene

losplátanos

Baja el sofá Si el sofá está bajolos plátanos

Mover el sofá

Mover al mono

Mover la escalera

Si el mono no está enla escalera

Si la escalera no está bajolos plátanos

Si el sofá no estáBajo los plátanos

Si el mono está en la escalera

Si la escalera estabajo los plátanos

Trepar por la escalera

Agarrar plátanos

Page 9: Inteligencia Artificial 092

Inteligencia Artificial

_________________________________________________________________________100

éste, es la de dar a un robot instrucciones relacionadas con la realización de una tarea. En lugar de suponer que todos los objetos del ambiente se mantienen fijos en un lugar, una solución general es un sistema de razonamiento que puede tratar con diversas situaciones.

4.2.- Espacios de estados determinísticos y espacios no determinísticos. Determinismo Definición: Explicación de la realidad basada en la existencia de productores de resultados predectibles. Los programas determinísticos se ramifican al llegar a un IF... THEN, sólo en base a condiciones absolutas. El determinismo aplica habitualmente lógica dicotómica10 para verificar variables de tal manera de mantener bajo control el flujo del programa, llevando a éste hacia la producción de resultados deseados. Cuanto más una técnica de programación sea comandada por los datos, tanto menos predecible es el resultado. Algoritmo Determinístico Un algoritmo determinístico es un algoritmo que en términos informales: es completamente predictivo si se conocen las entradas al mismo. Dicho de otra forma si se conocen las entradas del algoritmo siempre producirá la misma salida, y la máquina interna pasará por la misma secuencia de estados. Este tipo de algoritmos ha sido el más estudiado durante la historia y por lo tanto resulta ser el tipo más familiar de los algoritmos, así como el más práctico ya que puede ejecutarse en las máquinas eficientemente [22]. Un modelo simple de algoritmo determinístico es la función matemática, de esta forma se puede establecer el siguiente paralelismo: la función extrae la misma salida para una entrada dada, al igual que los algoritmos determinísticos. La diferencia es que un algoritmo describe explícitamente como la salida se obtiene de la entrada, mientras que las funciones definen implícitamente su salida. Definición Formalmente los algoritmos determinísticos se pueden definir en términos de una máquina de estado: un estado describe que está haciendo la máquina en un instante particular de tiempo. Justo cuando se produce la entrada, la máquina comienza en su estado inicial y posteriormente si la máquina es determinística comenzará la ejecución de la secuencia de

10 Un método de razonamiento basado en que cada restricción del problema puede ser considerada verdadera o falsa. La dicotomía verdadero/falso, una vez aplicada a cada restricción del problema, provee bases para la ramificación bajo la forma de árboles decisionales. Aristóteles propuso una lógica con dos valores. La matemática de la lógica de dos valores, sirvió como base durante muchos años para la mayoría de las estructuras de control en lenguajes de programación.

Page 10: Inteligencia Artificial 092

Inteligencia Artificial

_________________________________________________________________________101

estados predeterminados. Es de notar que una máquina puede ser determinística y no tener límite temporal para la ejecución o quedarse en un bucle de estados cíclicos eternamente. Ejemplos de máquinas abstractas determinísticas se pueden incluir en máquinas de Turing determinísticas y los autómatas finitos determinísticos. Problemas con los algoritmos determinísticos Desafortunadamente para algunos problemas es muy difícil implementar un algoritmo determinístico. Por ejemplo, existen eficientes y simples algoritmos probabilísticos que pueden determinar si un número entero es primo o no pero tienen una pequeña posibilidad de equivocarse (Test de primalidad de Fermat). Algunos de ellos son muy conocidos desde 1970; solamente tras otros 30 años de investigación focalizada en investigar se ha encontrado un algoritmo determinístico similar, pero mucho más lento. Otro ejemplo puede encontrarse en los problemas NP-completos dentro de esta categoría puede encontrarse la mayoría de los problemas prácticos, este tipo de problemas puede resolverse rápidamente empleando de forma masiva y paralela una Máquina de Turing no determinística, pero no se ha encontrado aún un algoritmo eficientes para esta tarea, al menos ahora sólo encuentran soluciones aproximadas en casos especiales. Otro problema sobre el planteamiento de algoritmos determinísticos es que a veces no es "deseable" que los resultados sean completamente predecibles. Por ejemplo, si se es un jugador que juega al blackjack un algoritmo puede mezclar una serie de Generador de números pseudoaleatorios y de esta forma un apostador espabilado podría averiguar los números del generador y determinar las cartas sobre la mesa de juego permitiendo engañar durante todo el tiempo al croupier11 (esto ocurre actualmente). Problemas similares pueden encontrarse en criptografía, donde las claves privadas a menudo se crean mediante uno de estos generadores. Este tipo de problemas se evita mediante el empleo de un Generador criptográfico seguro de números pseudo-aleatorio. Algoritmo no Determinístico Un algoritmo no determinístico es un algoritmo que ofrece más de una única salida en función de su entrada, siempre que no se haya dado otra especificación adicional. Una ejecución de estos algoritmos permite elegir en un instante dado una secuencia de posibles estados de salida para una misma entrada o estado inicial. Los algoritmos no determinísticos no permiten "a priori" saber cual será el resultado o el estado en el que quedará el sistema. En la teoría estándar de computación el término algoritmo deja claro que se trata de algoritmos determinísticos. Sin embargo, estos emplean modelos de computación, tales como el non deterministic finite state machine, que es no-determinístico.

11 Es el encargado de efectuar los pagos y retirar las apuestas.

Page 11: Inteligencia Artificial 092

Inteligencia Artificial

_________________________________________________________________________102

En diseño general de algoritmos, esta categoría de algoritmos no-determinísticos se suele emplear como especificaciones. Convirtiendo algoritmos no determinísticos en determinísticos Una forma de simular algoritmos no determinísticos N mediante el empleo de otros determinísticos D puede realizarse tratando los estados de N como estados de D. Esto significa que D puede tracear todas las posibilidades y trayectorias de ejecución del algoritmo N. Otra posibilidad es emplear algoritmos de generación de números aleatorios que consisten en perturbar los estados mediante el establecimiento de todas las posibilidades mediante un generador de números aleatorios. El resultado es un algoritmo determinístico probabilístico. ¿Qué hace a un algoritmo no determinístico? Una variedad de factores puede ser la causa de que un algoritmo determinístico se comporte como de una forma no determinística:

• Si emplea en la ejecución de la secuencia de estados otro estado "externo" como entrada del proceso, como por ejemplo: una entrada de un usuario, una variable objetivo, un valor de un temporizador de hardware, un valor aleatorio, etc.

• Si al operar se encuentra con concurrencia de estados, por ejemplo si tiene

múltiples procesadores escribiendo al mismo tiempo en un fichero. En este caso el orden preciso en el que cada procesador escribe el dato puede afectar a la salida y no está pre-planificado su valor inicial.

• Si un error (cuyo origen puede deberse al hardware o al software) causa un

inesperado cambio en la secuencia de ejecución de estados. Aunque los programas reales rara vez son puramente determinísticos, es más fácil que los seres humanos así como otros programas determinar sobre la esencia de lo que realmente son. Por esta razón, la mayoría de los lenguajes de programación y especialmente aquellos que entran dentro de la categoría de programación funcional son lenguajes que hacen un esfuerzo en prevenir eventos que se ejecutan sin control. Por esta razón este tipo de restricciones fuerzan el carácter determinístico por esta razón a los algoritmos determinísticos se les denomina purely functional.

Page 12: Inteligencia Artificial 092

Inteligencia Artificial

_________________________________________________________________________103

4.3.- Búsqueda sistemática. Se van a examinar técnicas básicas que se utilizan para resolver problemas de búsqueda en el ámbito de la Inteligencia Artificial, dentro de la búsqueda por fuerza bruta o a ciegas es la que no cuenta con información a priori que la dirija en su secuencia de acciones para la consecución del objetivo final. Es decir, realiza una búsqueda exhaustiva.

4.3.1.- Búsqueda de metas a profundidad. La búsqueda en profundidad es otra forma de recorrer sistemáticamente una estructura del árbol para encontrar el nodo solución, pero recorriéndolo en profundidad, es decir, bajando de nivel. En vez de buscar de forma exhaustiva en cada nivel, este algoritmo sigue las ramas del árbol hacia abajo hasta el nivel más inferior que pueda, hasta que encuentra la solución o un nodo sin hijos. Se trata de expandir un único camino desde la raíz. En el caso de llegar a un callejón sin salida se retrocede hasta el nodo más cercano desde donde se pueda tomar una rama alternativa para seguir avanzando figura 21 [5]. La complejidad temporal de esta estrategia es la misma que la del procedimiento de búsqueda en amplitud, puesto que para un grafo de una determinada profundidad se generan los mismos nodos, aunque en diferente orden. Sin embargo, esta estrategia puede ser muy ineficiente ya que el algoritmo puede dedicarse a recorrer un camino demasiado largo que no conduzca a ninguna solución, o meterse en bucles infinitos. Por eso el algoritmo de búsqueda en profundidad no es completo ni óptimo. El procedimiento sigue los siguientes pasos:

1. Crear una lista de nodos e inicializarla con el nodo raíz (estado inicial). Esta lista se maneja como una pila LIFO (last-in first-out).

2. Lazo:

2.1. Si la lista esta vacía, salir. 2.2. Extraer el primer nodo de la lista.

2.3. Si la lista contiene el nodo meta, salir. 2.4. Para cada hijo del nodo actual, expandirlo y añadir todos sus hijos

como nuevos nodos al principio de la cola.

La solución es el primer nodo de la lista

Page 13: Inteligencia Artificial 092

Inteligencia Artificial

_________________________________________________________________________104

Figura 21. Árbol de búsqueda

La lista a gestionar tendría los siguientes valores para la figura anterior.

Estado de la cola iteración H A B C Extraer H+hijos de H D E B C Extraer A+hijos de A K L E B C Extraer D+hijos de D L E B C Extraer K E B C Extraer L B C Extraer E F C Extraer B+hijos de B C Extraer F G J Extraer C+hijos de C

El recorrido realizado sería:

H A D K L E B F C G J

La complejidad espacial se reduce con respecto al anterior ya que sólo es necesario guardar la constancia del camino construido hasta el momento. La complejidad para un camino de longitud p será dicho valor más el factor de ramificación(r), es decir, O(p+r). Además, cuando existen múltiples soluciones posibles, la eficiencia del método aumenta. Debería establecerse un límite de nivel de exploración para acortar la longitud real del camino de la solución. Esta estrategia se denomina búsqueda limitada por profundidad. Se impone a la profundidad máxima de un recorrido (lp), que debe ser estimada en cada paso. Esta variante tiene la ventaja de que en general es completa (excepto para límites muy pequeños) aunque no es óptima.

H

B C

JG F

A

D E

LK

Page 14: Inteligencia Artificial 092

Inteligencia Artificial

_________________________________________________________________________105

La elección de límite de profundidad adecuado puede resultar crucial para la obtención de la solución. La búsqueda por profundización iterativa (iterative deepening) evita los problemas que conlleva esa elección probando de forma iterativa todos los límites de profundidad posibles. Así, comienza con profundidad cero (nodo raíz), para probar con profundidad 1, 2, etc. Esta estrategia es óptima y completa. De hecho, es el método idóneo para problemas con espacios de búsqueda de dimensión grande, de los que no se conocen sus límites de profundidad. Es una comunicación de la búsqueda preferente por amplitud y en profundidad. Otra variante de este método es la llamada búsqueda de retroceso en la que, en lugar de generar todos los sucesores al expandir un nodo, se genera un único sucesor en cada paso, que será el que se expanda. La lista a gestionar tendría los siguientes valores para la figura 21 de ejemplo:

H A D K L B F C G

El recorrido hasta encontrar los nodos solución sería:

H A D K L B F C G Su principal ventaja es que requiere menor espacio de almacenamiento que la búsqueda en profundidad: sólo hay que recordar en cada instante un sucesor del nodo seleccionado, es decir, su complejidad es O(p). Otra ventaja es que no se generan las ramas del árbol de búsqueda que se encuentren después del camino de la solución. Sin embargo, la complejidad temporal es la misma que con los otros algoritmos, y tiene un factor de indeterminación en el orden del recorrido de los nodos que puede hacerle perder su eficiencia.

4.3.2.- Búsqueda de metas en anchura.

Se denomina también recorrido en anchura prioritaria. El algoritmo define una forma de moverse a lo largo de la estructura arbórea examinando los valores de los nodos de manera sistemática y controlada, de forma que se pueda encontrar un nodo de solución [5]. La idea es generar varias trayectorias de una determinada longitud antes de crear una trayectoria más larga.

Page 15: Inteligencia Artificial 092

Inteligencia Artificial

_________________________________________________________________________106

Es decir, se recorren de izquierda a derecha, todo los subobjetivos generados por el objetivo de nivel inmediatamente superior antes de considerar el siguiente nivel de profundidad del árbol. Se examina cada nodo situado a un paso del estado inicial, y después dos niveles más allá, y así sucesivamente, hasta que se han considerado todos los nodos del árbol o se ha encontrado la solución. En un procedimiento completo: se garantiza encontrar una solución si ésta existe. Pero en general no es óptimo (no encontrará la mejor solución, simplemente la primera que satisfaga el objetivo) figura 22. Específicamente se realiza mediante los siguientes pasos:

1. Crear una lista de nodos e inicializarla con el nodo raíz (estado inicial). Esta

lista se maneja como una cola FIFO (first-in-first-out).

2. Lazo: 2.1. Si la lista está vacía, terminar. 2.2. Quitar el primer nodo de la lista. 2.3. Si la lista contiene el nodo meta, salir.

2.4 Expandir el nodo actual y añadir todos sus hijos como nuevos nodos al final de la cola.

Figura 22. Árbol de búsqueda.

H

B C

JG F

A

D E

L K

La solución es el primer nodo de la lista

Page 16: Inteligencia Artificial 092

Inteligencia Artificial

_________________________________________________________________________107

La lista para gestionar el árbol de la figura 22 tendrá los siguientes valores:

Estado de la cola iteración

H A B C Extraer H+hijos de H B C D E Extraer A+hijos de A C D E F Extraer B+hijos de B D E F G J Extraer C+hijos de C E F G J K L Extraer D+hijos de D F G J K L Extraer E G J K L Extraer F En éste último paso se comprobaría que el primer nodo de la lista es uno de los nodos solución. Es decir, los nodos recorridos serian los representados en la diagonal:

H A B C D E F G J K L

Por lo tanto, al llegar al nodo G se terminaría el algoritmo dando esa solución. Como puede observar, el nodo L, la otra meta, sería el último en alcanzarse.

Si el nivel de profundidad asociado a la solución es significativamente menor que el factor de ramificación, se expandirán demasiados nodos inútilmente. Por eso una variante muy utilizada de esta estrategia es la denominada “prioridad al mejor” (best-first), consistente en seleccionar primero los nodos con el mínimo número de subobjetivos y recorrerlos así; es decir, en el ejemplo:

H B F C G J A E D K L

De esta forma se llega a la solución de forma mucho más eficiente. En este ejemplo se encontraría el nodo G a la quinta iteración. Este método tiene complejidad exponencial tanto temporal como espacial. La complejidad temporal depende del factor de ramificación y de la profundidad de la solución. Si el número medio de sucesores es n (se utiliza el valor medio ya que el árbol de búsqueda no tiene por qué ser uniforme; es decir, no todos los nodos tienen igual número de sucesores) y la solución se alcanza en el nivel p, el tiempo empleado es 1+n+n2+…+np. Siendo p un valor generalmente grande, la complejidad será del orden O(np). La complejidad espacial es también del orden O(np), lo que hace difícil de utilizar en problemas reales. Las complejidades de las estrategias de búsqueda se calculan considerando el “peor caso”. Es decir, tanto la complejidad temporal como la espacial crecen exponencialmente con esta estrategia de búsqueda, por lo que sólo se pueden aplicar a problemas de pequeña dimensión.

Page 17: Inteligencia Artificial 092

Inteligencia Artificial

_________________________________________________________________________108

4.3.3.- Búsqueda óptima. Todas las técnicas de búsqueda descritas hasta ahora están diseñadas para encontrar una solución. Como se demostrará con las búsquedas heurísticas, existen esfuerzos para mejorar la posibilidad de encontrar una solución buena, y preferiblemente óptima. Sin embargo, algunas veces solo se desea la solución óptima. El término solución óptima en el sentido en que lo utilizamos aquí simplemente significa la mejor ruta que se pueda encontrar usando una de las distintas técnicas de generación de múltiples soluciones –que puede que no sea, de hecho, la mejor solución-. Encontrar la auténtica solución óptima exige la utilización de Inteligencia Artificial, extremadamente costosa y una búsqueda exhaustiva. Búsqueda Heurística La búsqueda heurística tiene muchos ejemplos en la vida real. Uno de los más conocidos es el problema del viajero, donde un vendedor tiene que recorrer una serie de ciudades de una forma que en su ruta sólo puede pasar una vez por cada ciudad y además tiene que hacer el menor recorrido posible. Es un tipo de problema donde el numero de soluciones sigue una ley de explosión combinatoria, conocidos como np-completos. Es decir, no puede ser resuelto por los algoritmos de búsqueda ciega. Son problemas para los que es imposible computacionalmente encontrar la mejor solución para dimensiones elevadas por ese crecimiento exponencial. La única forma de abordarlos es conformarnos con una solución suficientemente buena, hay varios métodos de búsqueda heurística que proporcionan formas prácticas de hacerlo [5]. Las estrategias de búsqueda heurísticas se caracterizan por la tendencia a limitar el tiempo y el espacio en donde buscar la respuesta a problemas complejos, y asumir que aceptaremos cuando le encontremos una buena solución, que puede no ser óptima. En este sentido, aplicamos reglas heurísticas o empíricas para determinar a lo largo de un recorrido cuál es el trayecto que con mayor probabilidad nos lleve a una solución. Los algoritmos vistos hasta ahora se denominan en general algoritmos de generación y prueba. Su implementación más básica, los pasos para ejecutarlos son:

1. Generar una posible solución, ya sea un nuevo estado o un camino a través del espacio de búsqueda.

2. Probar si ese nuevo estado o camino generado es una solución comparándolo con un conjunto de estados objetivo.

3. Si es la solución, terminar. En otro caso, volver al paso 1. Realmente es un recorrido en profundidad que realiza una búsqueda exhaustiva del espacio de estados. Si hay una solución, este algoritmo la encontrará, aunque probablemente le lleve mucho tiempo. Para problemas de dimensiones pequeñas puede ser efectivo, pero para problemas más complejos esta búsqueda no guiada es impracticable.

Page 18: Inteligencia Artificial 092

Inteligencia Artificial

_________________________________________________________________________109

Su principal desventaja radica en que no hay ninguna información relativa a en qué dirección orientar la búsqueda, por lo que se han desarrollado otras estrategias para incorporar este tipo de conocimiento con el uso de las funciones heurísticas. La búsqueda heurística utiliza información adicional sobre el problema específico, como el costo o la distancia al estado final. Para tener en cuenta esta información, los métodos heurísticos utilizan las denominadas funciones de evaluación heurísticas f que calculan o evalúan el valor de cada nodo particular en el árbol de búsqueda, dando una idea de lo cerca o lejos que se encuentra del nodo objetivo. Es decir, son aplicaciones que hacen corresponder a cada estado del espacio de búsqueda un valor numérico cj.

f(estadoj)=cj

Con estos valores se puede estimar el costo que llevaría recorrer sus ramificaciones, guiando la búsqueda hacia aquellos caminos que parecen más prometedores. El valor máximo o mínimo de las funciones heurísticas debe alcanzarse en un estado meta. Los principales métodos de búsqueda heurística son:

• Ascensión a la cima o gradiente. • Primero el mejor. • Búsqueda menor costo. • Algoritmo A*. • Algoritmos genéticos.

Ascensión a la cima o gradiente El método de la ascensión de la cima (hill-climbing) incorpora cierta información que resulta del paso 2 descrito anteriormente en la búsqueda heurística, es decir, de la evaluación del estado actual para mejorar la generación de un nuevo estado candidato. Al evaluar un estado mediante la función prueba se le asocia una medida o estimación de su distancia al estado objetivo, que servirá para orientar la generación del siguiente. Son algoritmos denominados de mejoramiento iterativo ya que parten de una configuración completa del espacio de estados, y sobre ese escenario se van modificando para mejorar la calidad de la solución. Es decir, se trata de buscar la solución óptima en toda la superficie que representa al problema mediante pasos iterativos hacia la meta. Por ejemplo, si se trata de identificar un máximo en la función de calidad (ascensión a la cima), el algoritmo se ejecutaría como un bucle que se desplaza constantemente en la dirección del valor ascendente. En el caso del método del gradiente, como la función de evaluación es un costo que se intenta minimizar, la iteración se actualizaría en la dirección de los valores decrecientes. Sin embargo, uno de sus principales problemas es que puede caer en los extremos locales. Porque estamos siempre avanzando en la dirección del menor costo, por ejemplo,

Page 19: Inteligencia Artificial 092

Inteligencia Artificial

_________________________________________________________________________110

se puede seguir un camino que alcance una buena solución pero dejando de lado la solución óptima que quizás se encontraba muy cerca. De este mínimo o máximo local es difícil salir ya que cualquier movimiento nos llevará a un próximo estado peor, con menor valor de bondad en la función de evaluación. En algunos casos el espacio de búsqueda presenta una meseta o zona plana en la cual cualquier nuevo estado tiene asociado el mismo valor que el anterior, por lo que el algoritmo se estancará ya que no encontrará la diferencia de valores positiva o negativa necesaria para avanzar. Para evitar estos extremos locales se han propuesto diversas estrategias. Una consiste, por ejemplo, en forzar un reinicio aleatorio. Cuando no se logra ningún avance significativo se recomienza desde otro nuevo punto. Habitualmente esta técnica es suficiente para encontrar la solución. Otro método consiste en añadir ruido a la función de evaluación para lograr salir de los extremos locales. Inicialmente el nivel de ruido es alto y se va reduciendo gradualmente con el tiempo. Esta técnica, denominada simulated annealing (enfriamiento o temple simulado) permite al algoritmo explorar direcciones que no son las “mejores” pero que pueden conducir a una exploración mas completa del espacio de estados. Como está técnica recuerda la analogía que se da en los metales cuando son calentados y luego enfriados lentamente, el parámetro que se utiliza en el enfriamiento simulado se denomina temperatura, de forma que una temperatura elevada permite continuar con la búsqueda de forma un tanto aleatoria, mientras que temperaturas bajas hacen que el algoritmo vuelva a un comportamiento mas determinista. Primero el mejor La búsqueda por primero el mejor o “búsqueda preferentemente por lo mejor” es una estrategia de control sistemática que combina las ventajas de los métodos de búsqueda exhaustiva en amplitud y en profundidad. Su principal diferencia con esos métodos es que en este caso se hace uso de la información que proviene de las funciones de evaluación para ordenar los nodos de la cola. En este sentido se elige como primer nodo el que parece que va a ser mejor (costo mínimo), antes que cualquier otro, sin tener en cuenta su posición en el árbol o grafo. Es decir, se expande el más prometedor, el que ha resultado mejor evaluado [5]. Con este método siempre se encuentra un mínimo global, por lo que consigue disimular el problema de los extremos locales. Sin embargo, presenta una desventaja: el hecho de que en el algoritmo no se considera el camino recorrido hasta el momento, lo que podría dar lugar a una solución no idónea. Por ejemplo, si un nodo se encuentra muy cerca de la meta, quizá ya inicialmente, pero hay otro cuya distancia al nodo final es menor aunque suponga un recorrido más largo, se seleccionará este último debido a esa estimación de la distancia que no tiene en cuenta el costo acumulado.

Page 20: Inteligencia Artificial 092

Inteligencia Artificial

_________________________________________________________________________111

Por ejemplo, definimos una función costo asociada a cada nodo cuyo valor sea la distancia al nodo meta figura 23. El costo de la generación de cada sucesor se puede considerar cero o uno. En cualquier caso, va a ser un valor constante.

Figura 23. Árbol de búsqueda con costos asociados. Los pasos del algoritmo “primero el mejor” son:

1. El estado inicial esta formado únicamente por el nodo inicial.

2. Lazo: 2.1. Extraer el nodo inicial. 2.2. Se expande el nodo y se añaden todos los sucesores a la cola. Guardar el recorrido. 2.3 Se evalúa cada uno de los nodos sucesores. Si algún sucesor es la meta, salir. 2.4. Se extrae el nodo con menor costo y se añaden sus sucesores. Guardar el recorrido. 2.5. Volver al paso número 2.3.

La solución es el nodo de la lista y el camino recorrido

Page 21: Inteligencia Artificial 092

Inteligencia Artificial

_________________________________________________________________________112

El algoritmo aplicado al ejemplo de la figura 23, donde la solución consiste en llegar al nodo F, sería:

estado de la cola extraer H(20) A(14), C(16) H D(9), E(5), C(16) A D(9), C(16) E K(3), L(6), C(6) D L(6), C(6) K F(0), C(16) L El camino recorrido siguiendo los punteros que conduce a la solución es:

H A E D K L F Como se ha hecho notar, con este método no se ha seleccionado el recorrido más corto en el sentido de recorrer menos nodos, que hubiera sido por la rama del nodo C, sino que las decisiones se han ido tomando en cada momento según la distancia estimada en ese punto, no acumulada, aunque el costo acumulado sea menor en esta solución. Existe una variante denominada búsqueda en haz (beam search), que pretende acelerar el proceso de búsqueda permitiendo explorar más de una rama simultáneamente. Búsqueda menor costo Denominada greedy search, este algoritmo es también una estrategia derivada del método “primero el mejor”, y viene a disimular una de sus desventajas. En este caso lo que se intenta es minimizar el costo total para alcanzar la meta. Por lo tanto, siguiendo una estrategia “avara”, se expandirá el nodo que se presuponga más cercano al nodo final, para minimizar así también el recorrido. Desafortunadamente, el costo exacto del recorrido al estado final no se puede calcular de forma precisa, por lo que tendremos que conformarnos con una estimación basada en una función heurística h, en la que se computa para cada nodo el costo estimado desde ese nodo al nodo final por el camino de menor costo. Cuando mejor sea la estimación de la función h mejor y más rápidamente se encontrará la solución. Cuando se llega al nodo meta, la evaluación de h en ese estado debe ser cero. Es por lo tanto un caso de la búsqueda heurística ya que es esta función h la que dirige el recorrido en base a un conocimiento sobre el camino con menor costo. La elección de la función heurística es crucial para el funcionamiento del algoritmo y también para reducir la complejidad espacial y temporal del mismo. Generalmente es un método eficiente ya que suele encontrar la solución con rapidez, si bien ésta no siempre es óptima porque lo que va considerando en cada momento es la

Page 22: Inteligencia Artificial 092

Inteligencia Artificial

_________________________________________________________________________113

solución inmediata “más barata”, sin una visión global. Tampoco es completa pues puede recorrer una ruta infinita y se estancaría en ella sin probar otros caminos alternativos. Algoritmo A* Uno de los algoritmos de búsqueda mas conocidos y utilizados en la Inteligencia Artificial es el A*, que combina la eficiencia del algoritmo de búsqueda menor costo con el método de costo uniforme que tiene las deseables propiedades de ser óptimo y completo. Es decir, encuentra una solución siempre y cuando ésta exista, incluso para grafos infinitos, y además no cae en mínimos locales, sino encuentra el extremo global. Otras de las ventajas de este método es que expande el menor número de nodos. Sin embargo, puede tardar mucho en hacer la selección entre dos caminos casi iguales por lo que a veces puede requerir mucho tiempo. En el método de la búsqueda costo uniforme lo que se trataba era de reducir al mínimo el costo de la meta h(n). El método denominado de costo uniforme es una variación de la búsqueda en amplitud donde lo que se busca no son los caminos de menor longitud sino de menor costo, por lo tanto, minimizar la ruta, g(n). Es decir, se expande el nodo con menor costo de la ruta, en vez del que tenga menor profundidad, como lo hacía la estrategia en amplitud. Esta búsqueda sí es óptima y completa, pero se puede ser muy ineficiente. En el algoritmo A* la función de evaluación se calcula sumando estas dos medidas heurísticas para cada nodo n:

• El costo estimado para ir de n al estado meta, h(n); • El costo que ha sido necesario para llegar a ese nodo n desde la raíz o nodo inicial,

g(n). Este último dato no es una estimación ya que puede ser conocido con exactitud.

La función de evaluación f(n) estima el costo total de camino a la solución que pasa por el nodo n.

F(n) = g(n) + h(n) Es decir, el conocimiento heurístico incorporado a este procedimiento permite evaluar y ordenar los nodos en la lista para dirigirla de forma más eficiente hasta el nodo meta. Como se puede deducir, el método del costo uniforme es un caso particular del algoritmo A* que tiene lugar cuando ∀ n h(n)=0. El procedimiento para llevar a cabo este algoritmo es el mismo que el anterior, si bien ahora habrá que sumar a la distancia estimada a la meta el camino de menor costo encontrado hasta cada nodo para formar la nueva función heurística f.

Page 23: Inteligencia Artificial 092

Inteligencia Artificial

_________________________________________________________________________114

Para el ejemplo de la figura 23, el proceso de ejecución del algoritmo con esta estrategia sería: H(20+0) sacar A(14+1),

C(16+1) H

D(9+2), E(5+2), C(17)

A

D(11), C(17) E K(3+3), L(6+3),

C(17) D

L(9), C(17) K F(0), C(16) L Con el cual se obtiene el mismo camino solución que con el método del primero el mejor. A los arcos que unen los distintos nodos se les puede asociar un costo no constante, en cuyo caso el procedimiento de resolución sería el mismo pero ahora habría que sumar a cada nodo como valor de g(n) el que indica ese enlace. El algoritmo A* es completo y óptimo siempre y cuando se verifique una restricción: que la función heurística h(n) sea admisible. Es decir, que la función h que se seleccione nunca sobreestime el costo que implica alcanzar la meta. Es por lo tanto una acepción optimista de la búsqueda. Sin embargo, sigue siendo un método con una complejidad temporal y espacial que generalmente es exponencial. Una conocida modificación del algoritmo A* es la llamada IDA* (Iterative Deepending A*) o búsqueda por profundización iterativa (A*PI), que tiene por objeto garantizar la linealidad respecto a la complejidad espacial. En vez de limitar la profundidad de la búsqueda, este nuevo algoritmo utiliza una limitación en el costo. Mantiene menos caminos simultáneamente que A*, de ahí la reducción del consumo de memoria, pero no deja de encontrar la solución gracias a que explora múltiples rutas. Algoritmos genéticos En los años setenta, de la mano de John Holland [Holland y col., 1975] surgió una de las líneas más prometedoras de la Inteligencia Artificial, la de los algoritmos genéticos. Son llamados así porque se inspiran en la evolución biológica y su base genético-molecular. Estos algoritmos hacen evolucionar una población de individuos sometiéndola a acciones aleatorias semejantes a las que actúan en la evolución biológica (mutaciones y recombinación genética), así como también a una selección de acuerdo con algún criterio, en función del cual se decide cuáles son los individuos más adaptados, que sobreviven, y cuáles los menos aptos, que son descartados.

Page 24: Inteligencia Artificial 092

Inteligencia Artificial

_________________________________________________________________________115

Los algoritmos genéticos forman parte de una familia denominada algoritmos evolutivos, que incluye las estrategias de evolución, la programación evolutiva y la programación genética. Dentro de esta última se han logrado avances curiosos: En 1999, por primera vez en la historia, se concedió una patente a un invento no realizado directamente por un ser humano: se trata de una antena de forma extraña, pero que funciona perfectamente en las condiciones a las que estaba destinada. No hay, sin embargo, nada injusto en el hecho de que el autor del algoritmo genético del que salió la forma de la antena se haya atribuido la autoría de la patente, pues él escribió el programa e ideó el criterio de selección que condujo al diseño patentado. Un algoritmo genético es un método de búsqueda dirigida basada en probabilidad. Bajo una condición muy débil (que el algoritmo mantenga elitismo, es decir, guarde siempre al mejor elemento de la población sin hacerle ningún cambio) se puede demostrar que el algoritmo converge en probabilidad al óptimo. En otras palabras, al aumentar el número de iteraciones, la probabilidad de tener el óptimo en la población tiende a 1. Funcionamiento Los algoritmos genéticos establecen una analogía entre el conjunto de soluciones de un problema, llamado fenotipo, y el conjunto de individuos de una población natural, codificando la información de cada solución en una cadena, generalmente binaria, llamada cromosoma. Los símbolos que forman la cadena son llamados los genes. Cuando la representación de los cromosomas se hace con cadenas de dígitos binarios se le conoce como genotipo. Los cromosomas evolucionan a través de iteraciones, llamadas generaciones. En cada generación, los cromosomas son evaluados usando alguna medida de aptitud. Funcionamiento de un algoritmo genético básico

1. Primero, se genera aleatoriamente la población inicial, que está constituida por un conjunto de cromosomas, que representan las posibles soluciones del problema. En caso de no hacerlo aleatoriamente, es importante garantizar que dentro de la población inicial, se tenga la diversidad estructural de estas soluciones para tener una representación de la mayor parte de la población posible o al menos evitar la convergencia prematura.

2. A cada uno de los cromosomas de esta población se aplicará la función de aptitud

para saber qué tan "buena" es la solución que se está codificando.

3. Después de saber la aptitud de cada cromosoma se procede a elegir los cromosomas que serán cruzados en la siguiente generación.

Page 25: Inteligencia Artificial 092

Inteligencia Artificial

_________________________________________________________________________116

4. Los cromosomas con mejor aptitud tienen mayor probabilidad de ser seleccionados.

5. El cruzamiento es el principal operador genético, representa la reproducción

sexual, opera sobre dos cromosomas a la vez para generar dos descendientes donde se combinan las características de ambos cromosomas padres.

6. El algoritmo genético se deberá detener cuando se alcance la solución óptima, pero

ésta generalmente se desconoce, por lo que se deben utilizar otros criterios de detención. Normalmente se usan dos criterios: correr el algoritmo genético un número máximo de iteraciones (generaciones) o detenerlo cuando no haya cambios en la población.

7. Como se mencionó, el problema de selección de variables se puede ver como un

problema de optimización, ya que queremos encontrar, bajo alguna heurística, el subconjunto de variables que potencialicen la diferenciación y las semejanzas de objetos de clases diferentes y de la misma clase respectivamente.

Esquema general del algoritmo Inicializar aleatoriamente una población de soluciones a un problema, representadas por una estructura de datos adecuada. Evaluar cada una de las soluciones, y asignarle una puntuación o fitness según lo bien que lo hayan hecho. Escoger de la población la parte que tenga una puntuación mayor. Mutar (cambiar) y entrecruzar (combinar) las diferentes soluciones de esa parte escogida, para reconstruir la población. Repetir un número determinado de veces, o hasta que se haya encontrado la solución deseada [5]. Hay que tener en cuenta que un algoritmo genético es independiente del problema, lo cual lo hace un algoritmo robusto, por ser útil para cualquier problema, pero a la vez débil, pues no está especializado en ninguno. Ejemplo Los algoritmos genéticos requieren que el conjunto se codifique en un cromosoma. Cada cromosoma tiene varios genes, que corresponden a sendos parámetros del problema. Para poder trabajar con estos genes en el ordenador, es necesario codificarlos en una cadena, es decir, una lista de símbolos (números o letras) que generalmente va a estar compuesta de 0s y 1s.

Page 26: Inteligencia Artificial 092

Inteligencia Artificial

_________________________________________________________________________117

Ejemplo 1: Si un atributo (tiempo) puede tomar tres valores posibles (despejado, nublado, lluvioso) una manera de representarlo es mediante tres bits de forma que: (Tiempo = Nublado ó Lluvioso) y (Viento = Fuerte) se representaría con la siguiente cadena: 011 10. De esta forma podemos representar fácilmente conjunciones de varios atributos para expresar restricciones (precondiciones) mediante la concatenación de dichas cadenas de bits. Además si tenemos otro atributo “Viento” que puede ser Fuerte o Moderado, se representaría con la siguiente cadena: 011 10. Las postcondiciones de las reglas se pueden representar de la misma forma. Por ello una regla se puede describir como la concatenación de la precondición y la postcondición. Ejemplo2: “JugaralTenis” puede ser Cierto o Falso. Si Viento = Fuerte entonces JugaralTenis = Cierto se representaría mediante la cadena 111 10 10. Donde los tres primeros bits a uno indican que el atributo “Tiempo” no afecta a nuestra regla. Cabe destacar que una regla del tipo 111 10 11 no tiene demasiado sentido, puesto que no impone restricciones en la postcondición. Para solucionar esto, una alternativa es codificar la postcondición con un único bit (1 = Cierto y 0 = Falso). Otra opción es condicionar los operadores genéticos para que no produzcan este tipo de cadenas o conseguir que estas hipótesis tengan una adecuación muy baja (según la función de evaluación) para que no logren pasar a la próxima generación de hipótesis.

4.4.- Satisfacción de restricciones. Problemas de satisfacción de restricciones es un tipo especial de problemas que satisfacen algunas propiedades adicionales. Las restricciones pueden involucrar una o varias variables al mismo tiempo. A veces en estos problemas conviene hacer una verificación hacia adelante (forward checking) para detectar estados sin solución (ejemplo las 8-reinas, figura 24). Muchas veces lo que conviene es analizar la variable más restringida, esto es, asignarle un valor a la variable que está involucrada en la mayor cantidad de restricciones.

Page 27: Inteligencia Artificial 092

Inteligencia Artificial

_________________________________________________________________________118

Otra heurística común es seleccionar un valor que elimine el menor número de valores en las otras variables asociadas a la variable por medio de una restricción. A veces la descripción del estado contiene toda la información necesaria para llegar a una solución (ejemplo las 8-reinas) y se utilizan algoritmos que hacen mejoras iterativas. La idea general es empezar con una configuración completa y hacer modificaciones para mejorar su calidad [23]. Normalmente, en problemas de maximización se trata de moverse hacia el pico más alto. Los métodos iterativos normalmente guardan sólo su estado actual y no ven más allá de sus vecinos inmediatos. Problemas de Satisfacción de Restricciones Estructura de estados:

• Un estado está compuesto por un conjunto de n variables que pueden tomar diferentes valores.

• Un estado es un estado meta si los valores que tienen sus variables cumplen una serie de restricciones.

Definición:

• Un problema de satisfacción de restricciones PRS (Constraint Satisfaction Problem) es una tripleta (X, D, R)

o X = {x1,…, xn} es un conjunto de variables. o D: X →V es una función total que asigna un dominio (conjunto de valores

de Vi) a cada variable. Frecuentemente se escribe Di en vez de D(xi) para referirse al dominio de la variable xi.

o R = {R1,…, Rk} es un conjunto de restricciones tal que cada Ri es un predicado sobre un subconjunto de los variables de X. Formalmente: Ri (x1,…, xl) ⊆ D1×… ×Dl.

Conceptos básicos de variables:

• Un problema de satisfacción de restricciones discreto es aquel en el que todas las variables son discretas, es decir, toman valores en dominios finitos.

• Un problema de satisfacción de restricciones continuo es un PSR en el que todas las variables son continuas, es decir, tienen dominios continuos.

• Un problema de satisfacción de restricciones mixto consta de variables continuas y discretas.

• Un problema de satisfacción de restricciones binario es aquel en el que todas las restricciones tienen a los sumo dos variables respectivamente.

• Un problema de satisfacción de restricciones no binario o n-ario es aquel en el que las restricciones tienen cualquier número de variables.

Page 28: Inteligencia Artificial 092

Inteligencia Artificial

_________________________________________________________________________119

Conceptos básicos de restricciones: Discretas: las variables participantes están acotadas en dominios discretos. Continuas: las variables participantes están acotadas en dominios continuos. Binarias: son restricciones en las que sólo participan dos variables. N-arias: son restricciones en las que sólo participan cualquier número de variables (n>2). Fuertes (hard): son restricciones cuya satisfacbilidad es imprescindible. Débiles (soft): son restricciones cuya satisfacbilidad no es imprescindible. Difusas (fuzzy): son restricciones definidas sobre niveles de preferencia. Disyuntivas: son restricciones compuestas por un conjunto disjunto de restricciones. Clasificación según el tipo de restricciones:

• Restricciones de obligación (hard constraints). • Restricciones de preferencia (soft constraints).

Clasificación según los dominios:

• Dominios discretos (finitos o infinitos). • Dominios continuos.

Clasificación según el número de variables implicadas en las restricciones:

• Restricciones binarias. • Restricciones múltiples.

Ejemplo 1: N reinas.

• Situar N reinas en un tablero de ajedrez de tamaño N x N de forma que no se den jaque mutuamente figura 24.

• Variables: V1, . . . , VN • Dominios: Di = {1, . . . ,N} • Restricciones:

o Jaque horizontal: Vi ≠ Vj o Jaque diagonal: |Vi − Vj| ≠ |i − j|

• Problema con dominios finitos y restricciones binarias (de obligación).

Page 29: Inteligencia Artificial 092

Inteligencia Artificial

_________________________________________________________________________120

2

2

1

2

3

1

2

3

3

2

3

2

3

0

2

2

1

2

3

1

2

3

3

2

3

2

3

0

Figura 24. Ejemplo de n-reinas. Ejemplo 2: Planificación de corte. Encontrar la manera de situar patrones de corte en una pieza de cartón figura 25.

• Variables: P1, P2, P3, P4. • Dominios: Coordenadas en el plano. • Restricciones:

o Las piezas no deben superponerse. • Problema con dominios continuos y restricciones binarias (de obligación).

Figura 25. Planificación de corte.

4.5.- Resolución de problemas de juegos. Juegos Los juegos provocan una inexplicable fascinación y, la idea de que las computadoras puedan jugar existe desde que existen las computadoras:

• Siglo XIX, Babbage, arquitecto de computadoras, pensó en programar su máquina analítica para que jugara al ajedrez.

Page 30: Inteligencia Artificial 092

Inteligencia Artificial

_________________________________________________________________________121

• 50’s, Shannon describió los mecanismos que podían usarse en un programa para que jugara al ajedrez.

• 50’s, Turing describió un programa para jugar al ajedrez pero no lo construyó. • 60’s, Samuel construyó el primer programa de juegos importante y operativo, el

cual jugaba a las damas y podía aprender de sus errores para mejorar su comportamiento.

En un primer momento se pensó que se podrían resolver por búsqueda exhaustiva en el árbol del juego, es decir, un árbol que contenga todos los movimientos posibles de ambos jugadores. Considerando por ejemplo el juego de ajedrez, en una partida cada jugador realiza una media de 50 movimientos, con un factor de ramificación medio de 35 posibilidades, por lo tanto para examinar el árbol de juego completamente se tendrían que examinar 35,100 posibilidades. Resulta evidente que una simple búsqueda directa no es posible de realizar en la práctica, y por lo tanto es necesario algún tipo de procedimiento de búsqueda heurística. Los juegos proporcionan una tarea estructurada en la que es muy fácil medir el éxito o el fracaso. En comparación con otras aplicaciones de Inteligencia Artificial, por ejemplo comprensión del lenguaje, los juegos no necesitan grandes cantidades de conocimiento. El problema de la toma de decisión puede ser crucial en una serie de aplicaciones. Por ejemplo, en los juegos o estrategias logísticas donde el objetivo es ganar ante unos adversarios, cualquier tipo de información que ayude a tomar la decisión acertada es muy valiosa. En este sentido, el plantear este tipo de problemas de la forma que se puede aplicar una estrategia de búsqueda ha sido siempre un campo de interés para los investigadores de la Inteligencia Artificial. La mayoría de las aplicaciones de la Inteligencia Artificial fueron juegos que requerían la aplicación de las facultades intelectuales. En este sentido, este tipo de problemas han contribuido enormemente al desarrollo de la Inteligencia Artificial [5]. Un juego tiene una gran similitud con un problema de búsqueda porque se define mediante:

• El estado inicial, que incluye la posición del tablero e identifica al jugador que mueve.

• Una función sucesor, que devuelve una lista de pares (movimiento, estado), indicando un movimiento legal y el estado que resulta.

• Un test terminal, que determina cuándo se termina el juego. A los estados donde el juego se ha terminado se les llaman estados terminales.

• Una función utilidad (también llamada función objetivo o función de rentabilidad), que da un valor numérico a los estados terminales. En el ajedrez, el resultado es un triunfo, pérdida, o empate, con valores +1, -1 o 0.

Por lo tanto, el primer paso será la representación del juego como un árbol de búsqueda, y la definición de las funciones de utilidad y de prueba final, es decir, determinar el objetivo final. En general aunque se puede plantear como escenario un árbol completo que represente las características del juego, frecuentemente no es posible tener en cuenta

Page 31: Inteligencia Artificial 092

Inteligencia Artificial

_________________________________________________________________________122

la totalidad del árbol, por lo que en algún momento suele ser necesario suspender la búsqueda y aplicar una función de evaluación mediante la cual se obtenga una estimación de la utilidad de un estado determinado para saber por dónde seguir. Hay diversos tipos de planteamiento en la resolución de los problemas de búsqueda aplicados a los juegos, determinados por sus características específicas. Depende del número de elementos con capacidad de decisión involucrados, de la información que posean del entorno y de los contrarios, etc. En las aplicaciones con dos participantes que cuentan con información perfecta (y juegan también de forma perfecta), el algoritmo minimax permite determinar cuál será la mejor jugada. Como una modificación de éste, el algoritmo alfa-beta es más eficiente gracias a la poda que realiza de las ramas del árbol de búsqueda que resultan irrelevantes para el resultado final. Los juegos de azar se pueden manejar como una extensión del algoritmo minimax mediante el que se evalúan nodos aleatorios, para lo que se toma en cuenta el valor de la “utilidad promedio” de todos sus nodos hijos, ponderados por la probabilidad respectiva de cada hijo. Algoritmo del minimax Se aplica este algoritmo a un juego de dos participantes que alternan sus decisiones, con sus consiguientes movimientos, y que tienen un conocimiento perfecto en cada momento tanto de la estrategia como del juego del adversario [5]. El objetivo es ganar, es decir, el algoritmo debe encontrar la secuencia de movimientos que llevan a un jugador a alcanzar la meta. Pero debe tener en cuenta que el otro jugador puede interponerse en ese recorrido, y que también el objetivo del adversario es llegar a ese mismo estado final. Los nodos del árbol son de dos tipos: MAX y MIN según correspondan a uno u otro jugador. Los valores altos son buenos para MAX, es decir, su objetivo es maximizar la función de evaluación que mide la proximidad estimada a la meta de una situación dada. Los valores bajos de la función de utilidad son los buenos para MIN que intenta minimizar el valor de la función heurística para dificultar a su contrincante la consecución de la meta. Debido a la alternancia en el juego, cada nivel dentro del árbol está formado sólo por los nodos MAX o nodos MIN. Si comienza MAX y ocupa la raíz, éste ocupará los niveles pares del árbol y el nivel inmediatamente inferior lo ocupará los nodos del jugador contrario. El algoritmo de minimax desarrolla una búsqueda en profundidad limitada. Se puede describir de forma simplificada en los siguientes pasos:

1. Generación del árbol de búsqueda, desde la raíz hasta los estados terminales. 2. Obtención del valor de la función de utilidad en cada estado terminal. 3. Aplicación de la función de utilidad para calcular este valor de cada uno de los

nodos del nivel inmediatamente superior a los terminales.

Page 32: Inteligencia Artificial 092

Inteligencia Artificial

_________________________________________________________________________123

4. Continuación de la propagación de los valores de los nodos hojas en dirección a la raíz una capa cada vez.

5. Cuando los valores calculados llegan a la raíz del árbol, MAX elige la jugada que le permita obtener el valor más alto.

Función DECISION-MINIMAX(estado) devuelve una acción Variables de entrada: estado, estado actual del juego v ← MAX-VALOR(estado) devolver la acción de SUCESORES(estado) con valor v Función MAX-VALOR (estado) devuelve un valor utilidad Si TEST-TERMINAL(estado) entonces devolver UTILIDAD(estado) v ← -∞ para un s en SUCESORES(estado) hacer v<- MAX(v, MIN-VALOR(s)) devolver v Función MAX-VALOR(estado) devuelve un valor utilidad Si TEST-TERMINAL(estado) entonces devolver UTILIDAD(estado) v ← ∞ para un s en SUCESORES(estado) hacer v ← MIN(v, MAX-VALOR(s))

devolver v Es decir, este algoritmo en cada jugada produce el operador con el que se obtiene la mejor utilidad, la mejor jugada posible. Recorre todo el árbol del juego con una exploración exhaustiva y va pasando por todas las hojas para ir calculando el valor de utilidad de un movimiento que llevará a la toma de decisión. Hay que tener en cuenta que lo que se propaga hacia arriba depende del estado terminal, que puede tener una función de utilidad que represente tanto ganar como perder o empatar. Al recorrer el árbol en sentido ascendente se va conociendo a cual de las tres situaciones mencionadas se puede llegar desde cada nodo de los niveles superiores al aplicar operadores. Por ejemplo, en el árbol

Page 33: Inteligencia Artificial 092

Inteligencia Artificial

_________________________________________________________________________124

Figura 26. Árbol para minimax. la estrategia ganadora sería la que llevara a MAX a los valores más altos de la función de utilidad, supongamos que igual o mayor que el valor 6. La jugada seleccionada por MIN sería la respuesta a la jugada de MAX que diera el menor valor de los posibles después del primer movimiento de MAX. Se han marcado los nodos MAX con rombos y los MIN con circulos. Si existe, una estrategia ganadora para MAX será un subárbol en el que todos sus nodos terminales son ganadores; de esta forma se puede garantizar el éxito sea cual sea la respuesta del adversario. El recorrido marcado en la figura 26 desemboca siempre en una rama ganadora. Cualquier jugada de MIN hace que MAX sea el vencedor si ha optado por esa rama. Por el contrario, una estrategia ganadora para MIN será el subárbol en el que todos sus nodos terminales sean perdedores, teniendo en cuenta que cada vez que juega MAX habrá que considerar todos sus movimientos y cuando juega MIN sólo es necesario considerar una de las dos alternativas. El ejemplo comentado anteriormente de “tres en raya” se puede también expresar como árbol de búsqueda para aplicar esta estrategia de minimax, pero resulta tan compleja su representación total que sólo se pueden mostrar aspectos parciales del mismo. Este ejemplo se enuncia en Russell y Norving (1995). Como es el algoritmo de búsqueda en profundidad, su complejidad temporal es exponencial, pero la espacial es lineal. Es por lo tanto ineficiente para problemas reales por el tiempo de cómputo requerido, pero sin embargo permite abordar el problema de los juegos desde un punto de vista de la representación que facilita su compresión.

MAX

MIN

1 6 2 6 9 7 5 3 6 7

Page 34: Inteligencia Artificial 092

Inteligencia Artificial

_________________________________________________________________________125

Jugador

Oponente

… … …

Jugador

Oponente

m

n

Poda alfa-beta Es un método basado en el minimax pero más eficiente puesto que evita el recorrido exhaustivo de todos los nodos de un árbol de búsqueda. Reduce por lo tanto considerablemente el número de nodos expandidos, y por eso se le denomina método de poda, ya que no explora todas las ramas. Obtiene la misma solución que con el anterior pero no recorre las ramas que no van a influir en la decisión final, y por lo tanto, al no calcular sus consiguientes valores de utilidad ni expandir sus sucesores, requiere generalmente menor tiempo computacional [5]. La poda alfa-beta puede aplicarse a árboles de cualquier profundidad, y, a menudo, es posible podar subárboles enteros. Sin embargo, esa afirmación depende del orden en que se exploren los nodos del árbol. De hecho, en el peor de los casos habría que examinar todos los nodos terminales y tendría la misma complejidad que el procedimiento minimax. Para realizar la poda, éste método va anotando cuándo se puede hacer una poda porque en una rama haya algún nodo con un valor de utilidad inferior al de otro recorrido. Para ello lo que se hace es pasar, en cada llamada recursiva a un nodo hijo, dos valores (α y β) de manera que α marque la cota inferior de los valores que se van a ir buscando en la parte del árbol que queda por explorar, y β es la cota superior de los mismos valores. Si en algún momento α llega a ser mayor o igual que β no tendrá sentido seguir con la búsqueda, realizándose una poda α si estamos en un nodo MAX o β si estamos en un nodo MIN. Se suele denominar por eso poda α–β. Los valores de α y β se suelen inicializar a –∞ y +∞ respectivamente. También se les puede asignar a α el valor mínimo de la función de utilidad y a β el valor máximo que puede alcanzar la función de evaluación heurística.

Figura 27. Poda alfa-beta: el caso general. Si m es mejor que n para el Jugador, nunca iremos a n en el juego.

Page 35: Inteligencia Artificial 092

Inteligencia Artificial

_________________________________________________________________________126

Cuestionario de evaluación. Asigne el concepto con su respectiva definición. Conceptos: Espacio de estados, grafos de estado, aplicación de espacios de estados, algoritmo no determinístico, algoritmo determinístico, recorrido en profundidad, recorrido en amplitud, búsqueda heurística, métodos de búsqueda heurística. 1.- ______________________________________________________________________ Es el entorno donde se desarrolla el proceso de búsqueda, y lo componen todos los estados por los que se avanza y que se van recorriendo en la tarea de llegar a la meta. 2.- ______________________________________________________________________ La búsqueda en profundidad es otra forma de recorrer sistemáticamente una estructura del árbol para encontrar el nodo solución, pero recorriéndolo en profundidad, es decir, bajando de nivel. 3.- ______________________________________________________________________ Es un algoritmo que ofrece más de una única salida en función de su entrada, siempre que no se haya dado otra especificación adicional. Una ejecución de estos algoritmos permite elegir en un instante dado una secuencia de posibles estados de salida para una misma entrada o estado inicial. 4.- ______________________________________________________________________ Se caracterizan por la tendencia a limitar el tiempo y el espacio en donde buscar la respuesta a problemas complejos, y asumir que aceptaremos cuando le encontremos una buena solución, que puede no ser óptima. 5.- ______________________________________________________________________ Representa el conjunto de mundos, escenarios o situaciones que se pueden generar mediante los operadores u acciones. Ya que indica el recorrido del proceso de búsqueda que va moviéndose de un estado a otro, en la consecución del objetivo final. 6.- ______________________________________________________________________ Ascensión a la cima o gradiente, primero el mejor, búsqueda menor costo, algoritmo A*, algoritmos genéticos. 7.- ______________________________________________________________________ Es completamente predictivo si se conocen las entradas al mismo. Dicho de otra forma si se conocen las entradas del algoritmo siempre producirá la misma salida, y la máquina interna pasará por la misma secuencia de estados.

Page 36: Inteligencia Artificial 092

Inteligencia Artificial

_________________________________________________________________________127

8.- ______________________________________________________________________ El algoritmo define una forma de moverse a lo largo de la estructura arbórea examinando los valores de los nodos de manera sistemática y controlada, de forma que se pueda encontrar un nodo de solución. 9.- ______________________________________________________________________ Búsqueda de rutas en redes informáticas, rutas aéreas para viajar, problema del viajante, diseño de microchips, ensamblaje de componentes, desplazamiento de robots. Respuestas: espacio de estados, recorrido en profundidad, algoritmo no determinístico, búsqueda heurística, grafos de estado, métodos de búsqueda heurística, algoritmo deterministico, recorrido en amplitud, aplicación de espacios de estados.

Page 37: Inteligencia Artificial 092

Inteligencia Artificial

_________________________________________________________________________128

CONCLUSIÓN La Inteligencia Artificial ha hecho posibles aplicaciones nuevas tales como los sistemas de reconocimiento de voz, sistemas de control de inventarios, sistemas de vigilancia, robots y motores de búsqueda. Distintas ramas de la Inteligencia Artificial han ido alternando en popularidad: la aproximación conexionista, representada por las redes neuronales; la computación biológica, con algoritmos evolutivos como técnicas de búsqueda; la lógica borrosa, en un intento de dotar de sentido común a las máquinas, etc. Recientemente, el crecimiento de Internet y de la computación distribuida en general ha abierto nuevos campos de aplicación de la Inteligencia Artificial. Parece probable que el éxito de la Inteligencia Artificial a gran escala, la creación de inteligencia en el nivel humano y más allá, cambiaría las vidas a la mayoría de la humanidad. La verdadera naturaleza de nuestro trabajo y de nuestro papel cambiaría así como nuestro punto de vista de la inteligencia, la conciencia y el destino futuro de la raza humana. A este nivel, los sistemas de Inteligencia Artificial podrían suponer una amenaza directa a la autonomía humana, la libertad, e incluso la supervivencia. Por estas razones, la investigación en la Inteligencia Artificial no se puede divorciar de sus consecuencias éticas. Se puede observar que la Inteligencia Artificial ha progresado a lo largo de su corta existencia, pero todavía tiene validez la frase del ensayo de Alan Turing sobre Computing Machinery and Intelligence:

“Podemos observar sólo a poca distancia hacia delante, pero también se pude ver que todavía queda mucho por hacer.”