Unidad III: Solución de problemas por búsqueda.

Anuncio
Curso:
Inteligencia Artificial
Unidad III:
Solución de problemas por búsqueda
M. en I.A. Daniel Alejandro García López
19 de enero de 2009
Resumen
La resolución de problemas se describe a menudo como una búsqueda en un enorme laberinto de posibilidades, un laberinto que describe el entorno. Para resolver existosamente un problema se requiere explorar
el laberinto de forma selectiva y con ello reducirlo a proporciones manejables. Las máquinas aún no pueden
reducir automáticamente los problemas a proporciones manejables, es por ello que los seres humanos tienen
que formular los problemas y proponer estrategias para encontrar su solución.
En esta unidad se tratará temas relacionados con la búsqueda en el espacio de estados(que es como
el laberinto de posibilidades). En algunos tipos de problemas lo importante es encontrar una solución,
aunque esta no sea la mejor debe ser una solución aceptable, en otros casos es necesario encontrar el
camino que nos lleva a esa solución. De manera general, cualquiera de las estrategias de búsqueda que se
tratan en esta unidad pueden resolver ambos requisitos, sólo se requieren pequeños ajustes en sus métodos
generales.
La mayoría de las estrategias de búsqueda que son tratadas en esta unidad son enfocadas a ejemplos
para maximizar la comprensión de las técnicas y de esta manera pueda ser llevarlo rápidamente a la
implementación.
Las estrategias de búsqueda clásicas que se abordarán son: búsqueda en profundidad, búsqueda en
amplitud, búsqueda con retroceso, búsqueda primero el mejor y A*, además de Minimax.
Índice general
Índice de Tablas
II
Índice de Figuras
III
1. Introducción
1
2. Formulación y resolución de problemas.
2.1. Definición formal del problema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2. Análisis del problema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
4
5
3. Problemas de juego y problemas reales.
3.1. Problemas de juguete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2. Problemas del mundo real . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
8
9
4. Búsqueda en profundidad
4.1. Evaluación de una búsqueda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2. La técnica de búsqueda primero en profundidad . . . . . . . . . . . . . . . . . . . . . . . .
11
11
12
5. Búsqueda en amplitud
5.1. La técnica de búsqueda primero en amplitud . . . . . . . . . . . . . . . . . . . . . . . . .
16
16
6. Búsqueda con retroceso(Backtracking)
6.1. La técnica de búsqueda con retroceso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
18
7. Búsqueda primero el mejor
7.1. La técnica de búsqueda primero el mejor . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20
20
8. Búsqueda A*
8.1. La técnica de búsqueda A-Estrella(A*) . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
23
9. Búsqueda Minimax
9.1. La técnica de búsqueda Minimax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
25
Conclusión
27
Apéndices
29
i
Índice de Tablas
R . . . . . . . . . . . . . . .
4.1. Distancias aproximadas entre terminales de la línea ADO-GL
12
9.1. Tabla comparativa de estrategias de búsqueda en espacios de estados . . . . . . . . . . . .
9.2. Tabla de las posibles combinaciones de tres objetos . . . . . . . . . . . . . . . . . . . . . .
27
31
ii
Índice de figuras
1.1. Plano de casa del problema de las llaves perdidas . . . . . . . . . . . . . . . . . . . . . . . . .
1.2. Grafo del camino solución para encontrar las llaves perdidas . . . . . . . . . . . . . . . . . . .
4.1.
4.2.
4.3.
4.4.
1
2
R
Rutas de la línea de autobuses ADO-GL
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
R
Árbol parcial de rutas de ADO-GL
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Representación de la estructura de pila del problema del agente de viajes . . . . . . . . . . . . .
Representación de la estructura de pila del problema del agente de viajes al agregar los estados
sucesores de la terminal Salina Cruz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.5. Continuación de la representación de la estructura de pila del problema del agente de viaje para
llegar a Ciudad Reynosa, este procedimiento puede seguir el camino que se muestra en la figura 4.2
13
14
14
5.1. Representación de la estructura de cola del problema del agente de viajes . . . . . . . . . . . .
5.2. Representación de la estructura de cola del problema del agente de viajes al agregar los estados
sucesores de la terminal Salina Cruz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.3. Continuación de la representación de la estructura de cola del problema del agente de viaje para
llegar a Ciudad Reynosa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
17
6.1. Representación de la estructura de árbol para solución por búsqueda con retroceso . . . . . . . .
19
7.1. Representación de la estructura de cola con prioridad del problema del agente de viajes . . . . .
7.2. Representación de la estructura de cola con prioridad del problema del agente de viajes al agregar
los estados sucesores de la terminal Salina Cruz . . . . . . . . . . . . . . . . . . . . . . . . . .
7.3. Continuación de la representación de la estructura de cola con prioridad del problema del agente
de viaje para llegar a Ciudad Reynosa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
8.1. Representación de la estructura de cola con prioridad del problema del agente de viajes para la
estrategia A* . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.2. Representación de la estructura de cola con prioridad del problema del agente de viajes al agregar
los estados sucesores de la terminal Salina Cruz para la estrategia A* . . . . . . . . . . . . . .
8.3. Continuación de la representación de la estructura de cola con prioridad del problema del agente
de viaje para llegar a Ciudad Reynosa para la estrategia A* . . . . . . . . . . . . . . . . . . .
15
15
17
21
21
24
24
24
9.1. Un árbol de juegos de dos capas. Los nodos ∆ son nodos MAX, en los que le toca mover a MAX,
y los nodos ∇ son nodos MIN. Los nodos terminales muestran los valores de utilidad para MAX;
los otros nodos son etiquetados por sus valores minimax. El mejor movimiento de MAX en la raíz
es a1 , porque conduce al sucesor con el valor minimax más alto, y la mejor respuesta de MIN es
b1 , porque conduce al sucesor con el valor minimax más bajo. . . . . . . . . . . . . . . . .
iii
26
Sección 1
Introducción
La resolución de problemas es fundamental para la mayoría de las aplicaciones de Inteligencia Artificial(IA). De hecho, la capacidad de resolver problemas suele usarse como una medida de la inteligencia
tanto para el ser humano como para la computadora. Hay principalmente dos clases de problemas. Una
primera clase puede ser resuelta usando algún tipo de procedimiento determinista cuyo éxito esté garantizado. A este procedimiento se le llama de computación. La resolución por computación normalmente sólo
se aplica a aquellos tipos de problemas para los que existan tales procedimientos, como en matemáticas.
Se puede con frecuencia traducir los métodos usados para resolver estos problemas de manera fácil, a un
algoritmo que pueda ser ejecutado por una computadora. No obstante, a pesar de que pocos problemas
reales se prestan a soluciones computables, deben ser situados en la segunda categoría, que consiste en
problemas que se resuelven con la búsqueda de una solución. Este es el método de resolución de problemas
del que se preocupa la IA.
Figura 1.1: Plano de casa del problema de las llaves perdidas
Por ejemplo, imagine que ha perdido las llaves de su coche. Sabe que están en algún lugar de la casa,
cuyo plano esta en la figura 1.1
La X indica que usted está en la puerta principal. Al empezar su búsqueda primero comprueba la
sala de estar. Luego va por el salón hacia el primer dormitorio, después vuelve al salón y va al segundo
dormitorio, y vuele de nuevo al salón para ir al dormitorio principal. Como aún no ha encontrado las
llaves, vuelve hacia atrás pasando por la sala de estar hacia la cocina, donde encontrará sus llaves. La
figura 1.2 presenta un grafo del camino que se ha seguido.
El hecho de que pueda representar la solución a esta clase de problemas en forma de grafos es importante
1
Figura 1.2: Grafo del camino solución para encontrar las llaves perdidas
porque le ofrece una forma sencilla de observar cómo funcionan las diferentes técnicas de búsqueda [6].
Para entender este tema es necesario tener presente las siguientes definiciones:
Un estado es la representación de un problema en un instante dado. Para definir el espacio de
estados o espacio de búsqueda(El conjunto de todos los nodos) no es necesario hacer una exhaustiva
enumeración de todos los estado válidos, sino que es posible definirlo de manera más general.
El estado inicial consiste en uno o varios estados en los que puede comenzar el problema. El estado
objetivo o estado meta consiste en uno o varios estados finales que se consideran solución aceptable.
Las reglas describen las acciones u operadores que posibilitan un pasaje de estados. Podríamos decir
que una regla tiene una parte izquierda y una derecha. La parte izquierda determina la aplicabilidad de
la regla, es decir, describe los estados a los que puede aplicarse la regla. La parte derecha describe la
operación que se lleva a cabo si se aplica la regla(acción).
La heurística es la información acerca de la posibilidad de que un nodo específico sea mejor para
intentar la próxima elección que cualquier otro nodo.
El camino solución es el grafo dirigido de los nodos visitados que nos llevan a la solución.
Por ejemplo, en el problema de jugar al ajedrez:
Espacio de estados: La totalidad de tableros que se pueden generar en un juego de ajedrez;
`
Estado Inicial: Puede ser el tablero de 8 x 8 donde cada cuadro contiene un símbolo(p.ej.
corresponde a Torre) de acuerdo a las piezas situadas.
Objetivo o estado final: Cualquier posición de tablero en la que el contrario no puede realizar ningún
movimiento legal y su rey esté amenazado;
Reglas: Son los movimientos legales, que pueden describirse mediante una parte patrón para ser
contrastado con la posición actual del tablero y otra parte que describe el cambio que debe producirse
en el tablero. Dado que escribir todas las posiciones del tablero, las reglas deben escribirse de manera
más general posible.
Heurística: Podemos elegir tableros en donde el contrincante tenga el menor número de piezas
desplegadas.
Camino solución: El conjunto de movimientos para llegar al estado final.
La búsqueda de una solución no es tan simple como empezar en el principio y seguir su camino hasta
su conclusión. En un caso extremadamente simple de las llaves perdidas, este método de búsqueda es una
buena manera de llevarlo a cabo. No obstante, en la mayoría de los problemas en los que quiera usar
una computadora para hallar la solución, la situación es diferente. Generalmente, usará una computadora
para resolver problemas en los que le número de nodos en el espacio de búsqueda sea muy grande y, como
2
el espacio de búsqueda va creciendo, de igual modo se incrementarán el número de diferentes caminos
posibles hasta la meta. El problema estriba en que cada nodo añadido al espacio de búsqueda añade más
de un camino; por lo que el número de caminos hasta la meta se incrementará rápidamente con cada
nuevo nodo(para mejor explicación véase Explosión combinatoria en el anexo ).
Debido a que el número de posibilidades crece tan rápidamente, tan sólo los problemas más simples
se prestan a búsquedas exhaustivas( Una búsqueda exhaustiva examina todos los nodos). Mientras que la
técnica exhaustiva, o de fuerza bruta, teóricamente siempre funciona, normalmente no es práctica porque
consume o demasiado tiempo o demasiado recursos de computación, e incluso ambos. Por esa razón, otras
técnicas de búsqueda han sido desarrolladas.
En la primera sección veremos los puntos básicos para formular y resolver problemas relacionados con
la Inteligencia Artificial. Continuaremos con algunos problemas de juego con los cuales se han probado la
eficiencia y eficacia de diversos algoritmos de IA, así como también algunos problemas reales en los que
se haya aplicado las técnicas de búsqueda en IA. En las siguientes seis secciones veremos las principales
técnicas de búsqueda informada y no informada que existen en la literatura. En la última sección se dará
una breve conclusión de la unidad.
3
Sección 2
Formulación y resolución de
problemas.
Para construir un sistema de computación que resuelva un problema específico, es necesario:
Definir el problema formalmente con precisión.
Analizar el problema.
Representar el conocimiento necesario para resolver el problema.
Elegir una técnica de resolución del problema y aplicarla.
2.1.
Definición formal del problema
El primer paso para diseñar un programa que resuelva un problema es crear una descripción formal
y manejable del propio problema. Sería adecuado contar con programas que produzcan descripciones
formales a partir de descripciones informales, proceso denominado operacionalización. Dado que por ahora
no se conoce la forma de construir estos programas este proceso debe hacerse manualmente.
Hay problemas que por ser artificiales y estructurados son fáciles de especificar (por ej. el ajedrez,
el problema de las jarras de agua, etc. ). Otros problemas naturales, como por ej. la comprensión del
lenguaje, no son tan sencillos de especificar(véase sección 3).
Para producir una especificación formal de un problema se deben definir:
espacio de estados válidos.
estado inicial del problema.
estado objetivo o final.
reglas que se pueden aplicar para pasar de un estado a otro.
La representación como espacio de estados forma parte de la mayoría de los métodos de Inteligencia
Artificial(IA)[7]. Su estructura se corresponde con la resolución de problemas porque:
Permite definir formalmente el problema, mediante la necesidad de convertir una situación dada en
una situación deseada mediante un conjunto de operaciones permitidas;
Permite definir el proceso de resolución de un problema como una combinación de técnicas conocidas
y búsqueda(la técnica general de exploración del espacio intenta encontrar alguna ruta desde el estado
actual hasta un estado objetivo).
4
2.2.
Análisis del problema
Luego de definir el problema formalmente, el segundo paso en la resolución del problema es el análisis
del mismo. A fin de poder elegir el método más apropiado para resolver un problema particular, es
necesario analizar distintas cuestiones que afectan a la definición del mismo y a las caracterśticas de la
solución deseada. Existen varias preguntas a responder acerca del problema:
¿Puede descomponerse el problema en subproblemas más pequeños?
¿Pueden deshacerse pasos inadecuados hacia la solución?
¿Es predecible el universo del problema?
¿Una solución es buena de manera absoluta o relativa?
¿La solución deseada es un estado o la ruta hacia un estado?
¿El conocimiento se necesita para resolver el problema o para restringir la búsqueda de la solución?
El programa que soluciona el problema ¿busca la solución solo o necesita interactuar con una persona?
¿Puede descomponerse el problema en subproblemas más pequeños?
Algunos problemas pueden descomponerse en subproblemas independientes, de manera que encontrar
una solución global es la composición de soluciones particulares. Por ej. en la resolución de integrales, una
integral puede descomponerse por partes, y resolver las partes simples directamente o descomponerlas
recursivamente.
Por otra parte, existen otros problemas que no pueden descomponerse y componer la solución a partir
de las soluciones parciales de sus partes p. ej. problemas de planificación de rutas con restricciones o el
mundo de los bloques. Por el contrario, una solución necesita considerar globalmente el problema.
¿Pueden deshacerse pasos inadecuados hacia la solución?
Algunos problemas permiten deshacer uno o varios pasos hacia una solución una vez realizados(véase
también la sección 6). En este aspecto, existen tres categorías en las que puede dividirse un problema:
Recuperables: en un punto dado es posible deshacer todos los pasos inadecuados hacia la solución.
Por ej. en el juego 8-puzzle. La estructura de control se implementa con una pila en la que se
almacenan las decisiones para poder volver atrás.
No recuperables: en un punto dado no es posible deshacer ningún paso realizado. Por ej. en una
partida de ajedrez no se puede volver atrás una vez movidas las piezas. En estos problemas el sistema
debe esforzarse en la toma de decisiones pues éstas son irrevocables. Algunos usan una planificación
en la que se analiza por adelantado una secuencia de pasos antes de realizar el primer paso para
descubrir a donde conduce.
Ignorables: en un punto dado es posible ignorar los pasos realizados hasta el momento y comenzar de nuevo con una nueva solución. Por ej. un demostrador de teoremas puede abandonar una
demostración basada en un lema dado y comenzar nuevamente. Estos problemas se resuelven con
estrategias de control sencillas que nunca vuelven hacia atrás.
¿Es predecible el universo del problema?
Los problemas pueden ser de:
5
Consecuencia cierta: es posible planificar una secuencia de movimientos estando seguros del resultado
a obtener. Se puede realizar una planificación para generar operadores que garanticen llegar a la
solución.
Consecuencia incierta:no es posible planificar con certeza pues no se sabe que ocurrirá luego del
siguiente movimiento. Sin embargo, se puede realizar una planificación para generar operadores que
tengan una buena probabilidad de llegar a la solución.
Los problemas más difíciles de resolver son los no recuperables de consecuencia incierta. Por ej. el
control del brazo de un robot: es de consecuencia incierta pues alguien puede interponer un objeto en la
ruta del brazo, se puede atascar, etc.
¿Una solución es buena de manera absoluta o relativa? La solución de un problema puede consistir en
encontrar:
Algún camino: sólo importa encontrar una solución sin importar si existen otros caminos que conducen a la solución. Generalmente se resuelven con heurísticas. Por ej. programa de respuestas a
preguntas.
El mejor camino: importa encontrar la ruta más corta hacia la solución. Son problemas más complicados de computar. Algunos requieren una búsqueda más exhaustiva que usando heurísticas. Por
ej. en el problema del viajero importa encontrar la ruta más corta entre las ciudades a visitar.
¿La solución deseada es un estado o la ruta hacia un estado? La solución de un problema puede
consistir en encontrar:
Un estado final: no es necesario el registro del proceso seguido, sólo importa arribar a la solución
final. Por ej. interpretar texto.
Una ruta hacia un estado final: se necesita dar el camino seguido desde el estado inicial al estado
final. Por ej. problema de las jarras de agua.
¿El conocimiento se necesita para resolver el problema o para restringir la búsqueda de la solución?
El conocimiento puede emplearse para:
Reconocer la solución: se necesita gran cantidad de conocimiento acerca del problema para poder
encontrar una solución. Por ej. comprensión de texto.
Acotar la búsqueda: la solución básica puede encontrarse con poco conocimiento, pero para restringir
el árbol de búsqueda y encontrar la solución de manera más eficiente es necesario contar más
conocimiento. Por ej. en el ajedrez se necesita básicamente poco conocimiento para conocer los
movimientos legales y un mecanismo sencillo de búsqueda. Pero dado que para aumentar la eficiencia
de la búsqueda ésta debe restringirse, se necesita conocimiento de heurísticas de buenas estrategias
y tácticas para jugar.
El programa que soluciona el problema ¿busca la solución solo o necesita interactuar con una persona?
Con respecto a la relación programa-usuario, existen dos tipos de programas que solucionan el problema:
Solitarios: reciben como entrada el problema y dan como salida la solución. No importa el razonamiento que haya seguido la máquina para encontrar la solución. Por ej. problema de las jarras de
agua.
6
Conversacionales: existe una comunicación hombre-máquina de manera que el usuario puede ayudar
a la máquina o la máquina puede informar al usuario durante la búsqueda de la solución. Para que
esta comunicación sea posible debe existir una correspondencia entre el razonamiento seguido por la
máquina y la forma de razonamiento humano. Por ej. en un sistema experto de diagnóstico médico,
el usuario no aceptaría el veredicto de una máquina si no puede comprender el razonamiento que la
llevó a él .
7
Sección 3
Problemas de juego y problemas
reales.
Existen dos tipos de problemas que se han estado investigando en el área de Inteligencia Artificial:
Los denominados problemas de juguete y problemas del mundo real[1].
3.1.
Problemas de juguete
Un problema de juguete se utiliza para ilustrar o ejercitar los métodos de resolución de problemas.
Éstos se pueden describir de forma exacta y concisa. Esto significa que diferentes investigadores pueden
utilizarlos fácilmente para comparar el funcionamiento de los algoritmos. Un problema del mundo real es
aquel en el que la gente se preocupa por sus soluciones. Ellos tienden a no tener una sola descripción, sin
embargo se podría dar la forma general de sus formulaciones.
El mundo de la aspiradora es un problema de juguete, como se vio en la sección previa(Sección 2) este
problema puede formularse como sigue:
Espacio de estados: La aspiradora está en una de dos habitaciones, cada una de lass cuales puede o
no contener suciedad(8 posibles estados del mundo);
Estado Inicial: Cualquier estado puede designarse como un estado inicial.
Objetivo o estado final: Cuando todos las habitaciones están limpias;
Reglas: La aspiradora puede: moverse a la habitación izquierda, moverse a la habitación derecha o
aspirar la habitación.
Comparado con el mundo real, este problema de juguete tiene localizaciones discretas(esta o no en
una habitación), suciedad discreta(esta limpio o no lo esta, no existe el termino medio), nunca se ensucia
una vez que se ha limpiado(suponemos que mientras esta limpiando la habitación no se esta volviendo a
ensuciar).
El 8-puzle consiste en un tablero de 3 x 3 con ocho fichas numeradas y un espacio en blanco. Una ficha
adyacente al espacio en blanco puede deslizarse a éste. La meta es alcanzar el estado objetivo especificado.
La formulación de este problema podría ser:
Espacio de estados: La descripción de un estado especifica la localización de cada una de las ocho
fichas y el blanco en cada uno de los nueve cuadrados;
Estado Inicial: cualquier estado puede ser un estado inicial.
8
Objetivo o estado final: Cualquier conjunto de configuraciones puede ser el objetivo;
Reglas: Mover el blanco a la izquierda, a la derecha, arriba o abajo.
En este juego no hemos considerado acciones como la de sacudir el tablero cuando las piezas no se puedan
mover, o que se puedan extraer las piezas con un cuchillo y volverlas a poner.
El 8-puzle pertenece a la familia de puzles con piezas deslizantes, los cuales a menudo se usan como
problemas de prueba para los nuevos algoritmos de IA.
El Problema de las 8 reinas consiste en colocar las ocho reinas en un tablero de ajedrez de manera
que cada reina no ataque a ninguna otra(Una reina ataca alguna pieza si está en la misma fila, columna
o diagonal).
Para este problema existen dos principales formulaciones. Una formulación incremental que implica a
operadores que aumenten la descripción del estado, comenzando con un estado vacío; esto significa que
cada acción añade una reina al estado. Una formulación completa de estados comienza con las ocho reinas
en el tablero y las mueve.
Espacio de estados: La totalidad de tableros que se pueden generar con 8 reinas en el tablero;
Estado Inicial: Un tablero donde esta una reina por columna.
Objetivo o estado final: Un tablero de manera que cada reina no ataque a ninguna otra;
Reglas: Mover una reina a otro cuadro en la misma columna.
3.2.
Problemas del mundo real
Los problemas de búsqueda de una ruta están definidos en términos de posiciones y transiciones a lo
largo de ellas. Los algoritmos de búsqueda de rutas de han utilizando en una variedad de aplicaciones, tales
como rutas en redes de computadores, planificación de operaciones militares, y en sistemas de planificación
de viajes de líneas aéreas. Estos problemas son complejos de especificar[2].
Por ejemplo, los sistemas comerciales de viajes utilizan formulaciones con muchas complicaciones como
son el precio que imponen las líneas aéreas. Además deben incluir planes de contingencia(tales como reserva
de vuelos alternativos) hasta el punto de que éstos estén justificados por el coste y la probabilidad de la
falla en el plan original.
Los problemas turísticos están estrechamente relacionados con los problemas de búsqueda de una ruta,
pero con una importante diferencia, el espacio de estados, en este cada estado debe incluir las ciudades
que ha visitado (para conocer si ha visitado ya las demáas ciudades).
El problema del viajante de comercio es un problema de ruta en la que cada ciudad es visitada
exactamente una vez.La tarea principal es encontrar el viaje más corto.
Un problema de distribución VLSI requiere la colocación de millones de componentes y de conexiones
en un chip verificando que el área es mínima, que se reduce al mínimo el circuito, que se reduce al mínimo
las capacitaciones, y se maximiza la producción de fabricación. El problema de la distribución viene
después de la fase de diseño lógico, y está dividido generalmente en dos partes: distribución de celdas y
dirección del canal. En la distribución de celdas, los componentes primitivos del circuito se agrupan en
las celdas, cada una de las cuales realiza una cierta función. Cada celda tiene una característica fija(el
tamaño y la forma) y requiere un cierto número de conexiones a cada una de las otras celdas. El objetivo
principal es colocar las celdas en el chip de manera que no se superpongan y que quede espacio para que
los alambres que conectan celdas puedan colocarse entre ellas. La dirección del canal encuentra una ruta
específica para cada alambre por los espacios entre las celdas.
9
La navegación de un robot es una generalización del problema de encontrar una ruta. Más que un
conjunto discreto de rutas, un robot puede moverse en un espacio continuo con un conjunto infinito de
acciones y estados posibles. Para un robot circular que se mueve en una superficie plana, el espacio es
esencialmente de dos dimensiones. Cuando el robot tiene manos y piernas o ruedas que se deben controlar
también, el espacio de búsqueda llega a ser de muchas dimensiones[1][2].
La secuenciación para el ensamblaje automático por un robot de objetos complejos son factibles. En los
problema de ensamblaje, lo principal es encontrar el orden en los objetos a ensamblar. Si se elige un orden
equivocado, no habrá forma de añadir posteriormente una parte de la secuencia sin deshacer el trabajo ya
hecho. Verificar un paso para la viabilidad de la sucesión es un problema de búsqueda geométrico difícil
muy relacionado con la navegación del robot. Así, la generación de sucesores legales es la parte costosa
de la secuenciación para el ensamblaje.
El diseño de proteínas, es otro problema de ensamblaje en el que el objetivo es encontrar una secuencia
de aminoácidos que se plegarán en una proteína de tres dimensiones con las propiedades adecuadas para
curar alguna enfermedad.
10
Sección 4
Búsqueda en profundidad
4.1.
Evaluación de una búsqueda
La evaluación de la eficiencia de una técnica de búsqueda esta fuera del alcance de este curso ya que
puede ser muy complicada. De hecho, esta evaluación se lleva gran parte de la investigación en IA. Sin
embargo, veremos dos medidas elementales que son importantes para obtener una idea de las ventajas y
desventajas de utilizar una u otra técnica:
1. La rápidez con que se encuentra la solución.
2. La calidad de la solución.
Hay varios tipos de problemas para los cuales lo principal es encontrar una solución con el mínimo esfuerzo.
Para ese tipo de problemas, la primera medida es importante. Sin embargo, en otras situaciones, lo más
importante es que la solución sea lo más aproximado a una solución óptima.
Tanto la longitud del camino para la solución como el número real de nodos que atraviesa, determina
la velocidad de búsqueda.
Es importante entender la diferencia entre encontrar una solución óptima y una solución buena. La
diferencia radica en el hecho de que encontrar una solución óptima a menudo nos exige una búsqueda
exhaustiva porque puede que sea este el único camino para determinar si hemos encontrado o no la
mejor solución. No obstante, encontrar una buena solución significa encontrar una que esté inmersa en un
conjunto de restricciones(sin importar si hay o no una mejor solución)
Describiremos un ejemplo que utilizaremos en varias de las técnicas de búsqueda que veremos en las
siguientes secciones. Se trata del problema de un agente de viajes. Imagine que usted es agente de viajes y
un cliente bastante molesto quiere que le reserve un boleto de Salina Cruz a Ciudad Reynosa con la línea
R A pesar de que usted le dice al cliente que la línea de autobuses ADO GLno
R
de autobuses ADO-GL.
R Mirando la lista(supuesta) de
tiene rutas directas, éste insiste en viajar exclusivamente con ADO-GL.
R encuentra que es posible(véase tabla 4.1).
rutas de ADO-GL,
Entonces puede verse que hay una forma de llegar de Salina Cruz a Ciudad Reynosa con la línea de
R
autobuses ADO-GLusando
trasbordos. Así pues reserva un boleto para el cliente.
R
La información extraída del libro de rutas del ADO-GLpuede
ser trasladada al grafo no dirigido
mostrado en la figura 4.1.
Puede encontrarse la información de las rutas más fácil si se dibuja de nuevo el grafo como un árbol,
como se muestra en la figura 4.2. Ciudad Reynosa, aparece en un círculo, y algunas ciudades no aparecen
en el árbol para simplificar su construcción.
11
R
Tabla 4.1: Distancias aproximadas entre terminales de la línea ADO-GL
Origen
Salina Cruz
Tehuantepec
Juchitán
Juchitán
Ixtepec
Juchitán
Tonalá
Pijijiapan
Huixtla
Tonalá
Tuxtla Gutiérrez
Comitán
San Cristóbal
Ocosingo
Palenque
Salina Cruz
Huatulco
Oaxaca
Villahermosa
Villahermosa
Ciudad del Carmen
Campeche
Mérida
Cancún
Playa del Carmen
Campeche
Cárdenas
Coatzacoalcos
Minatitlán
Acayucan
Acayucan
Cordoba
Orizaba
Puebla
Acayucan
Veracruz
Veracruz
Poza Rica
Tuxpan
Tampico
Matamoros
4.2.
Destino
Tehuantepec
Oaxaca
Tehuantepec
Ixtepec
Ixtaltepec
Tonalá
Pijijiapan
Huixtla
Tapachula
Tuxtla Gutiérrez
Villahermosa
San Cristóbal
Ocosingo
Palenque
Villahermosa
Huatulco
Puerto Escondido
Puebla
Cárdenas
Ciudad del Carmen
Campeche
Mérida
Cancún
Playa del Carmen
Chetumal
Chetumal
Coatzacoalcos
Minatitlán
Acayucan
Cordoba
Juchitan
Orizaba
Puebla
Ciudad de México
Veracruz
Xalapa
Poza Rica
Tuxpan
Tampico
Matamoros
Reynosa
Distancia
23 Kms
248 Kms
26 Kms
19 Kms
4 Kms
172 Kms
76 Kms
93 Kms
42 Kms
173 Kms
252 Kms
88 Kms
88 Kms
103 Kms
145 Kms
153 Kms
106 Kms
342 Kms
49 Kms
170 Kms
206 Kms
174 Kms
310 Kms
68 Kms
328 Kms
372 Kms
128 Kms
22 Kms
52 Kms
251 Kms
206 Kms
26 Kms
149 Kms
124 Kms
255 Kms
102 Kms
249 Kms
52 Kms
180 Kms
508 Kms
86 Kms
Kms en línea recta de Origen a Ciudad Reynosa
1181 Kms
1160 Kms
1120 kms
1120 Kms
1115 Kms
1120 Kms
1240 Kms
1300 Kms
1340 Kms
1240 Kms
1237 Kms
1296 Kms
1260 Kms
1242 Kms
1200 Kms
1181 Kms
1175 Kms
1022 Kms
1077 Kms
1077 Kms
1120 Kms
1178 Kms
1172 Kms
1378 Kms
1350 Kms
1168 Kms
930 Kms
1040 Kms
1050 Kms
1100 Kms
1100 Kms
758 Kms
770 Kms
804 Kms
1100 Kms
915 Kms
915 Kms
720 Kms
690 Kms
420 Kms
84 Kms
La técnica de búsqueda primero en profundidad
Una búsqueda primero en profundidad explora cada camino posible hasta su conclusión(meta) antes
de intentar otro camino. Esta técnica de búsqueda pertenece a las estrategias de búsqueda no informada,
es decir la búsqueda no utiliza más que la información proporcionada por la definición del problema. En
cambio existen otros tipos de búsqueda(véase por ejemplo sección 7) en la cual las estrategias saben si un
estado no objetivo es mas prometedor que otro, a este último se le conoce como búsquedas informadas o
búsquedas heurísticas[1].
Esta estrategia de búsqueda en profundidad puede implementarse a través de una estructura de tipo
pila(último en entrar primero en salir) o alternativamente puede aplicarse como una función recursiva que
se llama en cada uno de sus hijos.
La búsqueda primero en profundidad tiene unos requisitos muy modestos de memoria. Necesita almacenar sólo un camino desde la raíz a un nodo hoja, junto con los nodos hermanos restantes no expandidos
para cada nodo del camino. Una vez que un nodo se ha expandido, se puede quitar de la memoria tan
pronto como todos sus descendientes han sido explorados.
12
R
Figura 4.1: Rutas de la línea de autobuses ADO-GL
El inconveniente de la búsqueda primero en profundidad es que puede hacer una elección equivocada y
obtener un camino muy largo(o infinito) a un cuando una elección diferente llevaría a una solución cerca
de la raíz del árbol de búsqueda.
Utilicemos como ejemplo el problema descrito anteriormente, el problema del agente de viajes, si
queremos llegar de Salina Cruz a Ciudad Reynosa, y para simplificar el problema, suponemos que no hay
perdida de tiempo entre trasbordo y trasbordo. La formulación de nuestro problema es de la siguiente
manera:
R
Espacio de estados: Todas las terminales de ADO-GL
Estado Inicial: La terminal de Salina Cruz
Objetivo o estado final: La terminal de Ciudad Reynosa;
Reglas: Moverse a alguna ciudad adyacente desde la terminal en la que se encuentre el cliente en ese
momento
Si tenemos una estructura de datos de tipo pila para implementar esta estrategia de búsqueda:
1. Primero agregamos el estado inicial, en este caso Salina Cruz, y nos queda la estructura de pila
como se muestra en la figura 4.3,
2. el siguiente paso es verificar si el elemento tope de la estructura de pila es el estado objetivo, en
caso de serlo la búsqueda termina, porque encontramos lo que buscábamos, sin embargo si no es
el caso, como en este ejemplo que vamos a Ciudad Reynosa, entonces procedemos a eliminar(pop)
este elemento de la estructura de pila,
3. y agregamos(push) todos las terminales desde la que podemos llegar desde el estado en que nos
encontramos, véase figura 4.4(desde la terminal actual, obteniendo los estados sucesores, por conveniencia omití agregar una terminal de la que parti en una iteración anterior) y volvemos a realizar
el paso 2 hasta encontrar lo que buscamos, véase figura 4.5
Notese que si en el tope de la pila nos queda una terminal que no nos lleva directamente por el camino
correcto hacia el objetivo, ocurre que:
13
R
Figura 4.2: Árbol parcial de rutas de ADO-GL
Se llegue al objetivo, pero con un recorrido más largo, al pasar por terminales que están a mayor
distancia
Puede que nunca lleguemos al objetivo, porque puede formarse ciclos infinitos como ir de IxtepecJuchitán, y después ir de Juchitán-Ixtepec, así sucesivamente
por lo que la implementación para este problema en el cuál el grafo es no dirigido, producirá ciclos
infinitos muy probablemente, una forma de evitar esta deficiencia es almacenar en memoria todas los
estados ya visitados, y antes de agregar a la estructura de pila un nuevo estado comparar si ya han sido
visitados.
Figura 4.3: Representación de la estructura de pila del problema del agente de viajes
Existen variantes la búsqueda de primero en profundidad, tales como búsqueda hacia atrás (backtracking), búsqueda de profundidad limitada y búsqueda primero en profundidad con profundidad iterativa.
Una ventaja de la búsqueda hacia atrás, es que utiliza todavía menos memoria, ya que sólo se genera un
sucesor a la vez; cada nodo parcialmente expandido recuerda qué sucesor(un nodo hijo válido) se expande
14
Figura 4.4: Representación de la estructura de pila del problema del agente de viajes al agregar los estados
sucesores de la terminal Salina Cruz
Figura 4.5: Continuación de la representación de la estructura de pila del problema del agente de viaje para llegar
a Ciudad Reynosa, este procedimiento puede seguir el camino que se muestra en la figura 4.2
a continuación. Además facilita aún otro ahorro de memoria: la idea de generar un sucesor modificando
directamente la descripción actual del estado más que copiarlo. Esto reduce los requerimientos de memoria
a solamente una descripción del estado y sus acciones correspondientes. Para hacer esto, se requiere poder
deshacer cada modificación cuando volvemos hacia atrás para generar el siguiente sucesor, dicho de otra
manera las operaciones deben ser reversibles(para mayor comprensión véase la sección 6).
La siguiente variante, con profundidad limitada, consiste en aplicar un límite de profundidad l a la
búsqueda de primero en profundidad. Es decir, los nodos a profundidad l se tratan como si no tuviera
ningún sucesor. El límite de profundidad resuelve el problema del camino infinito. Sin embargo también
agrega un inconveniente: si escogemos el valor de l menor a la profundidad necesaria para encontrar un
posible nodo meta, no encontraremos la solución. Por ejemplo, si estuviéramos en un juego de ajedrez, y
sabemos que el mínimo número de tiros para dar jaque mate es de 3(ganando las blancas), no podemos
esperar que en un número de tiros(llamemosle l) menor a 3 terminemos el juego, es decir que no existe
un camino para terminar el juego de ajedrez en menos de 3 tiros.
La búsqueda con profundidad iterativa es una estrategia general, usada a menudo en combinación
con la búsqueda primero en profundidad, la cual encuentra el mejor límite de profundidad. Esto se hace
aumentando gradualmente el límite(primero 0, después 1, después 2, etc.) hasta que encontramos un
objetivo.
15
Sección 5
Búsqueda en amplitud
5.1.
La técnica de búsqueda primero en amplitud
La búsqueda primero en amplitud o en anchura es una estrategia sencilla en la que se expande primero
el nodo raíz, a continuación se expanden todos los sucesores del nodo raíz, después sus sucesores, etc.
En general, se expanden todos los nodos a una profundidad en el árbol de búsqueda antes de expandir
cualquier nodo del próximo nivel.
La búsqueda primero en anchura se puede implementar utilizando una estructura de tipo cola primero
en entrar primero en salir, asegurándose que los nodos primeros visitados serán los primeros expandidos.
La principal desventaja de la búsqueda en anchura es los requisitos de memoria para almacenar todos
los nodos que no han sido expandidos durante la búsqueda.
Continuaremos con el ejemplo del problema del agente de viajes con la misma formulación vista en la
búsqueda en profundidad.
Si tenemos una estructura de datos de tipo cola para implementar esta estrategia de búsqueda:
1. Primero agregamos el estado inicial, en este caso Salina Cruz, y nos queda la estructura de cola
como se muestra en la figura 5.1,
2. el siguiente paso es verificar si el elemento tope de la estructura de cola es el estado objetivo, en caso
de serlo la búsqueda termina, porque encontramos lo que buscábamos, sin embargo si no es el caso,
como en este ejemplo que vamos a Ciudad Reynosa, entonces procedemos a eliminar este elemento
de la estructura de cola,
3. y agregamos todos las terminales desde la que podemos llegar desde el estado en que nos encontramos(por conveniencia omití agregar una terminal de la cual parti en una iteración anterior), veáse
figura 5.2(desde la terminal actual, obteniendo los estados sucesores) y volvemos a realizar el paso
2 hasta encontrar lo que buscamos, véase figura 5.3
Notese que estamos recorriendo el camino por niveles en el árbol de la figura 4.2, por lo que esta
estrategia tiene la ventaja, en comparación con la de búsqueda en profundidad, de que no se crean ciclos,
ya que si llegará a ocurrir un camino Ixtepec-Juchitán ;Juchitán Ixtepec entonces cuando llegue a cierto
número de repeticiones, y está sea igual al tamaño de la ruta solución, optará por la solución antes de
continuar, por lo tanto encuentra un camino corto hacia el objetivo, a costa de la cantidad de estados que
tiene que almacenar en cada nivel.
Una variante de búsqueda en amplitud es la de costo uniforme, que consiste en expandir todos los
nodos por costos. Si el costo es igual a la profundidad se tiene la búsqueda en amplitud.
La búsqueda de costo uniforme encuentra la solución más barata si el costo nunca decrece al aumentar
los caminos.
16
Figura 5.1: Representación de la estructura de cola del problema del agente de viajes
Figura 5.2: Representación de la estructura de cola del problema del agente de viajes al agregar los estados
sucesores de la terminal Salina Cruz
Figura 5.3: Continuación de la representación de la estructura de cola del problema del agente de viaje para llegar
a Ciudad Reynosa
17
Sección 6
Búsqueda con
retroceso(Backtracking)
6.1.
La técnica de búsqueda con retroceso
Como vimos anteriormente esta técnica también es llamada búsqueda con vuelta atrás o backtracking,
el término se utiliza para la búsqueda primero en profundidad que elige valores para una variable a la
vez(sólo genera un sucesor a la vez) y vuele atrás cuando una variable no tiene ningún valor legal para
asignarle.
La idea es encontrar la mejor combinación en un momento determinado, por eso se dice que este
tipo de algoritmo es una búsqueda en profundidad. Durante la búsqueda, si se encuentra una alternativa
incorrecta, la búsqueda retrocede hasta el paso anterior y toma la siguiente alternativa. Cuando se han
terminado las posibilidades, se vuelve a la elección anterior y se toma la siguiente opción. Si no hay mas
alternativas la búsqueda falla. De esta manera, se crea un árbol implícito, el en que cada nodo es un
estado de la solución.
Normalmente, se suele implementar este tipo de algoritmos como un procedimiento recursivo. Así en
cada llamada al procedimiento se toma una variable y se le asignan todos los valores posible, llamando a
su vez al procedimiento para cada uno de los nuevos estados.
Esta técnica es utilizadas en algunos problemas con satisfacción de restricciones, es decir problemas
de búsqueda en los que haya que cumplir ciertas restricciones, y en caso de que no exista ya una salida en
el camino elegido, entonces poder regresar a un estado anterior(puede verse como un comando Deshacer
acción). También algunos lenguajes de programación en IA utilizan esta técnica para su funcionamiento(p.
ej. PROLOG[8]).
Una ventaja es el ahorro de memoria al expandir un nodo sucesor a la vez. Su desventaja es el no
poder incluir información para evaluar cual de los sucesores es mejor.
Para esta estrategia de búsqueda utilizaremos un ejemplo sencillo, dado un conjunto de números enteros
(13,11,7), encontrar si existe algún subconjunto cuya suma sea exactamente 20. Este problema es posible
resolverlo al decidir si cada vez que se añade un elemento del conjunto dado la suma es 20.
Veamos la solución por medio de una representación de árbol. Los elementos del conjunto posibles están
representados por valores, elemento1=13, elemento2=11, elemento3=7. La representación de la solución
(s1,...,sm), donde m <= n y si ∈ 1, 2, 3. Cada nodo es una posible solución Será valida si la suma es 20.
Cómo puede verse en la figura 6.1, el primer nodo tiene como suma actual cero, como no es el resultado
búscado(valor 20), al seleccionar un elemento del conjunto, en este caso el elemento 1 que representa al
13, pasa al estado 2, con suma igual a 13, como este valor tampoco es el búscado pasa al estado 3, al
agregar otro elemento del resto(puede ser elemento 2 o elemento 3), el elemento 2, por lo que su suma
es 24, como no es lo que búscamos entonces procede a seleccionar otro elemento del conjunto restante,
18
solamente queda el elemento 3, con lo que pasa al estado 4, sin embargo la suma sigue siendo diferente de
20, y como no hay más elementos, entonces retrocede posicionandose en el estado 3 nuevamente, como en
ese estado ya probó con el único elemento, vuelve a retroceder y pasa al estado 2, como le queda probar
con el elemento 2, pasa al estado 5, y la suma en ese estado es igual a lo que buscamos por lo que el
procedimiento termina.
Figura 6.1: Representación de la estructura de árbol para solución por búsqueda con retroceso
19
Sección 7
Búsqueda primero el mejor
7.1.
La técnica de búsqueda primero el mejor
La búsqueda primero el mejor trata de expandir el nodo más cercano al objetivo, alegando que probablemente conduzca rápidamente a una solución. Esta técnica de búsqueda pertenece a las estrategias de
búsqueda informada, ya que utilizan conocimiento específico del problema más allá de la definición del
problema en sí mismo, por lo que puede encontrar soluciones de manera más eficiente que una estrategia
de búsqueda no informada.
La búsqueda voraz primero el mejor se parece a la búsqueda primero en profundidad en el modo que
prefiere seguir un camino hacia el objetivo, pero volverá atrás cuando llegue a un callejón sin salida.
La búsqueda primero el mejor selecciona un nodo para la expansión basada en una función de evaluación. Tradicionalmente, se selecciona en la expansión el nodo con la evaluación más baja, porque la
evaluación mide la distancia al objetivo. Puede implementarse con una estructura de datos de tipo cola
con prioridad, ordenados por su valor de evaluación en orden ascendente.
Aunque el nombre de esta técnica parece venerable es inexacto, ya que si realmente pudiéramos expandir primero el mejor nodo, esto ya no sería una búsqueda en absoluto; sería una marcha directa al
objetivo. Por lo tanto todo lo que podemos hacer es escoger el nodo que parece ser el mejor según la
función de evaluación. Si la función de evaluación es exacta, entonces de verdad sería el mejor nodo; en
realidad,la función de evaluación no será así, y puede dirigir la búsqueda por mal camino.
Las funciones heurísticas son la forma más común de transmitir el conocimiento adicional del problema
al algoritmo de búsqueda.
Para ejemplificar esta técnica tomemos nuevamente el problema del agente de viajes, pero ahora
tomando información adicional del problema, como es la distancia en línea recta que existe entre las
terminales de origen y destino(Salina Cruz-Ciudad Reynosa), que se muestran en la tabla 4.1.
Si tenemos una estructura de datos de tipo cola con prioridad para implementar esta estrategia de
búsqueda:
1. Primero agregamos el estado inicial, en este caso Salina Cruz, y nos queda la estructura de cola con
prioridad como se muestra en la figura 7.1, observe que debemos ordenar en orden ascendente con
respecto a la distancia en línea recta entre terminales de origen y destino
2. el siguiente paso es verificar si el elemento tope de la estructura de cola con prioridad es el estado
objetivo, en caso de serlo la búsqueda termina, porque encontramos lo que buscábamos, sin embargo
si no es el caso, como en este ejemplo que vamos a Ciudad Reynosa, entonces procedemos a eliminar
este elemento de la estructura de cola con prioridad,
3. y agregamos todos las terminales desde la que podemos llegar desde el estado en que nos encontramos, recuerde que deben agregarse en orden ascendente(notese que omití por conveniencia agregar
20
una terminal del cual parti en una iteración anterior), véase figura 7.2(desde la terminal actual, obteniendo los estados sucesores) y volvemos a realizar el paso 2 hasta encontrar lo que buscamos, véase
figura 7.3
Note que utilizamos como valor heurístico la distancia en línea recta que existe entre Salina Cruz
y Ciudad Reynosa, esta función consulta la tabla mostrada anteriormente(tabla 4.1), sin embargo si
requerimos viajar a otra terminal o partir de otro origen, entonces necesitaríamos contar con una tabla
de distancias de líneas rectas al destino diferente. No siempre es necesario de tablas, para obtener valores
heurísticos, puede crearse una función heurística que reciba como parámetros el estado actual y el estado
objetivo, y a partir de ello obtener un valor heurístico calculado con alguna ecuación, definir la heurística
no es tarea fácil, requiere de un análisis complejo y detallado del problema[5].
Figura 7.1: Representación de la estructura de cola con prioridad del problema del agente de viajes
Figura 7.2: Representación de la estructura de cola con prioridad del problema del agente de viajes al agregar los
estados sucesores de la terminal Salina Cruz
Figura 7.3: Continuación de la representación de la estructura de cola con prioridad del problema del agente de
viaje para llegar a Ciudad Reynosa
Una desventaja de esta estrategia de búsqueda es que puede caer en ciclos infinitos. Si no somos
cuidadosos en encontrar los estados repetidos, la solución nunca se encontrará. En nuestro ejemplo estando
en Puebla, si la distancia en línea recta de la Ciudad de México fuera menor a la distancia que hay desde
Orizaba a Cordoba, entonces tomaría primero el camino a la Ciudad de México, al llegar ahí, como ya no
habría otro camino para llegar a ciudad Reynosa regresaría a Puebla, y seleccionaría ir otra vez a Ciudad
de México por tener una distancia más corta a la de los tres caminos posibles. Esto puede resolverse
almacenando en memoria todas las terminales ya visitadas(Esto es lo que permite, por conveniencia,
21
agregar a las estructuras de datos manejadas en las estrategias de búsquedas, terminales de las cuales
partimos en iteraciones anteriores).
22
Sección 8
Búsqueda A*
8.1.
La técnica de búsqueda A-Estrella(A*)
A la forma más ampliamente conocida de la búsqueda primero el mejor se le llama búsqueda A*(pronunciada:
búsqueda A-Estrella). Evalúa los nodos combinando g(n) el coste para alcanzar el nodo y h(n) el coste de
ir al nodo objetivo .
f (n) = g(n) + h(n)
(8.1)
Ya que la g(n) nos da el coste del camino desde el nodo inicio al nodo n, y la h(n) el coste estimado
del camino más barato desde n al objetivo, tenemos: f(n)= coste más barato estimado de la solución a
través de n.
Asi,́ si tratamos de encontrar la solución más barata, es razonable intentar primero el nodo con el valor
más bajo de g(n) + h(n). Resulta que esta estrategia es más razonable.
Para ejemplificar esta estrategia de búsqueda analicemos nuevamente el problema del agente de viajes,
R
tomando información adicional de la tabla de distancias entre las terminales de ADO-GL(véase
tabla
4.1).
Esta técnica puede ser implementada al igual que la búsqueda voraz primero el mejor, por medio de
una cola con prioridad, sólamente la función heurística para obtener el valor de ordenamiento es la que
cambia a la forma de la ecuación (8.1)
1. Primero agregamos el estado inicial, en este caso Salina Cruz, y nos queda la estructura de cola
con prioridad como se muestra en la figura 8.1, observe que debemos ordenar en orden ascendente
con respecto a la función heurística, en donde g(n) equivale a la distancia que existe entre las
terminales(origen a terminal actual) Salina Cruz y Salina Cruz(0 Kms), y h(n) es la distancia en
línea recta de(terminal actual a destino) Salina Cruz a Ciudad Reynosa(1181 Kms), por lo tanto
f(n) es de 1181
2. el siguiente paso es verificar si el elemento tope de la estructura de cola con prioridad es el estado
objetivo, en caso de serlo la búsqueda termina, porque encontramos lo que buscábamos, sin embargo
si no es el caso, como en este ejemplo que vamos a Ciudad Reynosa, entonces procedemos a eliminar
este elemento de la estructura de cola con prioridad,
3. y agregamos todos las terminales desde la que podemos llegar desde el estado en que nos encontramos,
recuerde que deben agregarse en orden ascendente de los valores obtenidos de f(n)(notese que puedo
regresar a una terminal ya visitada en una iteración anterior), véase figura 8.2(desde la terminal
actual, obteniendo los estados sucesores) y volvemos a realizar el paso 2 hasta encontrar lo que
buscamos, véase figura 8.3
23
Veamos otros ejemplos para calcular el valor heurístico, por ejemplo al estar en Salina Cruz, desde
ahí se alcanza Tehuantepec y Huatulco, en el primer caso g(Salina Cruz-Tehuantepec) es de 23 Kms y
h(Tehuantepec-Ciudad Reynosa) es de 1160 Kms por lo tanto f(Tehuantepec) es de 1183, véase figura
8.2. Para el caso de Huatulco, g(Salina Cruz- Huatulco) es de 153 Kms, y h(Huatulco-Ciudad Reynosa)
es de 1175 Kms por lo tanto f(Huatulco) es de 1328 Kms. Cómo el menor coste lo tiene f(Tehuantepec)
entonces al estar en Tehuantepec, desde ahí alcanzamos Juchitán, Salina Cruz(regresando a Salina Cruz de
Nuevo) y Oaxaca, para el primer caso tenemos g(Salina Cruz-Juchitán) es de 49 Kms(23 Kms+26 Kms),
y h(Juchitán- Ciudad Reynosa) es de 1120 Kms por lo tanto f(Juchitán) es de 1169 Kms, el siguiente caso
estando en Tehuantepec regresar a Salina Cruz, entonces g(Salina Cruz a Salina Cruz) es de 46 Kms(23
Kms+23 Kms) y h(Salina Cruz-Ciudad Reynosa) es de 1181 Kms es 1206 Kms por lo tanto f(Salina Cruz)
es de 1227 Kms.
Así continuamos calculando para cada terminal alcanzada. Una ventaja de utilizar esta estrategia es
la de que no se crean ciclos infinitos si existe una buena heurística, ya que se va acumulando el coste total
del camino por lo que se descartan caminos muy largos. Por lo que siempre encontrará la solución siempre
cuando exista dentro todo el espacio de búsqueda.
Figura 8.1: Representación de la estructura de cola con prioridad del problema del agente de viajes para la
estrategia A*
Figura 8.2: Representación de la estructura de cola con prioridad del problema del agente de viajes al agregar los
estados sucesores de la terminal Salina Cruz para la estrategia A*
Figura 8.3: Continuación de la representación de la estructura de cola con prioridad del problema del agente de
viaje para llegar a Ciudad Reynosa para la estrategia A*
La estrategia de búsqueda A* es muy satisfactoria de entre todos los algoritmos vistos anteriormente,
lamentablemente, no significa que A* sea la respuesta a todas nuestras necesidades de búsqueda. La
dificultad es que, para la mayoría de los problemas, el número de nodos a expandir son exponenciales en
longitud de la solución. El tiempo computacional no es, sin embargo, la desventaja principal de A*. Por
lo general, se queda sin mucho espacio antes de que se quede sin tiempo. Por esta razón no es práctico
para problemas grandes[1].
24
Sección 9
Búsqueda Minimax
9.1.
La técnica de búsqueda Minimax
Existen entornos competitivos, en los cuales los objetivos de dos agentes están en conflictos, es decir
cada agente trata de maximizar(beneficiar) su utilidad1 por lo que este tomara decisiones que minimicen
la utilidad del otro(perjudicar), estos dan ocasión a problemas de búsqueda entre adversarios, a menudo
conocido como juegos. En IA, los juegos son, por lo general, una clase más especializada (que los teóricos de
juegos llaman juegos de suma cero, de dos jugadores, por turnos, determinista, de información perfecta).
Por ejemplo, si un jugador gana un juego de ajedrez(+1), el otro jugador necesariamente pierde(-1). Esta
oposición entre las funciones de utilidad de los agentes hace la situación entre adversarios[1].
En una estrategia de búsqueda MiniMax juego con dos jugadores, llamados MAX y MIN(se supone
que los valores altos son buenos para MAX y malos para MIN), MAX mueve primero, y luego mueven por
turno hasta que juego termina. Al final de juego, se conceden puntos al jugador ganador y penalizaciones
al perdedor.
El funcionamiento de Minimax puede resumirse como elegir el mejor movimiento para ti mismo
suponiendo que tu contrincante escogerá el peor para ti. Este puede ser implementado de manera recursiva[2].
Para ejemplificar esta estrategia de búsqueda utilizaremos un problema más especifico, porque incluso
un juego simple como el gato es demasiado complejo para dibujar el árbol de juegos entero. Definiremos
por lo tanto un juego, en donde los movimientos posibles para MAX, en el nodo raíz, se etiquetan por a1 ,
a2 y a3 . Las respuestas posibles a a1 , para MIN, son b1 , b2 y b3 , etc. Este juego particular finaliza después
de un movimiento para MAX y MIN. Las utilidades de los estados terminales en este juego varía desde
dos a 14.
Considerando un árbol de juegos, la estrategia óptima puede determinarse examinando el valor minimax de cada nodo, que escribimos como el VALOR-MINIMAX(n). El valor minimax de un nodo es la
utilidad(para MAX) de estar en el estado correspondiente, asumiendo que ambos jugadores juegan óptimamente desde allí al final del juego. Obviamente, el valor minimax de un estado terminal es solamente su
utilidad. Además, considerando una opción, MAX preferirá moverse aun estado de valor máximo, mientras
que MIN prefiere un estado de valor mínimo. Entonces tenemos lo siguiente:
VALOR-MINIMAX(n) es igual a
UTILIDAD(n) Si n es un estado terminal
maxs ∈ Sucesores(n) VALOR-MINIMAX(s) si n es un estado MAX
mins ∈ Sucesores(n) VALOR-MINIMAX(s) si n es un estado MIN
1 Valor
que sirve para preferir un estado en comparación con otro
25
Apliquemos estas definiciones al árbol de juegos de la figura 9.1. Los nodos terminales se etiquetan
por sus valores de utilidad. El primer nodo de MIN, etiquetado B, tiene tres sucesores con valores 3,12 y
8, entonces su valor minimax es 3. Del mismo modo, los otros dos nodos de MIN tienen un valor minimax
de 2. El nodo raíz es un nodo MAX; sus sucesores tienen valores minimax de 3,2 y 2; entonces tiene un
valor minimax de 3. Podemos identificar también la decisión minimax en la raíz: la acción a1 es la opción
óptima para MAX porque conduce al sucesor con el valor minimax más alto.
Figura 9.1: Un árbol de juegos de dos capas. Los nodos ∆ son nodos MAX, en los que le toca mover a MAX, y
los nodos ∇ son nodos MIN. Los nodos terminales muestran los valores de utilidad para MAX; los otros nodos son
etiquetados por sus valores minimax. El mejor movimiento de MAX en la raíz es a1 , porque conduce al sucesor
con el valor minimax más alto, y la mejor respuesta de MIN es b1 , porque conduce al sucesor con el valor
minimax más bajo.
Esta definición de juego óptimo para MAX supone que MIN también juega óptimamente, y si no lo
hiciera MAX lo hará aún mejor.
Sin embargo Minimax selecciona un movimiento óptimo en un árbol de búsqueda a condición de que las
evaluaciones de los nodos hoja sean exactamente correctas. En realidad, las evaluaciones son generalmente
estimaciones rudimentarias del valor de una posición y se consideran que tienen asociados errores grandes.
Otro problema de minimax es que el número de estados que tiene que examinar es exponencial en el
número de movimientos. Lamentablemente no se puede eliminar el exponente, pero si se podría dividirlo,
con eficacia, en la mitad. La jugada es que es posible calcular la decisión minimax correcta sin mirar todos
los nodos en el árbol de juegos. Es decir, podar el árbol. Esta técnica es conocida como poda-alfabeta.
26
Conclusión
Las estrategias de búsquedas vistas en esta unidad nos dan una idea de cómo los investigadores
en IA proponen diferentes formas de solución para los problemas. Estas técnicas son clásicas
de la IA y es por ello que deben ser conocidas por todos aquellos que están relacionados
con programación de soluciones por computadora. Existen otros métodos que requieren de
mayor complejidad de programación para encontrar mejores soluciones en un tiempo razonable, como son el método de ascenso de la colina, recocido simulado, algoritmos géneticos, las
redes neuronales. Todos ellos requieren de una mayor complejidad de computación y mayor
conocimiento e información del problema.
En la mayoría de las estrategias contempladas en el cápitulo, debe utilizarse médios para
evitar estados repetidos, de esta forma se ahorrara espacio de almacenamiento y tiempo de
recorrido. Tal y como lo dice Rusell-Norvig en su libro Los algoritmos que olvidan su historia
están condenados a repetirla[1].
El mundo real es más complejo de lo que se formula en los problemas para solucionar por
computadora, sin embargo asumimos que los seres humanos para encontrar soluciones tampoco
requieren de mucha información, o al menos no requiere conocer todo el universo para encontrar
soluciones buenas. Por ejemplo, no requerimos de mucha información, ni de mucho tiempo para
seleccionar una botella de refresco que compramos en el supermercado. Esto justifica en parte
lo que hacemos cuando reducimos nuestro problema. Aún cuando por su simplicidad sean
problemas de juguete.
Tabla 9.1: Tabla comparativa de estrategias de búsqueda en espacios de estados
Búsqueda
Profundidad
Amplitud
Con retroceso
Primero el mejor
A*
Minimax
fácil programación
Ventajas
Requisitos modestos de memoria;
fácil implementación
Encuentra la solución si existe
dentro del espacio de búsqueda;
fácil programación
Menor requisito de memoria
al de profundidad
fácil programación
Puede encontrar buenas soluciones;
resultados más eficientes que
una búsqueda no informada
Encuentra buenas soluciones;
No se crean ciclos
requerimientos moderados de memoria
Encuentra una solución óptima
Puede retroceder en caso
de no haber una salida
Desventajas
Puede tener ciclos infinitos
y no encontrar el resultado
Requiere de mucha memoria para
almacenar los nodos
Puede tener ciclos infinitos
y no encontrar el resultado
Puede tener ciclos infinitos;
requiere diseño de una heurística
complejidad de programación de
la heurística;
Requiere de muy buenas heurísticas
Sólo funciona para
juegos contra adversarios.
Crece exponencialmente al
número de movimientos
Requiere de una muy buena
función de evaluación
En la tabla 9.1 se muestra una comparativa entre las estrategias de búsqueda descritas en esta unidad. Esta nos puede dar una idea rápida de cuál estrategia debemos
utilizar al intentar resolver un problema de búsqueda en espacio de estados.
27
Es importante hacer mención que un ser humano no realiza búsquedas de este tipo
en su mente. Porque un ser humano quizá necesitaría de minutos para crear y comprobar cada combinación o estado posible, y tendría una considerable dificultad para
tener en mente cada paso del proceso de comprobación y las asignaciones que ha
comprobado. Aún cuando utilizara papel y lápiz como apoyo, sería un proceso muy
lento. Además un ser humano al pasar el tiempo, su calidad de trabajo disminuye,
por lo que las soluciones que encuentra un ser humano son las optimas. Ahora la
pregunta obligada, ¿Cómo solucionan este problema los seres humanos?, la respuesta
esta siendo investigada dentro del campo de la IA, y esperemos que en un futuro no
lejando encuentren la respuesta.
28
Apéndices
Glosario
Agente: Un agente inteligente es un sistema(hardware o software) situado en un determinado
entorno, capaz de actuar de forma autónoma y razonada en dicho entorno para llevar a
cabo unos objetivos predeterminados[4].
Árbol: estructura de datos ampliamente usada que imita la forma de un árbol (un conjunto
de nodos conectados). Un nodo es la unidad sobre la que se construye el árbol y puede
tener cero o más nodos hijos conectados a él. Se dice que un nodo a es padre de un nodo
b si existe un enlace desde a hasta b (en ese caso, también decimos que b es hijo de a).
Sólo puede haber un único nodo sin padres, que llamaremos raíz. Un nodo que no tiene
hijos se conoce como hoja. Los demás nodos (tienen padre y uno o varios hijos) se les
conoce como rama.
Camino solución: Un grafo dirigido de los nodos visitados que nos llevan a la solución.
Cola: es una estructura de datos, caracterizada por ser una secuencia de elementos en la que
la operación de inserción push se realiza por un extremo y la operación de extracción pop
por el otro. También se le llama estructura FIFO (del inglés First In First Out), debido
a que el primer elemento en entrar será también el primero en salir.
Cola de prioridades es una estructura de datos en la que los elementos se atienden en el
orden indicado por una prioridad asociada a cada uno. Si varios elementos tienen la misma
prioridad, se atenderán de modo convencional según la posición que ocupen.
Estrategia de Búsqueda método computacional para resolver problemas.
Grafo: es un par(V,A) donde V es un conjunto finito no vacío(conjunto de vértices) y A un
conjunto finito de pares (V x V) no ordenados de vértices(conjunto de aristas). En otras
palabras un grafo es un conjunto de objetos llamados vértices o nodos unidos por enlaces
llamados aristas o arcos, que permiten representar relaciones binarias entre elementos de
un conjunto.
Heurística: Del griego heuriskein, encontrar. Criterio que puede resolver un problema pero
que no hay garantía de que siempre lo resuelva. Estimación del coste necesario para
alcanzar una solución desde el estado actual.
Pila: es una lista ordinal o estructura de datos en la que el modo de acceso a sus elementos
es de tipo LIFO (del inglés Last In First Out, último en entrar, primero en salir) que
permite almacenar y recuperar datos. Se aplica en multitud de ocasiones en informática
debido a su simplicidad y ordenación implícita en la propia estructura.
Prolog: Lenguaje de programación ideado a principios de los años 70 en la universidad de AixMarseille por los profesores Alain Colmerauer y Phillipe Roussel. Prolog se enmarca en el
paradigma de los lenguajes lógicos, lo que lo diferencia enormemente de otros lenguajes
más populares tales como Fortran, Pascal, C, Java[8].
Puzle Un puzzle o puzle puede referirse a:
Un rompecabezas, un juego en el que hay que armar una figura.
29
Un crucigrama o juego de palabras cruzadas.
Un acertijo, especie de adivinanza.
juego de ingenio, como el sudoku o el cubo de Rubik.
30
Anexo
Explosiones combinatorias
Generalmente, se utilizará una computadora para resolver problemas en los que el
número de nodos en el espacio de búsqueda sea muy grande y, como el espacio de
búsqueda va creciendo, de igual modo se incrementarán el número de diferentes
caminos posibles hasta la meta. El problema estriba en que cada nodo añadido al
espacio de búsqueda añade más de un camino; por lo que el número de caminos
hasta la meta se incrementará rápidamente con cada nuevo nodo[6].
Para entender este incremento, considere el número de formas de combinar tres
objeto( A, B, C) sobre una mesa. Las seis posibles combinaciones son las mostradas
en la tabla 9.2
Tabla 9.2: Tabla de las posibles combinaciones de tres objetos
A
A
B
B
C
C
B
C
C
A
B
A
C
B
A
C
A
B
Aunque puede comprobar rápidamente que estas son todas las formas de combinar(en términos de probabilidad son llamadas permutaciones de tres elementos
tomadas de tres) A, B, C, puede obtener el mismo número usando el teorema de
una de las ramas de las matemáticas llamada combinatoria, la cual estudia las distintas formas en que las cosas pueden ser combinadas, colocadas o permutadas. El
teorema establece que el número de maneras en que N objetos pueden ser permutados es igual a N!(N factorial). El factorial de un número es el producto de todos
los números iguales o menores a uno dado, hasta 1. Por tanto, 3! es 3 x 2 x 1, o 6.
Dada esta información puede verse que , si usted tuviera 4 objetos para combinar,
habría 4!, o 24, permutaciones. Con 5 objetos, el número es 120; con 6 objetos es
720. Así pues, con, por ejemplo, 1000 objetos, el número de permutaciones posibles
es enorme. Si hay muchas posibilidades, se hace rápidamente imposible examinar, e
incluso enumerar, todas las combinaciones[5].
Debido a que el número de posibilidades crece tan rápidamente, tan sólo los problemas más simples se prestan a búsquedas exhaustivas.
Mientras que la técnica exhaustiva, o fuerza bruta, teóricamente siempre funciona,
normalmente no es práctica porque consume o demasiado tiempo o demasiados recursos de computación, e incluso ambos. Por esa razón, otras técnicas de búsqueda
han ido desarrollándose.
31
Bibliografía
[1] Russell, Stuart J., Norvig, Peter., Inteligencia Artificial: Un enfoque moderno 2da Edición .,
Prentice Hall, 2004.
[2] Nilsson, Nils J., Artificial Intelligence: A New Synthesis, Morgan Kaufmann, 1998.
[3] Mitchell, Tom., Machine Learning, McGraw Hill, 1997.
[4] Wooldridge, Michael., An Introduction to MultiAgent Systems.,John Wiley & Sons., 2002.
[5] Simon, Herbert A., Las ciencias de lo artificial, Comares., 2006.
[6] Schild, H., Utilización de C en la Inteligencia Artificial. McGraw-Hill, 1988.
[7] Colaboradores de Wikipedia. Inteligencia artificial [en línea]. Wikipedia, La enciclopedia libre, 2009 [fecha de consulta: 2 de enero del 2009]. Disponible en
<http://es.wikipedia.org/w/index.php?title=Inteligencia_artificial&oldid=22986524>.
[8] Colaboradores
de
Wikipedia.
Prolog
[en
línea].
Wikipedia,
dia libre, 2009 [fecha de consulta: 17 de enero del 2009].
<http://es.wikipedia.org/w/index.php?title=Prolog&oldid=23327196>.
32
La
enciclopeDisponible en
Descargar