Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

75

description

Se denomina inteligencia artificial a la rama de la informática que desarrolla procesos que imitan a la inteligencia de los seres vivos. La principal aplicación de esta ciencia es la creación de máquinas para la automatización de tareas que requieran un comportamiento inteligente.Algunos ejemplos se encuentran en el área de control de sistemas, planificación automática, la habilidad de responder a diagnósticos y a consultas de los consumidores, reconocimiento de escritura, reconocimiento del habla y reconocimiento de patrones. Los sistemas de IA actualmente son parte de la rutina en campos como economía, medicina, ingeniería y la milicia, y se ha usado en gran variedad de aplicaciones de software, juegos de estrategia como ajedrez de computador y otros videojuegos.

Transcript of Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

Page 1: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar
Page 2: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

Inteligencia Artificial (IA)

Resolucion de problemasAlgoritmos de busqueda

Javier Béjar

Departament de Llenguatges i Sistemes InformàticsEnginyeria en informàtica

1er Cuatrimestre - curso 2006/2007

BY:© $\© C©

Page 3: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

This work is licensed under the Creative CommonsAttribution-NonCommercial-ShareAlike License. BY:© $\© C©

To view a copy of this license, visithttp://creativecommons.org/licenses/by-nc-sa/2.0/ or send a letter to:

Creative Commons,559 Nathan Abbott Way, Stanford,California 94305,USA.

Page 4: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

Índice general

1. Resolución de problemas 1

1.1. ¾Qué es un problema? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

1.2. El espacio de estados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

1.3. Algoritmos de búsqueda en el espacio de estados . . . . . . . . . . . . . . . 6

2. Búsqueda no informada 11

2.1. Búsqueda independiente del problema . . . . . . . . . . . . . . . . . . . . . 11

2.2. Búsqueda en anchura prioritaria . . . . . . . . . . . . . . . . . . . . . . . . 11

2.3. Búsqueda en profundida prioritaria . . . . . . . . . . . . . . . . . . . . . . 12

2.4. Búsqueda en profundidad iterativa . . . . . . . . . . . . . . . . . . . . . . 15

3. Búsqueda heurística 17

3.1. El conocimiento importa . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

3.2. El óptimo está en el camino . . . . . . . . . . . . . . . . . . . . . . . . . . 17

3.3. Tú primero y tú después . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

3.4. El algoritmo A∗ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

3.5. Pero, ¾encontraré el óptimo? . . . . . . . . . . . . . . . . . . . . . . . . . . 22

3.5.1. Admisibilidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

3.5.2. Consistencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

3.5.3. Heurístico más informado . . . . . . . . . . . . . . . . . . . . . . . 25

3.6. Mi memoria se acaba . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

3.6.1. El algoritmo IDA∗ . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

3.6.2. Otras alternativas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

4. Búsqueda local 31

4.1. El tamaño importa, a veces . . . . . . . . . . . . . . . . . . . . . . . . . . 31

3

Page 5: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

4 ÍNDICE GENERAL

4.2. Tu sí, vosotros no . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

4.3. Demasiado calor, demasiado frío . . . . . . . . . . . . . . . . . . . . . . . . 35

4.4. Cada oveja con su pareja . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

4.4.1. Codi�cación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

4.4.2. Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

4.4.3. Combinación de individuos . . . . . . . . . . . . . . . . . . . . . . . 40

4.4.4. El algoritmo genético canónico . . . . . . . . . . . . . . . . . . . . . 41

4.4.5. Cuando usarlos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

5. Búsqueda con adversario 43

5.1. Tú contra mi o yo contra ti . . . . . . . . . . . . . . . . . . . . . . . . . . 43

5.2. Una aproximación trivial . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

5.3. Seamos un poco más inteligentes . . . . . . . . . . . . . . . . . . . . . . . 46

5.4. Seamos aún más inteligentes . . . . . . . . . . . . . . . . . . . . . . . . . . 48

6. Satisfacción de restricciones 51

6.1. De variables y valores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

6.2. Buscando de manera diferente . . . . . . . . . . . . . . . . . . . . . . . . . 52

6.2.1. Búsqueda con backtracking . . . . . . . . . . . . . . . . . . . . . . 53

6.2.2. Propagación de restricciones . . . . . . . . . . . . . . . . . . . . . . 54

6.2.3. Combinando búsqueda y propagación . . . . . . . . . . . . . . . . . 57

6.3. Otra vuelta de tuerca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

7. Problemas resueltos 61

7.1. Búsqueda heurística . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

7.2. Búsqueda local . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

7.3. Juegos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

7.4. Satisfacción de restricciones . . . . . . . . . . . . . . . . . . . . . . . . . . 68

Page 6: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

Capítulo 1

Resolución de problemas

1.1. ¾Qué es un problema?

Una de las principales capacidades de la inteligencia humana es su capacidad pararesolver problemas. La habilidad para analizar los elementos esenciales de cada problema,abstrayéndolos, el identi�car las acciones que son necesarias para resolverlos y el determinarcual es la estrategia más acertada para atacarlos, son rasgos fundamentales que debe tenercualquier entidad inteligente. Es por eso por lo que la resolución de problemas es uno delos temas básicos en inteligencia arti�cial.

Podemos de�nir la resolución de problemas como el proceso que partiendo de unosdatos iniciales y utilizando un conjunto de procedimientos escogidos a priori, es capaz dedeterminar el conjunto de pasos o elementos que nos llevan a lo que denominaremos unasolución. Esta solución puede ser, por ejemplo, el conjunto de acciones que nos llevan acumplir cierta propiedad o como deben combinarse los elementos que forman los datosiniciales para cumplir ciertas restricciones.

Evidentemente, existen muchos tipos diferentes de problemas, pero todos ellos tienenelementos comunes que nos permiten clasi�carlos y estructurarlos. Por lo tanto, no es desca-bellada la idea de poder resolverlos de manera automática, si somos capaces de expresarlosde la manera adecuada.

Para que podamos resolver problemas de una manera automatizada es necesario, enprimer lugar, que podamos expresar las características de los problemas de una maneraformal y estructurada. Eso nos obligará a encontrar un lenguaje común que nos permitade�nir problemas.

En segundo lugar, hemos de de�nir algoritmos que representen estrategias que nospermitan hallar la solución de esos problemas, que trabajen a partir de ese lenguaje derepresentación y que nos garanticen hasta cierta medida que la solución que buscamos seráhallada.

Si abstraemos los elementos que describen un problema podemos identi�car los siguien-

1

Page 7: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

2 CAPÍTULO 1. RESOLUCIÓN DE PROBLEMAS

tes elementos:

1. Un punto de partida, los elementos que de�nen las características del problema.

2. Un objetivo a alcanzar, qué queremos obtener con la resolución.

3. Acciones a nuestra disposición para resolver el problema, de qué herramientas dispo-nemos para manipular los elementos del problema.

4. Restricciones sobre el objetivo, qué características debe tener la solución

5. Elementos que son relevantes en el problema de�nidos por el dominio concreto, quéconocimiento tenemos que nos puede ayudar a resolver el problema de una manerae�ciente.

Escogiendo estos elementos como base de la representación de un problema podemosllegar a diferentes aproximaciones, algunas generales, otras más especí�cas. De entre lostipos de aproximaciones podemos citar:

Espacio de estados: Se trata de la aproximación más general, un problema se divide enun conjunto de pasos de resolución que enlazan los elementos iniciales con los elemen-tos que describen la solución, donde en cada paso podemos ver como se transformael problema.

Reducción a subproblemas: En esta aproximación suponemos que podemos descom-poner el problema global en problemas más pequeños de manera recursiva hastallegar a problemas simples. Es necesario que exista la posibilidad de realizar estadescomposición.

Satisfacción de restricciones: Esta aproximación es especí�ca para problemas que sepuedan plantear como un conjunto de variables a las que se han de asignar valorescumpliendo ciertas restricciones.

Juegos: También es una aproximación especí�ca, en la que el problema se plantea comola competición entre dos o mas agentes

1.2. El espacio de estados

La aproximación más general y más sencilla es la que hemos denominado espacio deestados. Deberemos suponer que podemos de�nir un problema a partir de los elementosque intervienen en él y sus relaciones. En cada instante de la resolución de un problemaestos elementos tendrán unas características y relaciones especí�cas.

Denominaremos estado a la representación de los elementos que describen el problemaen un momento dado. Distinguiremos dos estados especiales, el estado inicial (punto de

Page 8: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

1.2. EL ESPACIO DE ESTADOS 3

partida) y el estado �nal (objetivo del problema). La cuestión principal que nos deberemosplantear será qué debemos incluir en el estado. No existen unas directrices que nos resuelvanesta cuestión, pero podemos tomar como línea general que debemos incluir lo su�ciente paraque, cuando obtengamos la solución, ésta pueda trasladarse al problema real, ya que unasimpli�cación excesiva nos llevará a soluciones inservibles. En el otro extremo, representarelementos de estado que sean irrelevantes o super�uos lo único que conseguirá es aumentarel coste computacional de la resolución.

Para poder movernos entre los diferentes estados que de�nen el problema, necesitaremoslo que denominaremos operadores de transformación. Un operador es una función detransformación sobre la representación de un estado que lo convierte en otro estado. Losoperadores de�nirán una relación de accesibilidad entre estados.

Los elementos que de�nen un operador son:

1. Condiciones de aplicabilidad, es decir, las condiciones que debe cumplir un estadopara que podamos aplicárselo.

2. Función de transformación, es decir, la transformación que ha de aplicarse alestado para conseguir otro.

Igual que con la elección de los elementos que forman parte del estado, tampoco existenunas directrices que nos permitan decidir, de manera general, que operadores serán nece-sarios para resolver el problema, cuantos serán necesarios, o que nivel de granularidad hande tener (como de diferente es el estado transformado respecto al original). Se puede dar elmismo consejo que con los estados, pocos operadores pueden hacer que nuestro problemasea irresoluble, o que la solución no nos sirva en el problema real, demasiados operadorespueden hacer que el coste de la resolución sea prohibitivo.

Los estados y su relación de accesibilidad conforman lo que se denomina el espaciode estados. Éste representa todos los caminos que hay entre todos los estados posibles deun problema. Podría asimilarse con un mapa de carreteras de un problema, la solución denuestro problema esta dentro de ese mapa, sólo nos falta hallar el camino adecuado.

El último elemento que nos queda por de�nir es la solución. La de�niremos de dosmaneras, como la secuencia de pasos que llevan del estado inicial al �nal (secuencia deoperadores) o el estado �nal del problema. Existen problemas en los que la secuencia deoperadores es el objetivo de la solución, en éstos, por lo general, sabemos como es la solu-ción, pero no sabemos como construirla, y existen tambien problemas en los que queremossaber si es posible combinar los elementos del problema cumpliendo ciertas restricciones,pero la forma de averiguarlo no es importante.

Además, podremos catalogar diferentes tipos problema según el tipo de solución quebusquemos, dependiendo de si nos basta con una cualquiera, queremos la mejor o buscamostodas las soluciones posibles. Evidentemente el coste computacional de cada uno de estostipos es muy diferente.

Page 9: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

4 CAPÍTULO 1. RESOLUCIÓN DE PROBLEMAS

En el caso de plantearnos el coste de una solución, deberemos introducir otros ele-mentos en la representación del problema. De�niremos el coste de una solución como elgasto en recursos de la aplicación de los operadores a los estados, por lo que cada operadortendrá también asociado un coste.

Vamos a ver dos ejemplos de como de�nir problemas como espacio de estados:

Ejemplo 1.1 El ocho puzzle es un problema clásico que consiste en un tablero de 9 posi-ciones dispuesto como una matriz de 3×3 en el que hay 8 posiciones ocupadas por �chasnumeradas del 1 al 8 y una posición vacía. Las �chas se pueden mover ocupando la po-sición vacía, si la tienen adyacente. El objetivo es partir de una disposición cualquierade las �chas, para obtener una disposición de éstas en un orden especí�co. Tenemos unarepresentación del problema en la siguiente �gura:

7 8

65

321

4

La de�nición de los elementos del problema para plantearlo en el espacio de estadossería la siguiente:

Espacio de estados: Con�guraciones de 8 �chas en el tablero

Estado inicial: Cualquier con�guración

Estado �nal: Fichas en un orden especí�co

Operadores: Mover el hueco

• Condiciones: El movimiento está dentro del tablero

• Transformación: Intercambio entre el hueco y la �cha en la posición del movi-miento

Solución: Que movimientos hay que hacer para llegar al estado �nal, posiblementenos interesa la solución con el menor número de pasos

En esta de�nición hemos escogido como operador mover el hueco, evidentemente, en elproblema real lo que se mueven son las �chas, pero elegir el movimiento de una �cha como

Page 10: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

1.2. EL ESPACIO DE ESTADOS 5

operador nos habría dado 8 posibles aplicaciones con 4 direcciones posibles para cada una.Al elegir el mover hueco como operador tenemos una única aplicación con 4 direccionesposibles.

Este tipo de elecciones pueden hacer que un problema sea computacionalmente más omenos costoso de resolver.

Ejemplo 1.2 El problema de las N reinas es también un problema clásico, en este casoel problema se trata de colocar N reinas en un tablero de ajedrez de N×N de manera queno se maten entre si. En este problema no nos interesa la manera de hallar la solución,sino el estado �nal. En la �gura tenemos representada la solución para un problema condimensión 4:

Espacio de estados: Con�guraciones de 0 a n reinas en el tablero con sólo una por�la y columna

Estado inicial: Con�guración sin reinas en el tablero

Estado �nal: Con�guración en la que ninguna reina se mata entre si

Operadores: Colocar una reina en una �la y columna

• Condiciones: La reina no es matada por ninguna otra ya colocada

• Transformación: Colocar una reina más en el tablero en una �la y columnadeterminada

Solución: Una solución, pero no nos importan los pasos

También podríamos haber hecho otras elecciones como por ejemplo que el estado inicialtuviera las N reinas colocadas, o que el operador permitiera mover las reinas a una celdaadyacente. Todas estas alternativas supondrían un coste de solución más elevado.

Page 11: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

6 CAPÍTULO 1. RESOLUCIÓN DE PROBLEMAS

Un elemento que será importante a la hora de analizar los problemas que vamos asolucionar, y que nos permitirá tomar decisiones, es el tamaño del espacio de búsqueday su conectividad. Este tamaño in�uirá sobre el tipo de solución que podemos esperar(por ejemplo, si el tamaño es demasiado grande, encontrar la solución óptima puede serirrealizable), el tipo de algoritmo que es más adecuado, (por ejemplo, habrá algoritmosmás aptos para soluciones que están más lejos del estado inicial), y cual será el costecomputacional que implicará la resolución del problema.

Es esencial, a la hora de plantear un problema, estimar cual es el número de estadosque contiene. Por ejemplo, en el caso del ocho puzzle tenemos tantas combinaciones comoposibles ordenes podemos hacer de las 9 piezas mas el hueco, esto signi�ca 9! estadosposibles (362880 estados). Probablemente no tendremos que recorrer todos los estadosposibles del problema, pero nos puede dar una idea de si el problema será mas o menosdifícil de resolver1.

Otro elemento a considerar es la conectividad entre los estados, que se puede calculara partir del factor de rami�cación de los operadores que podemos utilizar. No es lo mismorecorrer un espacio de estados en el que de un estado podemos movernos a unos pocosestados sucesores, que un espacio de estados en los que cada estado esta conectado con casitodos los estados posibles.

Esta es la razón por la que elegir operadores con un factor de rami�cación no muygrande es importante. Pero debemos tener en cuenta una cosa, un factor de rami�caciónpequeño puede hacer que el camino hasta la solución sea más largo. Como siempre, hemosde buscar el compromiso, tener mucha conectividad es malo, pero muy poca también puedeser malo.

En el caso del ocho puzzle, el factor de rami�cación es 4 en el peor de los casos, peroen media podemos considerar que estará alrededor de 2.

1.3. Algoritmos de búsqueda en el espacio de estados

La resolución de un problema planteado como un espacio de estados pasa por su explo-ración. Debemos partir del estado inicial marcado por el problema, evaluando cada pasoposible y avanzando hasta encontrar un estado �nal. En el caso peor deberemos explorartodos los posibles caminos desde el estado inicial hasta poder llegar a un estado que cumplalas condiciones del estado �nal.

Para poder implementar un algoritmo capaz de explorar el espacio de estados en buscade una solución primero debemos de�nir una representación adecuada de éste. Las estruc-turas de datos más adecuadas para representar el espacio de estados son los grafos y losárboles. En estas estructuras cada nodo de representará un estado del problema y los ope-

1Se solía comentar hace unos años que problemas que tengan menos de 232 estados eran la frontera delos problemas sencillos y que se pueden resolver por fuerza bruta simplemente enumerándolos todos, conla capacidad de cálculo actual probablemente ahora ese número mínimo de estados sea bastante mayor.

Page 12: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

1.3. ALGORITMOS DE BÚSQUEDA EN EL ESPACIO DE ESTADOS 7

radores de cambio de estado estarán representados por los arcos. La elección de un árbolo un grafo la determinará la posibilidad de que a un estado sólo se pueda llegar a travésde un camino (árbol) o que haya diferentes caminos que puedan llevar al mismo estado(grafo).

Los grafos sobre los que trabajarán los algoritmos de resolución de problemas son dife-rentes de los algoritmos habituales sobre grafos. La característica principal es que el grafose construirá a medida que se haga la exploración, dado que el tamaño que puede tenerhace imposible que se pueda almacenar en memoría (el grafo puede ser incluso in�nito).Esto hace que, por ejemplo, los algoritmos habituales de caminos mínimos en grafos nosirvan en este tipo de problemas.

Nosotros nos vamos a centrar en los algoritmos que encuentran una solución, peroevidentemente extenderlo a todas las soluciones es bastante sencillo. Este sería un esquemaa alto nivel de un algoritmo que halla una solución de un problema en el espacio de estados:

funcion Busqueda_en_espacio_de_estados retorna s o l u c i onS e l e c c i ona r e l primer estado como e l estado ac tua lmientras e l estado ac tua l no es e l estado f i n a l hacer

Generar y guardar su c e s o r e s de l estado ac tua l ( expansion )Escoger e l s i g u i e n t e estado ent r e l o s pend iente s ( s e l e c c i o n )

fmientras

retorna s o l u c i onffuncion

En este algoritmo tenemos varias decisiones que nos permitirán obtener diferentes va-riantes que se comportarán de distinta manera y que tendrán propiedades especí�cas. Laprimera decisión es el orden de expansión, o lo que es lo mismo, el orden en el quegeneramos los sucesores de un nodo. La segunda decisión es el orden de selección, o sea,el orden en el que decidimos explorar los nodos que aún no hemos visitado.

Entrando un poco más en los detalles de funcionamiento del algoritmo, podremos dis-tinguir dos tipos de nodos, los nodos abiertos, que representarán a los estados generadospero aún no visitados y los nodos cerrados, que corresponderán a los estados visitados yque ya se han expandido.

Nuestro algoritmo siempre tendrá una estructura que almacenará los nodos abiertos.Las diferentes políticas de inserción de esta estructura serán las que tengan una in�uenciadeterminante sobre el tipo de búsqueda que hará el algoritmo.

Dado que estaremos explorando grafos, y que por lo tanto durante la exploración nosencontraremos con estados ya visitados, puede ser necesario tener una estructura paraalmacenar los nodos cerrados. Merecerá la pena si el número de nodos diferentes es pequeñorespecto al número de caminos, pero puede ser prohibitivo para espacios de búsqueda muygrandes.

A continuación tenemos un algoritmo algo más detallado que nos va a servir como

Page 13: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

8 CAPÍTULO 1. RESOLUCIÓN DE PROBLEMAS

esquema general para la mayoría de los algoritmos que iremos viendo:

Algoritmo Busqueda GeneralEst_abiertos . i n s e r t a r ( Estado i n i c i a l )Actual= Est_abiertos . primero ( )

mientras no e s_ f i na l ?( Actual ) y no Est_abiertos . vac ia ? ( ) hacer

Est_abiertos . borrar_primero ( )Est_cerrados . i n s e r t a r ( Actual )H i jo s= generar_sucesores ( Actual )H i jo s= t ra ta r_repe t i do s ( Hijos , Est_cerrados , Est_abiertos )Est_abiertos . i n s e r t a r ( H i jo s )Actual= Est_abiertos . primero ( )

fmientras

fAlgoritmo

Variando la estructura de abiertos variamos el comportamiento del algoritmo (ordende visita de los nodos). La función generar_sucesores seguirá el orden de generaciónde sucesores de�nido en el problema. El tratamiento de repetidos dependerá de cómo sevisiten los nodos, en función de la estrategia de visitas puede ser innecesario.

Para poder clasi�car y analizar los algoritmos que vamos a tratar, escogeremos unaspropiedades que nos permitirán caracterizarlos. Estas propiedades serán:

Completitud: Si un algoritmo es completo tenemos la garantía de que hallará lasolución, si no lo es, es posible que algoritmo no acabe o que sea incapaz de encon-trarla.

Complejidad temporal: Nos indicará el coste temporal de la búsqueda en fun-ción del tamaño del problema, generalmente a partir del factor de rami�cación y laprofundidad a la que se encuentra la solución.

Complejidad espacial: Espacio requerido para almacenar los nodos pendientes deexplorar. También se puede tener en cuenta el espacio para almacenar los nodos yaexplorados si es necesario para el algoritmo

Optimalidad: Si es capaz de encontrar la mejor solución según algún criterio depreferencia o coste.

Atendiendo a estos criterios podemos clasi�car los algoritmos principales que estudia-remos en:

Algoritmos de búsqueda no informada: Estos algoritmos no tienen en cuenta elcoste de la solución durante la búsqueda. Su funcionamiento es sistemático, siguenun orden de visitas de nodos �jo, establecido por la estructura del espacio de bús-queda. Los principales ejemplos de estos algoritmos son el de anchura prioritaria, elde profundidad prioritaria y el de profundidad iterativa.

Page 14: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

1.3. ALGORITMOS DE BÚSQUEDA EN EL ESPACIO DE ESTADOS 9

Algoritmos de búsqueda heurística y búsqueda local: Estos algoritmos utilizanuna estimación del coste o de la calidad de la solución para guiar la búsqueda, demanera que se basan en algún criterio heurístico dependiente del problema. Estosalgoritmos no son sistemáticos, de manera que el orden de exploración no lo determinala estructura del espacio de búsqueda sino el criterio heurístico. Algunos de ellostampoco son exhaustivos y basan su menor complejidad computacional en ignorarparte del espacio de búsqueda.

Existen bastantes algoritmos de este tipo con funcionamientos muy diferentes, nosiempre garantizan el encontrar la solución óptima, ni tan siquiera el hallar unasolución. Los principales ejemplos de estos algoritmos son A∗, IDA∗, Branch & Bound,Hill-climbing.

Page 15: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

10 CAPÍTULO 1. RESOLUCIÓN DE PROBLEMAS

Page 16: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

Capítulo 2

Búsqueda no informada

2.1. Búsqueda independiente del problema

Los algoritmos de búsqueda no informada (también conocidos como algoritmos de bús-queda ciega), no dependen de información propia del problema a la hora de resolverlo. Estoquiere decir que son algoritmos generales y por lo tanto se pueden aplicar en cualquier cir-cunstancia.

Estos algoritmos se basan en la estructura del espacio de estados y determinan estra-tegias sistemáticas para su exploración. Es decir, siguen una estrategia �ja a la hora devisitar los nodos que representan los estados del problema. Se trata también de algoritmosexhaustivos, de manera que pueden acabar recorriendo todos los nodos del problema parahallar la solución.

Existen básicamente dos políticas de recorrido de un espacio de búsqueda, en anchuray en profundidad. Todos los algoritmos que se explicarán a continuación se basan en unade las dos.

Al ser algoritmos exhaustivos y sistemáticos su coste puede ser prohibitivo para lamayoría de los problemas reales, por lo tanto sólo será aplicables en problemas pequeños. Suventaja es que no nos hace falta obtener ningún conocimiento adicional sobre el problema,por lo que siempre son aplicables.

2.2. Búsqueda en anchura prioritaria

La búsqueda en anchura prioritaria intenta explorar el espacio de búsqueda haciendoun recorrido por niveles, de manera que un nodo se visita solamente cuando todos suspredecesores y sus hermanos anteriores en orden de generación ya se han visitado.

Para obtener este algoritmo solo hemos de instanciar la estructura que guarda los nodosabiertos a una cola. Esta estructura nos consigue que el algoritmo general visite los nodos

11

Page 17: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

12 CAPÍTULO 2. BÚSQUEDA NO INFORMADA

en el orden que hemos establecido.

Si nos �jamos en las propiedades que hemos escogido para clasi�car los algoritmos:

Completitud: El algoritmo siempre encuentra una solución.

Complejidad temporal: El coste es exponencial respecto al factor de rami�cación yla profundidad de la solución O(rp).

Complejidad espacial: El coste es exponencial respecto al factor de rami�cación y laprofundidad de la solución O(rp).

Optimalidad: La solución obtenida es óptima respecto al número de pasos desde laraíz.

Respecto al tratamiento de nodos repetidos, si nos �jamos en la �gura que aparece acontinuación:

�������������������������

�������������������������

�������������������������

�������������������������

�������������������������

�������������������������

���������������

���������������

������

������

���������������

���������������

� � � � � �

��������������� ������������������������������������������������������������������������������������������������������������������������������������������������������

������������������������������������������������������������������������������������������������������������������������������������������������������

������������������������������������������������������������������������������������������������������������������������������������������������������

������������������������������������������������������������������������������������������������������������������������������������������������������

��������������������������������������������������������

��������������������������������������������������������

�������������������������������������������������

�������������������������������������������������

El nodo de color negro sería el nodo generado actual, los nodos en cuadrícula son nodoscerrados y los nodos rayados son nodos abiertos. Si el nodo generado actual está repetidoen niveles superiores (más cerca de la raíz), su coste será peor ya que su camino desde laraíz es más largo, si está al mismo nivel, su coste será el mismo. Esto quiere decir que sucoste será peor o igual que algún nodo anterior visitado o no, de manera que lo podremosdescartar, ya que o lo hemos expandido ya o lo haremos próximamente.

El coste espacial de guardar los nodos cerrados para el tratamiento de repetidos esO(rp).

2.3. Búsqueda en profundida prioritaria

La búsqueda en profundidad prioritaria intenta seguir un camino hasta la mayor pro-fundidad posible, retrocediendo cuando acaba el camino y retomando la última posibilidadde elección disponible.

Page 18: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

2.3. BÚSQUEDA EN PROFUNDIDA PRIORITARIA 13

Para obtener este algoritmo solo hemos de instanciar la estructura que guarda los nodosabiertos a una pila. Esta estructura nos consigue que el algoritmo general visite los nodosen el orden que hemos establecido.

El principal problema de este algoritmo es que no acaba si existe la posibilidad deque hayan caminos in�nitos. Una variante de este algoritmo que evita este problema esel algoritmo de profundidad limitada, éste impone un límite máximo de profundidadque impone la longitud máxima de los caminos recorridos. Esta limitación garantiza que elalgoritmo acaba, pero no garantiza la solución ya que esta puede estar a mayor profundidadque el límite impuesto.

El algoritmo de profundidad limitada es el siguiente:

Algoritmo Busqueda en profundidad l im i tada ( l im i t e : ente ro )Est_abiertos . i n s e r t a r ( Estado i n i c i a l )Actual= Est_abiertos . primero ( )mientras no e s_ f i na l ?( Actual ) y no Est_abiertos . vac ia ? ( ) hacer

Est_abiertos . borrar_primero ( )Est_cerrados . i n s e r t a r ( Actual )s i profundidad ( Actual ) <= l im i t e entonces

Hi jo s= generar_sucesores ( Actual )H i jo s= t ra ta r_repe t i do s ( Hijos , Est_cerrados , Est_abiertos )

f s i

Est_abiertos . i n s e r t a r ( H i jo s )Actual= Est_abiertos . primero ( )

fmientras

fAlgoritmo

La única diferencia con el algoritmo general es que se dejan de generar sucesores cuandose alcanza la profundidad límite.

Si nos �jamos en las propiedades que hemos escogido para clasi�car los algoritmos:

Completitud: El algoritmo encuentra una solución si se impone una profundidadlímite y existe una solución dentro de ese límite.

Complejidad temporal: El coste es exponencial respecto al factor de rami�cación yla profundidad del límite de exploración O(rp).

Complejidad espacial: El coste es lineal respecto al factor de rami�cación y el límite deprofundidad O(rp). Si hacemos una implementación recursiva del algoritmo el costees O(p), ya que no nos hace generar todos los sucesores de un nodo, pudiéndolostratar uno a uno. Si tratamos los nodos repetidos el coste espacial es igual que enanchura ya que tendremos que guardar todos los nodos cerrados.

Optimalidad: No se garantiza que la solución sea óptima.

Page 19: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

14 CAPÍTULO 2. BÚSQUEDA NO INFORMADA

Respecto al tratamiento de nodos repetidos, si nos �jamos en la �gura que aparece acontinuación:

���������������

���������������

���������������

���������������

���������������

���������������

��������������������������������������������������������

��������������������������������������������������������

���������������������

���������������������

���������������

���������������

� � � � � �

���������������

���������������

���������������

��������������������������������������������������������

��������������������������������������������������������

�������������������������������������������������

�������������������������������������������������

���������������

���������������

���������������

���������������

���������������

���������������

�������������������������

����������������������������������������������������������������������������������������������������������������������������������������������������������������

���������������������������������������������������������������������������������������������������������������������������������������

���������������������������������������������������������������������������������������������������������������������������������������

� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �

El nodo de color negro sería el nodo generado actual, los nodos en cuadrícula son nodoscerrados y los nodos rayados son nodos abiertos. Si el nodo generado actual está repetidoen niveles superiores (más cerca de la raíz), su coste será peor ya que su camino desdela raíz es más largo, si está al mismo nivel, su coste será el mismo. En estos dos casospodemos olvidarnos de este nodo.

En el caso de que el repetido corresponda a un nodo de profundidad superior, signi�caque hemos llegado al mismo estado por un camino más corto, de manera que deberemosmantenerlo y continuar su exploración, ya que nos permitirá llegar a mayor profundidadque antes.

En el caso de la búsqueda en profundidad, el tratamiento de nodos repetidos no escrucial ya que al tener un límite en profundidad los ciclos no llevan a caminos in�nitos.Además, no tratando repetidos mantenemos el coste espacial lineal, lo cual es una granventaja.

El evitar tener que tratar repetidos y tener un coste espacial lineal supone una caracte-rística diferenciadora de hace muy ventajosa a la búsqueda en profundidad. Este algoritmoserá capaz de obtener soluciones que se encuentren a gran profundidad.

En un problema concreto, el algoritmo de búsqueda en anchura tendrá una estructurade nodos abiertos de tamaño O(rp), lo que agotará rápidamente la memoria impidiendocontinuar la búsqueda, pero solo habiendo alcanzado una profundidad de camino de p. Encambio el algoritmo en profundidad solo tendrá O(rp) nodos abiertos al llegar a esa mismaprofundidad.

Esto quiere decir que en problemas difíciles la estrategia en profundidad será la únicacapaz de hallar una solución con un espacio de memoria limitado.

Page 20: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

2.4. BÚSQUEDA EN PROFUNDIDAD ITERATIVA 15

2.4. Búsqueda en profundidad iterativa

Este algoritmo intenta obtener las propiedades ventajosas de la búsqueda en profundi-dad y en anchura combinadas, es decir, un coste espacial lineal y asegurar que la soluciónserá óptima respecto a la longitud del camino.

Para obtener este algoritmo lo que se hace es repetir sucesivamente el algoritmo deprofundidad limitada, aumentando a cada iteración la profundidad máxima a la que per-mitimos llegar.

Este algoritmo obtendría el mismo efecto que el recorrido en anchura en cada iteración,ya que a cada paso recorremos un nivel más del espacio de búsqueda. El coste espacial serálineal ya que cada iteración es un recorrido en profundidad. Para que el algoritmo acabeen el caso de que no haya solución se puede imponer un límite máximo de profundidad enla búsqueda.

Aparentemente podría parecer que este algoritmo es más costoso que los anteriores altener que repetir en cada iteración la búsqueda anterior, pero si pensamos en el númerode nodos nuevos que recorremos a cada iteración, estos son siempre más que todos los quehemos recorrido en todas las iteraciones anteriores, por lo que las repeticiones suponen unfactor constante respecto a los que recorreriamos haciendo sólo la última iteración.

El algoritmo de profundidad iterativa es el siguiente:

Algoritmo Busqueda en profundidad i t e r a t i v a ( l im i t e : ente ro )pro f =1;Est_abiertos . i n i c i a l i z a r ( )mientras (no e s_ f i na l ?( Actual ) ) y prof<l im i t e hacer

Est_abiertos . i n s e r t a r ( Estado i n i c i a l )Actual= Est_abiertos . primero ( )mientras (no e s_ f i na l ?( Actual ) ) y no Est_abiertos . vac ia ? ( ) hacer

Est_abiertos . borrar_primero ( )Est_cerrados . i n s e r t a r ( Actual )s i profundidad ( Actual ) <= pro f entonces

Hi jo s= generar_sucesores ( Actual )H i jo s= t ra ta r_repe t i do s ( Hijos , Est_cerrados , Est_abiertos )

f s i

Est_abiertos . i n s e r t a r ( H i jo s )Actual= Est_abiertos . primero ( )

fmientras

pro f=pro f+1Est_abiertos . i n i c i a l i z a r ( )

fmientras

fAlgoritmo

Si nos �jamos en las propiedades que hemos escogido para clasi�car los algoritmos:

Page 21: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

16 CAPÍTULO 2. BÚSQUEDA NO INFORMADA

Completitud: El algoritmo siempre encontrará la solución

Complejidad temporal: La misma que la búsqueda en anchura. El regenerar el árbolen cada iteración solo añade un factor constante a la función de coste O(rp)

Complejidad espacial: Igual que en la búsqueda en profundidad

Optimalidad: La solución es óptima igual que en la búsqueda en anchura

Igual que en el caso del algoritmo en profundidad, el tratar repetidos acaba con todaslas ventajas espaciales del algoritmo, por lo que es aconsejable no hacerlo.

Si el algoritmo en profundidad limitada es capaz de encontrar soluciones a mayor pro-fundidad, este algoritmo además nos garantizará que la solución será óptima. Por lo tantoeste es el algoritmo más ventajoso de los tres.

Page 22: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

Capítulo 3

Búsqueda heurística

3.1. El conocimiento importa

Es evidente que los algoritmos de búsqueda no informada serán incapaces de encontrarsoluciones en problemas en los que el tamaño del espacio de búsqueda sea grande. Todosestos algoritmos tiene un coste temporal que es una función exponencial del tamaño dela entrada, por lo tanto el tiempo para encontrar la mejor solución a un problema no esasumible en problemas reales.

La manera de conseguir reducir este tiempo de búsqueda a algo razonable es intentarhacer intervenir conocimiento sobre el problema que queremos resolver dentro del funcio-namiento del algoritmo de búsqueda.

El problema que tendremos es que este conocimiento será particular para cada proble-ma, por lo tanto no será exportable a otros. Perderemos en generalidad, pero podremosganar en e�ciencia temporal.

En este capítulo nos centraremos en los algoritmos que buscan la solución óptima. Esteobjetivo solo es abordable hasta cierto tamaño de problemas, existirá todo un conjunto deproblemas en los que la búsqueda del óptimo será imposible generalmente por el tamañode su espacio de búsqueda.

3.2. El óptimo está en el camino

Para poder plantear la búsqueda del óptimo siempre hemos que tener alguna medidadel coste de obtener una solución. Este coste lo mediremos sobre el camino que nos llevadesde el estado inicial del problema hasta el estado �nal. No todos los problemas se puedenplantear de esta forma tal y como veremos en el próximo capítulo.

Por lo tanto, supondremos que podemos plantear nuestra búsqueda como la búsquedade un camino y que de alguna manera somos capaces de saber o estimar cual es la longitud o

17

Page 23: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

18 CAPÍTULO 3. BÚSQUEDA HEURÍSTICA

coste de éste. Por lo general tendremos un coste asociado a los operadores que nos permitenpasar de un estado a otro, por lo que ese coste tendrá un papel fundamental en el cálculodel coste del camino.

Los algoritmos que veremos utilizarán el cálculo del coste de este camino para saberque nodos merece la pena explorar antes. De esta manera, perderemos la sistematicidad delos algoritmos de búsqueda no informada, y el orden de visita de los estados de búsquedano vendrá determinado por su posición en el grafo de búsqueda, sino por su coste.

Dado que el grafo va siendo generado a medida que lo exploramos, podemos ver quetenemos dos elementos que intervienen en el coste del camino hasta la solución que bus-camos. En primer lugar, tendremos el coste del camino recorrido, que podremos calcularsimplemente sumando los costes de los operadores aplicados desde el estado inicial hastael nodo actual. En segundo lugar, tendremos el coste más difícil, que es el del camino quenos queda por recorrer hasta el estado �nal. Dado que lo desconocemos, tendremos queutilizar el conocimiento del que disponemos del problema para obtener una aproximación.

Evidentemente, la calidad de ese conocimiento que nos permite predecir el coste futuro,hará más o menos exitosa nuestra búsqueda. Si nuestro conocimiento fuera perfecto, po-dríamos dirigirnos rápidamente hacia el objetivo descartando todos los caminos de mayorcoste, en este extremo podríamos encontrar nuestra solución en tiempo lineal. En el otroextremo, si estuviéramos en la total ignorancia, tendríamos que explorar muchos caminosantes de hallar la solución óptima, todos en el peor caso. Esta última situación es en la quese encuentra la búsqueda no informada y desgraciadamente la primera situación es rara.

Quedará pues como labor fundamental en cada problema, obtener una función que noshaga el cálculo del coste futuro desde un estado al estado solución. Cuanto más podamosajustarlo al coste real, mejor funcionarán los algoritmos que veremos a continuación.

3.3. Tú primero y tú después

El fundamento de los algoritmos de búsqueda heurística será el cómo elegir que nodoexplorar primero, para ello podemos utilizar diferentes estrategias que nos darán diferentespropiedades.

Una primera estrategia que se nos puede ocurrir es utilizar la estimación del coste futuropara decidir qué nodos explorar primero. De esta manera supondremos que los nodos queaparentemente están más cerca de la solución formarán parte del camino hasta la soluciónóptima y por lo tanto la encontraremos antes si los exploramos en primer lugar.

Esta estrategia se traduce en el algoritmo primero el mejor avaricioso (greedy best�rst). La única diferencia respecto a los algoritmos que hemos visto es el utilizar comoestructura para almacenar los nodos abiertos una cola con prioridad. La prioridad de losnodos la marca la estimación del coste del camino del nodo hasta el nodo solución.

El algoritmo es el siguiente:

Page 24: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

3.4. EL ALGORITMO A∗ 19

Algoritmo Greedy Best F i r s tEst_abiertos . i n s e r t a r ( Estado i n i c i a l )Actual= Est_abiertos . primero ( )mientras (no e s_ f i na l ?( Actual ) ) y (no Est_abiertos . vac ia ? ( ) ) hacer

Est_abiertos . borrar_primero ( )Est_cerrados . i n s e r t a r ( Actual )h i j o s= generar_sucesore s ( Actual )h i j o s= t ra ta r_repe t i do s ( Hi jos , Est_cerrados , Est_abiertos )Est_abiertos . i n s e r t a r ( H i jo s )Actual= Est_abiertos . primero ( )

fmientras

fAlgoritmo

El explorar antes los nodos más cercanos a la solución probablemente nos hará en-contrarla antes, pero el no tener en cuenta el coste del camino recorrido hace que no segarantice la solución óptima.

3.4. El algoritmo A∗

Dado que nuestro objetivo no es sólo llegar lo mas rápidamente a la solución, sinoencontrar la de menor coste tendremos que tener en cuenta el coste de todo el camino y nosolo el camino por recorrer. Para poder introducir el siguiente algoritmo y establecer suspropiedades tenemos primero que dar una serie de de�niciones.

Denominaremos el coste de un arco entre dos nodos ni y nj al coste del operador quenos permite pasar de un nodo al otro, y no denotaremos como c(ni, nj).

Denominaremos el coste de un camino entre dos nodos ni y nj a la suma de los costesde todos los arcos que llevan desde un nodo al otro y lo denotaremos como

C(ni, nj) =j−1∑x=i

c(nx, nx+1)

Denominaremos el coste del camino mínimo entre dos nodos ni y nj al camino demenor coste de entre los que llevan desde un nodo al otro y lo denotaremos como

K(ni, nj) =l

mınk=1

Ck(ni, nj)

Si nj es un nodo terminal, llamaremos h(ni) a K(ni, nj), es decir, el coste del caminomínimo desde un estado cualquiera a un estado solución.

Si ni es un nodo inicial, llamaremos g(nj) a K(ni, nj), es decir, el coste del caminomínimo desde el estado inicial a un estado cualquiera.

Page 25: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

20 CAPÍTULO 3. BÚSQUEDA HEURÍSTICA

Esto nos permite de�nir el coste del camino mínimo que pasa por cualquier nodo comouna combinación del coste del camino mínimo desde el nodo inicial al nodo mas el costedel nodo hasta el nodo �nal:

f(n) = g(n) + h(n)

Dado que el valor de h(n) lo desconocemos, lo substituiremos por una función que noslo aproximará, a esta función la denotaremos h′(n) y le daremos el nombre de funciónheurística. De esta manera tendremos una estimación del coste del camino mínimo quepasa por cierto nodo:

f ′(n) = g(n) + h′(n)

Será este valor el que utilicemos para decidir en nuestro algoritmo de búsqueda cual esel siguiente nodo a explorar de entre todos los nodos abiertos disponibles. Para realizar esabúsqueda utilizaremos el algoritmo que denominaremos A∗:

Algoritmo A∗Est_abiertos . i n s e r t a r ( Estado i n i c i a l )Actual= Est_abiertos . primero ( )mientras (no e s_ f i na l ?( Actual ) ) y (no Est_abiertos . vac ia ? ( ) ) hacer

Est_abiertos . borrar_primero ( )Est_cerrados . i n s e r t a r ( Actual )h i j o s= generar_sucesore s ( Actual )h i j o s= t ra ta r_repe t i do s ( Hi jos , Est_cerrados , Est_abiertos )Est_abiertos . i n s e r t a r ( H i jo s )Actual= Est_abiertos . primero ( )

fmientras

fAlgoritmo

Como se observará, el algoritmo es el mismo que el primero el mejor avaricioso,lo único que cambia es que ahora la ordenación de los nodos se realiza utilizando el valorde f ′. Como criterio de ordenación, consideraremos que a igual valor de f ′ los nodos conh′ más pequeña se explorarán antes (simplemente porque si la h′ es más pequeña es queson nodos mas cerca de la solución), a igual h′ se consideraran en el orden en el que seintrodujeron en la cola.

Nunca está de más el remarcar que el algoritmo sólo acaba cuando se extrae unasolución de la cola. Es posible que en cierto momento ya haya nodos solución, pero hasta queno se hayan explorado los nodos por delante de ellos, no podemos asegurar que realmentesean soluciones buenas. Siempre hay que tener en mente que los nodos están ordenados porel coste estimado del camino total, si la estimación es menor es que podrían pertenecer aun camino con una solución mejor.

Page 26: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

3.4. EL ALGORITMO A∗ 21

Hay que considerar que el coste de este algoritmo es también O(rp) en el caso peor.Si por ejemplo, la función h′(n) fuera siempre 0, el algoritmo se comportaría como unabúsqueda en anchura gobernada por el coste del camino recorrido.

Lo que hace que este algoritmo pueda tener un coste temporal inferior es la bondad dela función h′. De hecho, podemos interpretar las funciones g y h′ como las que gobiernanel comportamiento en anchura o profundidad del algoritmo.

Cuanto más cercana a la realidad sea h′, mayor será el comportamiento en profundidaddel algoritmo, pues los nodos que aparentemente están mas cerca de la solución se exploranantes. En el momento en el que esa información deje de ser �able, el coste del camino yaexplorado hará que otros nodos menos profundos tengan un coste total mejor y por lo tantose abrirá la búsqueda en anchura.

Si pensamos un poco en el coste espacial que tendrá el algoritmo podemos observar quecomo éste puede comportarse como un algoritmo de búsqueda en anchura, el coste espacialen el caso peor también será O(rp). Igual que nos pasa con el coste temporal, si la funciónheurística es su�cientemente buena no llegaremos a necesitar tanto espacio antes de llegara la solución.

El tratamiento de nodos repetidos en este algoritmo se realiza de la siguiente forma:

Si es un repetido que está en la estructura de abiertos

• Si su coste es menor substituimos el coste por el nuevo, esto podrá variar suposición en la estructura de abiertos

• Si su coste es igual o mayor nos olvidamos del nodo

Si es un repetido que está en la estructura de cerrados

• Si su coste es menor reabrimos el nodo insertándolo en la estructura de abiertoscon el nuevo coste, no hacemos nada con sus sucesores, ya se reabrirán si hacefalta

• Si su coste es mayor o igual nos olvidamos del nodo

Mas adelante veremos que si la función h′ cumple ciertas condiciones podemos evitarel tratamiento de repetidos.

A continuación podemos ver un pequeño ejemplo de ejecución del algoritmo A∗

Ejemplo 3.1 Si consideramos el grafo de búsqueda de la �gura, donde en cada nodo tene-mos descompuesto el coste en g y h′ y marcado el orden en el que el algoritmo ha visitadocada nodo:

Page 27: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

22 CAPÍTULO 3. BÚSQUEDA HEURÍSTICA

1+1

0+2

1+1 1+3

2+1 1+2 2+2

3+2

4+1

5+04+05+0

4+1 3+14+1

3+1 3+1

Objetivo Objetivo Objetivo

1

2

4

6

10

5

3 8

9

7

11

La numeración en los nodos indica el orden en que el algoritmo A∗ los ha expandido (ypor lo tanto el orden en el que han sido extraidos de la cola).

Podemos observar también que hay un nodo abierto que es revisitado por otro caminocon un coste inferior que substituye al encontrado con anterioridad.

3.5. Pero, ¾encontraré el óptimo?

Hasta ahora no hemos hablado para nada sobre la optimalidad de la solución. Hemosvisto que en el caso degenerado tenemos una búsqueda en anchura guiada por el costedel camino explorado, eso nos debería garantizar el óptimo en este caso. Pero como he-mos comentado, la función h′ nos permite obtener un comportamiento de búsqueda enprofundidad y sabemos que en este caso nada nos garantiza el óptimo.

El saber si encontraremos o no el óptimo mediante el algoritmo A∗ recae totalmente enlas propiedades que cumple la función heurística, si esta cumple ciertos criterios sabremosque encontraremos la solución óptima, si no los cumple, no lo podremos saber.

3.5.1. Admisibilidad

La propiedad clave que nos garantizará el hallar la solución óptima es la que denomina-remos admisibilidad. Diremos que una función heurística h′ es admisible siempre que secumpla que su valor en cada nodo sea menor o igual que el valor del coste real del caminoque nos falta por recorrer hasta la solución:

∀n 0 ≤ h′(n) ≤ h(n)

Page 28: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

3.5. PERO, ¾ENCONTRARÉ EL ÓPTIMO? 23

Esto quiere decir que la función heurística ha de ser un estimador optimista del costeque falta para llegar a la solución.

Ejemplo 3.2 Podemos ver en este ejemplo dos grafos de búsqueda, uno con una funciónadmisible y otra que no lo es

A

B C D

FE

G

I J

H

(3+1)

(1+3)

(4+1) (4+0)

(3+1)

(2+2) (2+2)

(1+5)(1+2)

Objetivo

1

2

3

4

5

6

7

8

En este primer caso, la función heurística siempre es admisible, pero en la primerarama el coste es más pequeño que el real, por lo que pierde cierto tiempo explorándola (elefecto en profundidad que hemos comentado), pero al �nal el algoritmo pasa a la segundarama hallando la solución.

A

B C D

E

G

H

F

(3+1)

(2+2)

(1+5)(1+2)

1

2

3

4Objetivo

(4+0)Objetivo

(2+0)

5

(1+4)

En este caso el algoritmo acabaría al encontrar la solución en G, a pesar de que haya

Page 29: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

24 CAPÍTULO 3. BÚSQUEDA HEURÍSTICA

una solución con un coste más pequeño en H, simplemente porque el coste estimado que daen el nodo D es superior al real.

Esta propiedad implica que, si podemos demostrar que la función de estimación h′ queutilizamos en nuestro problema la cumple, siempre encontraremos una solución óptima. Elproblema radica en hacer esa demostración, pues cada problema es diferente. Por ello, nopodemos dar un método general para demostrar la admisibilidad de una función heurística.

Lo que si podemos establecer es que para demostrar que una función heurística no esadmisible basta con encontrar un nodo que incumpla la propiedad. Esto se puede observarsimplemente comprobando si alguno de los nodos que están en el camino solución tiene uncoste mayor que el real, pues sólo disponemos del coste real para los nodos de ese camino.

Hay que remarcar también que la propiedad de admisibilidad es un propiedad de lafunción heurística, no del algoritmo que la utiliza, por lo que si la función es admisiblecualquier algoritmo de los que veamos que la utilice nos hallará la solución óptima.

Para una discusión sobre técnicas para construir heurísticos admisibles se puede con-sultar el capítulo 4, sección 4.2, del libro �Inteligéncia Arti�cial: Un enfoque Moderno� (2a

edición) de S. Russell y P. Norvig .

3.5.2. Consistencia

Podemos de�nir la propiedad de consistencia como una extensión de la propiedad deadmisibilidad. Si tenemos el coste h(ni) y el coste h(nj) y el coste óptimo para ir de ni anj, o sea K(ni, nj), se cumple la desigualdad triangular:

h(ni) ≤ h(nj) + K(ni, nj)

La condición de consistencia exige pedir lo mismo al estimador h′:

h′(ni)− h′(nj) ≤ K(ni, nj)

Es decir, que la diferencia de las estimaciones ha de ser menor o igual que la distanciaóptima entre nodos. Si esta propiedad se cumple esto quiere decir que h′ es un estimadoruniforme de h.

Si h′ es consistente además se cumple que el valor de g(n) para cualquier nodo esK(ni, nj), por lo tanto, una vez hemos llegado a un nodo sabemos que hemos llegado a élpor el camino óptimo desde el nodo inicial. Si esto es así, no es posible que nos encontremosel mismo nodo por un camino alternativo con un coste menor y esto hace que el tratamientode nodos cerrados duplicados sea innecesario, lo que nos ahorra tener que guardarlos.

Page 30: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

3.6. MI MEMORIA SE ACABA 25

3.5.3. Heurístico más informado

Otra propiedad interesante es la que nos permite comparar heurísticos entre si y nospermite saber cuál de ellos hallará más rápido la solución. Diremos que el heurístico h′

1 esmás informado que el heurístico h′

2 si se cumple la propiedad:

∀n 0 ≤ h′2(n) < h′

1(n) ≤ h(h)

Se ha de observar que esta propiedad incluye que los dos heurísticos sean admisibles.

Si un heurístico es mas informado que otro seguro que expandirá menos nodos durantela búsqueda.

Esto nos podría hacer pensar que siempre tenemos que escoger el heurístico más infor-mado. Hemos de pensar también que la función heurística tiene un tiempo de cálculo queafecta al tiempo de cada iteración. Evidentemente, cuanto más informado sea el heurístico,mayor será ese coste. Nos podemos imaginar por ejemplo, que si tenemos un heurístico quenecesita por ejemplo 10 iteraciones para llegar a la solución, pero tiene un coste de 100unidades de tiempo, tardará más en llegar a la solución que otro heurístico que necesite100 iteraciones pero que solo necesite una unidad de tiempo por iteración.

Esto nos hace pensar que tenemos que encontrar un equilibrio entre el coste del cálculode la función heurística y el número de expansiones que nos ahorramos al utilizarla. Esposible que una función heurística peor nos acabe dando mejor resultado. Todo esto esevidentemente dependiente del problema, incluso nos podemos encontrar con que una fun-ción no admisible nos permita hallar mas rápidamente la solución, a pesar de que no nosgarantice la optimalidad.

3.6. Mi memoria se acaba

El algoritmo A∗ tiene sus limitaciones impuestas en primer lugar por poder acabardegenerando en una búsqueda en anchura si la función heurística no es demasiado buena.Además, si la solución del problema está a mucha profundidad o el tamaño del espaciode búsqueda es muy grande, no hace falta mucho para llegar a necesidades de espacioprohibitivas. Esto nos lleva a plantearnos algoritmos alternativos con menores necesidadesde espacio.

3.6.1. El algoritmo IDA∗

La primera solución viene de la mano del algoritmo en profundidad iterativa que hemosvisto en el capítulo anterior. En este caso lo replanteamos para utilizar la función f ′ comoel valor que controla la profundidad a la que llegamos en cada iteración.

Page 31: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

26 CAPÍTULO 3. BÚSQUEDA HEURÍSTICA

Esto quiere decir que hacemos la búsqueda imponiendo un límite al coste del camino quequeremos hallar (en la primera iteración, la f ′ del nodo raíz), explorando en profundidadtodos los nodos con f ′ igual o inferior a ese límite y reiniciando la búsqueda con un costemayor si no encontramos la solución en la iteración actual. El algoritmo es el siguiente1:

Algoritmo IDA∗pro f=f ' ( Es tado_in i c i a l )mientras (no e s_ f i na l ?( Actual ) ) hacer

Est_abiertos . i n s e r t a r ( Es tado_in i c i a l )Actual= Est_abiertos . primero ( )mientras (no e s_ f i na l ?( Actual ) ) y (no Est_abiertos . vac ia ? ( ) ) hacer

Est_abiertos . borrar_primero ( )Est_cerrados . i n s e r t a r ( Actual )H i jo s= generar_sucesores ( Actual , p ro f )H i jo s= t ra ta r_repe t i do s ( Hijos , Est_cerrados , Est_abiertos )Est_abiertos . i n s e r t a r ( H i jo s )Actual= Est_abiertos . primero ( )

fmientras

pro f=pro f+1Est_abiertos . i n c i a l i z a ( )

fmientras

fAlgoritmo

La función generar_sucesores sólo retorna los nodos con un coste inferior o igual alde la iteración actual.

Este algoritmo, al necesitar sólo una cantidad de espacio lineal, permite hallar solucionesa más profundidad. El precio que hemos de pagar es el de las reexpansiones de nodosya visitados. Este precio extra dependenderá de la conectividad del grafo del espacio deestados, si existen muchos ciclos este puede ser relativamente alto.

3.6.2. Otras alternativas

Las reexpansiones del IDA∗ pueden llegar a ser un problema, e incrementar bastanteel tiempo de búsqueda. Estas reexpansiones se deben fundamentalmente a que estamosimponiendo unas restricciones de espacio bastantes severas. Si relajaramos esta restricciónmanteniéndola en límites razonables podríamos guardar información su�ciente para notener que realizar tantas reexpansiones.

Una primera alternativa es el algoritmo primero el mejor recursivo (recursive best�rst). El elemento clave es la implementación recursiva, que permite que el coste espacial

1Este algoritmo admite varias optimizaciones, como no aumentar el coste de uno en uno, sino averiguarcual es el coste más pequeño de los nodos no expandidos en la iteración actual y usarlo en la siguienteiteración.

Page 32: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

3.6. MI MEMORIA SE ACABA 27

se mantenga lineal (O(rp)) al no tener que guardar mas que los nodos que pertenecen alcamino actual y sus hermanos en cada nivel.

Este algoritmo intenta avanzar siempre por la rama más prometedora (según la funciónheurística f ′) hasta que alguno de los nodos alternativos del camino tiene un coste mejor.En este momento el camino del nodo actual es olvidado, pero modi�cando la estimaciónde los ascendientes con la del nodo mas profundo al que se ha llegado. Manteniendo estainformación sabremos si hemos de volver a regenerar esa rama olvidada si pasa a ser la demejor coste.

El algoritmo es el siguiente:

Algoritmo BFS−r e cu r s i v o ( nodo , c_al ternat ivo , r e f nuevo_coste , r e f s o l u c i on )s i es_so luc ion ?( nodo ) entonces

s o l u c i on . anadir ( nodo )s i no

s u c e s o r e s= genera_sucesores ( nodo )s i s u c e s o r e s . vac io ? ( ) entonces

nuevo_coste=+i n f i n i t os o l u c i on . vac io ( )s i no

f i n=f a l s omientras (no f i n )hacer

mejor= suc e s o r e s . mejor_nodo ( )s i mejor . c o s t e ( ) > c_a l t e rnat ivo entonces

f i n=c i e r t os o l u c i on . vac io ( )nuevo_coste=mejor . c o s t e ( )

s i no

segundo=suc e s o r e s . segundo_mejor_nodo ( )BFS−r e cu r s i v o (mejor , min ( c_al te rnat ivo , segundo . co s t e ( ) ) ,

nuevo_coste , s o l u c i on )s i s o l u c i on . vac io ? ( ) entonces

mejor . c o s t e ( nuevo_coste )s i no

s o l u c i on . anadir ( mejor )f i n=c i e r t o

f s i

f s i

fmientras

f s i

f s i

fAlgoritmo

Ejemplo 3.3 En la �gura se puede ver como evoluciona la búsqueda en un ejemplo sen-cillo, en cada nodo aparece el valor de la función f ′:

Page 33: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

28 CAPÍTULO 3. BÚSQUEDA HEURÍSTICA

18 8 12 18 8 12

11

18 8 12

11 19

17 20

2

11 1

2

31918 18

18 1217 18 1718 8 12

1

2 4

20 21 19

1

1119

1

2

1718 18

17

17

5

8

7

6

20

20

Podemos ver que cuando llega a la tercera iteración el nodo con mejor coste es el de12 y por lo tanto la recursividad vuelve hasta ese nodo borrando la rama explorada, peroactualizando cada padre con el mejor coste encontrado, en este caso 17. En la cuartaiteración se encuentra que ahora es el nodo con coste 17 el de mejor coste, por lo que elcamino vuelve a regenerarse.

Por lo general, el número de reexpansiones de este algorimo es menor que el de IDA∗,pero puede depender de las características del espacio de búsqueda como por ejemplo lalongitud de los ciclos que pueda haber. Este algoritmo también impone un coste lineal alespacio, por lo que también se generan bastantes reexpansiones.

Otra alternativa diferente viene de una modi�cación del A∗, es el algoritmo llamadoA∗ con memoria limitada (memory bound A∗). Este algoritmo utiliza la estrategiade exploración de A∗ pero siguiendo una estrategia de memorización de caminos parecidaal best �rst recursivo. Éste almacena todos los caminos que le caben en el tamaño dememoria que se impone y no solo el actual, de manera que se ahorra regenerar ciertoscaminos. Cuanta más memoria permitamos, menos regeneraciones de caminos haremos.

El algoritmo elimina los caminos peores en el momento en el que ya no caben más,guardando en los nodos la información su�ciente que le permita saber cuando se han deregenerar. El aporte extra de memoria permite reducir bastante las reexpansiones, con elconsiguiente ahorro de tiempo.

El algoritmo es capaz de hallar una solución si el camino completo cabe en la cantidad de

Page 34: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

3.6. MI MEMORIA SE ACABA 29

memoria que hemos impuesto. Esto quiere decir que si tenemos una idea aproximada de lalongitud de la solución podemos ajustar a priori la cantidad de memoria que permitiremosusar al algoritmo.

Page 35: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

30 CAPÍTULO 3. BÚSQUEDA HEURÍSTICA

Page 36: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

Capítulo 4

Búsqueda local

4.1. El tamaño importa, a veces

Los algoritmos que hemos visto en el capitulo anterior nos sirven siempre que podamosplantear el problema como la búsqueda de un camino en un espacio de estados. Pero nospodemos encontrar con problemas en los que:

Este planteamiento es demasiado arti�cial, ya que no tenemos realmente operadoresde cambio de estado, o no hay realmente una noción de coste asociada a los operadoresdel problema

La posibilidad de hallar la solución óptima está fuera de toda posibilidad, dado queel tamaño del espacio de búsqueda es demasiado grande y nos conformamos con unasolución que podamos considerar buena.

En este tipo de problemas puede ser relativamente fácil hallar una solución inicial,aunque no sea demasiado buena. Esto hace que nos podamos plantear el problema comouna búsqueda dentro del espacio de soluciones, en lugar de en el de caminos.

En este caso lo que suponemos es que podemos navegar dentro del espacio de posiblessoluciones realizando operaciones sobre ellas que nos pueden ayudar a mejorarlas. El costede estas operaciones no será relevante ya que lo que nos importa es la calidad de la solución1,en este caso lo que nos importará es esa la calidad. Deberemos disponer de una funciónque según algún criterio (dependiente del dominio) nos permita ordenarlas.

El planteamiento de los problemas es parecido al que consideramos al hablar del espaciode estados, tenemos los siguientes elementos:

Un estado inicial, que en este caso será una solución inicial y que nos planteará elproblema adicional de como hallarla con un coste bajo.

1De hecho muchas veces estas operaciones no se re�eren a operaciones reales en el problema, sino aformas de manipular la solución.

31

Page 37: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

32 CAPÍTULO 4. BÚSQUEDA LOCAL

Unos operadores de cambio de la solución, que en este caso manipularán solucionescompletas y que no tendrán un coste asociado.

Una función de calidad, que nos medirá lo buena que es una solución y nos permitiráguiar la búsqueda, pero teniendo en cuenta que este valor no nos indica cuanto nosfalta para encontrar la solución que buscamos.

El saber cuando hemos acabado la búsqueda dependerá totalmente del algoritmo, quetendrá que decidir cuando ya no es posible encontrar una solución mejor. Por lo tanto notendremos un estado �nal de�nido.

Para buscar una analogía con un tema conocido, se puede asimilar la búsqueda local conla búsqueda de óptimos en funciones. En este caso la función a optimizar será la funciónde calidad de la solución, la función se de�nirá en el espacio de soluciones generado por laconectividad que inducen los operadores.

Desafortunadamente, las funciones que aparecerán no tendrán una expresión analíticaglobal, ni tendrán las propiedades que nos permitirían aplicar los algoritmos conocidos debúsqueda de óptimos en funciones que conocéis.

El planteamiento será pues bastante diferente. Ya que no tenemos una expresión analí-tica global, deberemos explorar la función de calidad utilizando solamente lo que podamosobtener de los vecinos de una solución, ésta deberá permitir decidir por donde seguir bus-cando el óptimo. El nombre de búsqueda local viene precisamente de que sólo utilizamosinformación local durante el proceso de hallar la mejor solución.

4.2. Tu sí, vosotros no

Enfrentados a problemas con tamaños de espacio de búsqueda inabordables de maneraexhaustiva, nos hemos de plantear estrategias diferentes a las utilizadas hasta ahora.

En primer lugar, tendremos pocas posibilidades de guardar información para recuperarcaminos alternativos. Esto nos obligará a imponer unas restricciones de espacio limitadas,lo que nos llevará a tener que decidir que nodos debemos explorar y cuales descartar sinvolver a considerarlos.

Esto nos lleva a la familia de algoritmos conocida como de rami�cación y poda(branch and bound). Esta familia de algoritmos limita el número de elementos queguardamos como pendientes de explotar olvidando los que no parecen prometedores. Estosalgoritmos permiten mantener una memoria limitada, ya que desprecian parte del espaciode búsqueda, pero se arriesgan a no hallar la mejor solución, ya que esta puede estar en elespacio de búsqueda que no se explora.

De entre los algoritmos de rami�cación y poda, los más utilizados son los denominados deascenso de colinas (Hill-climbing). Existen diferentes variantes que tienen sus ventajase inconvenientes.

Page 38: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

4.2. TU SÍ, VOSOTROS NO 33

Por ejemplo, el denominado ascenso de colinas simple, que consiste en elegir siempreel primer operador que suponga una mejora respecto al nodo actual, de manera que noexploramos todas las posibilidades accesibles, ahorrandonos el explorar cierto número dedescendientes. La ventaja es que es más rápido que explorar todas las posibilidades, ladesventaja es que hay más probabilidad de no alcanzar las soluciones mejores.

El más utilizado es el ascenso de colinas por máxima pendiente (steepest ascent hillclimbing). Esta variante expande todos los posibles descendientes de un nodo y elige elque suponga la máxima mejora respecto al nodo actual. Con esta estrategia suponemos quela mejor solución la encontraremos a través del sucesor que mayor diferencia tenga respectoa la solución actual, siguiendo una política avariciosa. Como veremos más adelante estaestrategia puede ser arriesgada.

El algoritmo que implementa este último es el siguiente:

Algoritmo H i l l ClimbingActual= Estado_in i c i a lf i n = f a l s omientras (no f i n ) hacer

Hi jo s= generar_sucesores ( Actual )H i jo s= ordenar_y_eliminar_peores ( Hi jos , Actual )s i (no vac io ?( h i j o s ) ) entonces Actual= Escoger_mejor ( H i jo s )s i no f i n=c i e r t o

fmientras

fAlgoritmo

En este algoritmo la utilización de memoria es nula, ya que sólo tenemos en cuenta elnodo mejor2. Se pueden hacer versiones que guarden caminos alternativos que permitanuna vuelta atrás en el caso de que consideremos que la solución a la que hemos llegado noes su�cientemente buena, pero hemos de imponer ciertas restricciones de memoria si noqueremos tener un coste espacial demasiado grande. Comentaremos estos algoritmos másadelante.

La estrategia de este algoritmo hace que los problemas que tiene, vengan principalmentederivados por las características de las funciones heurísticas que se utilizan.

Por un lado, hemos de considerar que el algoritmo parará la exploración en el momentoen el que no se encuentra ningún nodo accesible mejor que el actual. Dado que no mante-nemos memoria del camino recorrido nos será imposible reconsiderar nuestras decisiones,de modo que si nos hemos equivocado, la solución a la que llegaremos puede que no sea laóptima.

Esta circunstancia es probable, ya que seguramente la función heurística que utilicemostendrá óptimos locales y, dependiendo de por donde empecemos a buscar, acabaremosencontrando uno u otro, como se puede ver en la siguiente �gura:

2Hay que recordar que en este tipo de búsqueda el camino no nos importa, por lo que el gasto en espacioes constante.

Page 39: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

34 CAPÍTULO 4. BÚSQUEDA LOCAL

A B

max

max

Si iniciamos la búsqueda desde el punto A o el B el máximo que alcanzaremos serádiferente.

Esta circunstancia se puede mejorar mediante la ejecución del algoritmo cierto núme-ro de veces desde distintos puntos escogidos aleatoriamente y quedándonos con la mejorexploración. Mucha veces esta estrategia es más efectiva que métodos más complejos queveremos a continuación y resulta bastante barata. La única complicación está en podergenerar los distintos puntos iniciales de búsqueda, ya que en ocasiones el problema nopermite hallar soluciones iniciales con facilidad.

Otro problema con el que se encuentran estos algoritmos son zonas del espacio de bús-queda en las que la función heurística no es informativa. Un ejemplo son las denominadasmesetas y las funciones en escalón, como las de la �gura siguiente, en las que los valoresde los nodos vecinos al actual tienen valores iguales, y por lo tanto una elección local nonos permite decidir el camino a seguir.

Evitar estos problemas requiere extender la búsqueda a más allá de los vecinos inmedia-tos para obtener la información su�ciente para encaminar la búsqueda. Desgraciadamenteesto supone un coste adicional en cada iteración.

Una alternativa es permitir que el algoritmo guarde parte de los nodos visitados paraproseguir la búsqueda por ellos en el caso de que el algoritmo se que de atascado en unóptimo local. El algoritmo más utilizado es el denominado busqueda en haces (beamsearch). En este algoritmo se van guardando un número N de las mejores soluciones,expandiendo siempre la mejor de ellas. De esta manera no se sigue un solo camino sino N .

Las variantes del algoritmo están en cómo se escogen esas N soluciones que se man-tienen. Si siempre se substituyen las peores soluciones de las N por los mejores sucesoresdel nodo actual caemos en el peligro de que todas acaben estando en el mismo camino,reduciendo la capacidad de volver hacia atrás, así que el poder mantener la variedad de las

Page 40: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

4.3. DEMASIADO CALOR, DEMASIADO FRÍO 35

soluciones guardadas es importante.

Está claro que cuantas mas soluciones guardemos más posibilidad tendremos de en-contrar una buena solución, pero tendremos un coste adicional tanto en memoria como entiempo, ya que tendremos que calcular con que sucesores nos quedamos y que solucionesguardadas substituimos. El algoritmo sería el siguiente

Algoritmo Beam SearchSo luc i one s_actua l e s= Estado_in i c i a lf i n = f a l s omientras (no f i n ) hacer

Hi jo s= generar_sucesores ( Actual )H i jo s= escoger_mejores ( Hi jos , s o l u c i one s_ac tua l e s )s i algun_cambio ?( h i j o s ) entonces

Actual=Escoger_mejor ( So luc i one s_actua l e s )s i no f i n=c i e r t o

fmientras

fAlgoritmo

El algoritmo acaba cuando ninguno de los sucesores mejora a las soluciones guardadas,esto quiere decir que todas las soluciones son un óptimo local.

4.3. Demasiado calor, demasiado frío

Se han planteado algoritmos alternativos de búsqueda local que se han mostrado efec-tivos en algunos dominios en los que los algoritmos de búsqueda por ascenso se quedanatascados enseguida en óptimos no demasiado buenos.

El primero que veremos es el denominado templado simulado (simulated annea-ling). Este algoritmo está inspirado en un fenómeno físico que se observa en el templadode metales y en la cristalización de disoluciones.

Todo conjunto de átomos o moléculas tiene un estado de energía que depende de cier-ta función de la temperatura del sistema. A medida que lo vamos enfriando, el sistemava perdiendo energía hasta que se estabiliza. El fenómeno físico que se observa es quedependiendo de como se realiza el enfriamiento, el estado de energía �nal es muy diferente.

Si una barra de metal se enfría demasiado rápido la estructura cristalina a la que sellega al �nal es muy frágil y ésta se rompe con facilidad. Si el enfriamiento se realiza máslentamente el resultado �nal es totalmente diferente obteniendo una barra de gran dureza.

Durante este enfriamiento controlado, se observa que la energía del conjunto de átomosno disminuye de manera constante, sino que a veces la energía total puede ser mayor queen un momento inmediatamente anterior. Esta circunstancia hace que el estado de energía�nal que se alcanza sea mejor que cuando el enfriamiento se hace rápidamente. A partir

Page 41: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

36 CAPÍTULO 4. BÚSQUEDA LOCAL

de este fenómeno físico, podemos derivar un algoritmo que permitirá en ciertos problemahallar soluciones mejores que los algoritmos de búsqueda por ascenso.

En este algoritmo el nodo siguiente a explorar no será siempre el mejor descendiente,sino que lo elegiremos aleatoriamente en función de los valores de unos parámetros entretodos los descendientes (los buenos y los malos). Una ventaja de este algoritmo es que notenemos por que generar todos los sucesores de un nodo, basta elegir un sucesor al azar ydecidir si continuamos por él o no. El algoritmo de templado simulado se puede ver comouna versión estocástica del algoritmo de búsqueda por ascenso.

El algoritmo de templado simulado intenta transportar la analogía física al problemaque queremos solucionar. En primer lugar denominaremos función de energía a la funciónheurística que nos mide la calidad de una solución. Tendremos un parámetro de controlque denominaremos temperatura, que nos permitirá controlar el funcionamiento del al-goritmo.

Tendremos una función que dependerá de la temperatura y de la diferencia de cali-dad entre el nodo actual y un sucesor. Ésta gobernará la elección de los sucesores, sucomportamiento será el siguiente:

Cuanta mayor sea la temperatura mas probabilidad habrá de que un estado peor seaelegido

La elección de un estado peor estará en función de su diferencia de calidad con elestado actual, cuanta mas diferencia, menos probabilidad de elegirlo.

El último elemento es la estrategia de enfriamiento. El algoritmo realizará un nú-mero total de iteraciones �jo y cada cierto número de ellas el valor de la temperaturadisminuirá en cierta cantidad, partiendo desde una temperatura inicial y llegando acero en la última fase. De manera que, la elección de estos dos parámetros (número totalde iteraciones y número de iteraciones entre cada bajada de temperatura) determinarán elcomportamiento del algoritmo. Habrá que decidir la temperatura inicial y en que cantidadse va disminuyendo.

Como en la analogía física, si el número de pasos es muy pequeño la temperatura bajarámuy rápidamente y el camino explorado será relativamente aleatorio. Si el número de pasoses más grande la bajada de temperatura será más suave y la búsqueda será mejor.

El algoritmo que implementa esta estrategia es el siguiente:

Algoritmo Simulated AnnealingPartimos de una temperatura i n i c i a lmientras l a temperatura no sea cero hacer

/∗ Paseo a l e a t o r i o por e l e spac i o de s o l u c i o n e s ∗/para un numero p r e f i j a d o de i t e r a c i o n e s hacer

Enuevo=Generamos_sucesor ( Eactual )s i F( f ' ( Eactual)− f ' ( Enuevo ) ,T) >0 entonces Eactual=Enuevo f s i

Page 42: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

4.4. CADA OVEJA CON SU PAREJA 37

fpara

Disminuimos l a temperaturafmientras

fAlgoritmo

Este algoritmo se adapta muy bien a problemas de optimización combinatoria (con�gu-ración óptima de elementos) y continua (punto óptimo en un espacio N-dimensional). Estáindicado para problemas grandes en los que el óptimo está rodeado de muchos óptimoslocales, ya que a este algoritmo le será más fácil escapar de ellos.

Se puede utilizar también para problemas en los que encontrar una heurística discri-minante es difícil (una elección aleatoria es tan buena como otra cualquiera), ya que elalgoritmo de ascenso de colinas no tendrá mucha información con la que trabajar y sequedará atascado enseguida. En cambio el templado simulado podrá explorar más espaciode soluciones y tendrá mayor probabilidad de encontrar una solución buena.

El mayor problema de este algoritmo será determinar los valores de los parámetros, yrequerirá una importante labor de experimentación que dependerá de cada problema.

4.4. Cada oveja con su pareja

Otra analogía que ha dado lugar un conjunto de algoritmos de búsqueda local bastanteefectivos es la selección natural como mecanismo de adaptación de los seres vivos. Estaanalogía se �ja en que los seres vivos se adaptan al entorno gracias a las característicasheredadas de sus progenitores, en que las posibilidades de supervivencia y reproducciónson proporcionales a la bondad de esas características y en que la combinación de buenosindividuos puede dar lugar a individuos mejor adaptados.

Podemos trasladar estos elementos a la búsqueda local identi�cando las soluciones conindividuos, donde una función de calidad indicará la bondad de la solución, es decir, suadaptación a las características del problema. Dispondremos de unos operadores de bús-queda que combinarán buenas soluciones con el objetivo de obtener soluciones mejorescomo resultado.

El ejemplo que veremos de algoritmos que utilizan esta analogía es el de los algoritmosgenéticos3. Se trata de una familia bastante amplia de algoritmos, nosotros sólo veremosel esquema básico.

Estos algoritmos son bastante más complejos que los algoritmos que hemos visto yrequieren más elementos y parámetros, por lo que su utilización requiere cierta experienciay mucha experimentación. Los requisitos básicos para usarlos son:

Dar una codi�cación a las características de las soluciones. Las soluciones se repre-sentan de una manera especial para que después se puedan combinar. Por lo general

3Existen también los denominados algoritmos evolutivos, son menos conocidos, pero suelen ser bastanteefectivos en ciertas aplicaciones.

Page 43: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

38 CAPÍTULO 4. BÚSQUEDA LOCAL

se utilizan cadenas binarias que codi�can los elementos de la solución, por analogíaa esta codi�cación se la denomina gen4.

Tener una función que mida la calidad de la solución. Se tratará de la función heurís-tica que se utiliza en todos los algoritmos que hemos visto. En el área de algoritmosgenéticos a esta función se la denomina función de adaptación (�tness).

Disponer de operadores que combinen las soluciones para obtener nuevas solucio-nes. Los operadores que utilizan los algoritmos genéticos son bastante �jos y estáninspirados en las formas de reproducción celular.

Decidir el número de individuos inicial. Un algoritmo genético no trata un solo indi-viduo, sino una población, se ha de decidir cuan numerosa ha de ser.

Decidir una estrategia para hacer la combinación de individuos. Siguiendo la analogíade la selección natural, sólo se reproducen los individuos más aptos, hemos de decidirun criterio para emparejar a los individuos de la población en función de su calidad.

Vamos a detallar un poco más cada uno de estos elementos.

4.4.1. Codi�cación

Como hemos mencionado, la forma más habitual de codi�car los individuos para utilizarun algoritmo genético es transformarlos a una cadena de bits. Cada bit o grupo de bits codi-�cará una característica de la solución. Evidentemente, no existe un criterio preestablecidosobre como realizarlo.

La ventaja de esta codi�cación es que los operadores de modi�cación de la solución sonmuy sencillos de implementar. En la siguiente �gura se puede ver un ejemplo de codi�caciónpara el problema de las N reinas siendo N igual a 4:

3

2

1

0[00 11 10 01]

[0,3,2,1]

En la codi�cación binaria se ha asignado una pareja de bits a cada una de las reinas,representando la �la en la que están colocadas y se han concatenado. Alternativamente sepodría utilizar una representación no binaria utilizando simplemente el número de �la yhaciendo una lista con los valores.

4Esta no tiene por que ser siempre la representación más adecuada y de hecho a veces una representaciónbinaria hace que el problema no se pueda solucionar e�cientemente.

Page 44: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

4.4. CADA OVEJA CON SU PAREJA 39

Como se ha comentado, no siempre la codi�cación binaria es la más adecuada, ya quelas características del problema pueden hacer que el cambio de representación haga máscomplicado el problema.

Una ventaja de la codi�cación binaria es que nos da una aproximación del tamañodel espacio de búsqueda, ya que el número de soluciones posibles corresponderá al mayornúmero binario que podamos representar con la codi�cación.

4.4.2. Operadores

Los operadores que utilizan estos algoritmos para la exploración del espacio de búsquedase pueden agrupar en dos tipos básicos. Los operadores de cruce (crossover) y los demutación (mutation).

Los operadores de cruce se aplican a una pareja de individuos, su efecto consiste enintercambiar parte de la información de la codi�cación entre los individuos. Existe unagran variedad de formas en las que se puede realizar este intercambio. La más sencilla es ladenominada cruce por un punto (one point crossover). Se aplica sólo a codi�cacionesbinarias, este operador consiste en elegir un punto al azar en la codi�cación e intercambiarlos bits de los dos individuos a partir de ese punto. En la siguiente �gura hay un ejemplode cruce por un punto en el problema de las N reinas:

[000 101 010 001 100 100] [010 001 100 000 011 101] [000 101 100 000 011 101]

Otra variante muy utilizada es el cruce por dos puntos (two points cross over),en el que el intercambio se realiza eligiendo dos puntos en la codi�cación e intercambiandolos bits entre esos dos puntos.

Aparte de estos dos operadores existen muchos otros que tienen efectos especí�cos y quefuncionan mejor en ciertas circunstancias. Si la codi�cación no es binaria los operadores sehan de diseñar de manera especí�ca para la representación escogida.

Los operadores de mutación se aplican a un sólo individuo y consisten en cambiar partede la codi�cación de manera aleatoria. El más sencillo es elegir un bit al azar y cambiar susigno.

Estos operadores tienen una probabilidad de aplicación asociada que será un parámetrodel algoritmo. Tendremos una probabilidad de cruce que indicará cuando una pareja elegidade individuos intercambia su información y una probabilidad de mutación. Por lo general la

Page 45: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

40 CAPÍTULO 4. BÚSQUEDA LOCAL

probabilidad de mutación es mucho más pequeña que la probabilidad de cruce. La elecciónde estos valores es crítica para el correcto funcionamiento del algoritmo y muchas vecesdepende del problema.

4.4.3. Combinación de individuos

Estos algoritmos no tratan las soluciones de manera individual, sino en grupo. Denomi-naremos población al conjunto de soluciones que tenemos en un momento especí�co. Elefecto de mantener un conjunto de soluciones a la vez es hacer una exploración en paralelodel espacio de búsqueda desde diferentes puntos.

Un parámetro más que deberemos decidir es el tamaño de la población de soluciones.Está claro que si el número de individuos es demasiado grande el coste por iteración puedeser prohibitivo, pero si el tamaño es demasiado pequeño es posible que no lleguemos a unasolución demasiado buena.

Cada iteración de un algoritmo genérico es denominada una generación, a cada gene-ración los individuos se emparejan y dan lugar a la siguiente generación de individuos. Esclave la manera en la que decidimos como se emparejan los individuos.

La forma habitual de pasar de una generación a otra, es crear lo que se denomina unageneración intermedia que estará compuesta por las parejas que se van a combinar. Elnúmero de individuos de esta población es igual al del tamaño original de la población. Laelección de los individuos que forman parte de esta generación intermedia se puede hacerde muchas maneras, por ejemplo:

Escoger un individuo de manera proporcional a su valor de evaluación de la funciónde �tness, de manera que los individuos mejores tendrán más probabilidad de serelegidos. Esto puede tener el peligro de que unos pocos individuos pueden ser elegidosmuchas veces.

Se establecen N torneos entre parejas de individuos escogidas al azar, el ganador decada emparejamiento es el individuo con mejor valor en la funcion de �tness. Estaopción equilibra mejor la aparición de los mejores individuos.

Se de�ne un ranking lineal entre individuos según su función de calidad, estableciendoun maximo de posibles apariciones de un individuo, de esta manera que la probabi-lidad de aparición de los individuos no esté sesgada por los individuos mejores.

Con estos mecanismos de elección habrá individuos que aparezcan más de una vez eindividuos que no aparezcan5. Cada mecanismo de selección de individuos tiene sus ventajase inconvenientes. El primero es el más simple, pero corre el peligro de degenerar en pocas

5Esto re�eja lo que sucede en la selección natural, los más aptos tienen una mayor probabilidad detener descendencia y los menos aptos pueden no llegar a reproducirse.

Page 46: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

4.4. CADA OVEJA CON SU PAREJA 41

generaciones a una población homogénea, acabando en un óptimo local. Los otros dos sonalgo más complejos, pero aseguran cierta diversidad de individuos en la población. Se havisto experimentalmente que el asegurar la variedad en la población permite encontrarmejores soluciones6.

4.4.4. El algoritmo genético canónico

Existe una gran variedad de algoritmos genéticos, pero todos parten de un funciona-miento básico que llamaremos el algoritmo genético canónico, los pasos que realiza estealgoritmo básico son estos:

1. Se parte de una población de N individuos generada aleatoriamente

2. Se escogen N individuos de la generación actual para la generación intermedia (segúnel criterio escogido)

3. Se emparejan los individuos y para cada pareja

a) Con una probabilidad Pcruce se aplica el operador de cruce a cada pareja de in-dividuos y se obtienen dos nuevos individuos que pasarán a la nueva generación,con una probabilidad 1 − Pcruce se mantienen la pareja original en la siguientegeneración

b) Con una probabilidad Pmutacion se mutan los individuos cruzados

4. Se substituye la población actual con los nuevos individuos, que forman la nuevageneración

5. Se itera desde el segundo paso hasta que la población converge (la función de �tnessde la población no mejora) o pasa un número especí�co de generaciones

La probabilidad de cruce in�uirá en la variedad de la nueva generación, cuanto más bajasea, más parecida será a la generación anterior y harán falta más iteraciones para converger.Si ésta es muy alta cada generación será muy diferente, por lo que puede degenerar en unabúsqueda aleatoria.

La mutación es un mecanismo para forzar la variedad en la población, pero una proba-bilidad de mutación demasiado alta puede di�cultar la convergencia.

6También es algo que se observa en la naturaleza, las poblaciones aisladas o las especies muy especiali-zadas tienen un pobre acervo genético y no pueden adaptarse a cambios en su entorno.

Page 47: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

42 CAPÍTULO 4. BÚSQUEDA LOCAL

4.4.5. Cuando usarlos

Los algoritmos genéticos han demostrado su e�cacia en múltiples aplicaciones, peroes difícil decir si serán efectivos o no en una aplicación concreta. Por lo general suelenfuncionar mejor que los algoritmos de búsqueda por ascenso cuando no se tiene una buenafunción heurística para guiar el proceso. Pero si se dispone de una buena heurística, estosalgoritmos no nos obtendrán mejores resultados y el coste de con�gurarlos adecuadamenteno harán rentable su uso.

Sus mayor inconveniente es la gran cantidad de elementos que hemos de ajustar parapoder aplicarlos, la codi�cación del problema, el tamaño de la población, la elección delos operadores, las probabilidades de cruce y mutación, la forma de construir la siguientegeneración, ... Siempre nos encontraremos con la duda de si el algoritmo no funcionaporque el problema no se adapta al funcionamiento de estos algoritmos, o es que no hemosencontrado los parámetros adecuados para hacer que funcionen bien.

Page 48: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

Capítulo 5

Búsqueda con adversario

5.1. Tú contra mi o yo contra ti

Hasta ahora habíamos supuesto problemas en los que un solo agente intenta obtenerun objetivo, en nuestro caso la resolución de un problema. Pero existen casos en los quediferentes agentes compiten por un objetivo que solamente uno de ellos puede alcanzar.

Este tipo de problemas los englobaremos dentro de la categoría de juegos1. No veremosalgoritmos para cualquier tipo de juego, sino que nos restringiremos a los que cumplen unconjunto de propiedades:

Son bipersonales, es decir, sólo hay dos agentes involucrados, y estos juegan alterna-tivamente.

Todos los participantes tienen conocimiento perfecto, no hay ocultación de informa-ción por parte de ninguno de ellos.

El juego es determinista, no interviene el azar en ninguno de sus elementos.

Los elementos que intervienen en este tipo de problemas se pueden representar demanera parecida a la búsqueda en espacio de estados, tendremos:

Un estado, que indica las características del juego en un instante especí�co

Un estado inicial, que determinará desde donde se empieza a jugar y quién inicia eljuego

Un estado �nal, o unas características que debe cumplir, que determinarán quién esel ganador

1La competición no solamente aparece en el caso de los juegos, pero los algoritmos que veremos tambiénson aplicables.

43

Page 49: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

44 CAPÍTULO 5. BÚSQUEDA CON ADVERSARIO

Unos operadores de transformación de estado que determinarán las jugadas que puedehacer un agente desde el estado actual. Supondremos que los dos jugadores disponende los mismos operadores

Identi�caremos a cada jugador como el jugador MAX y el jugador MIN. MAX seráel jugador que inicia el juego, nos marcaremos como objetivo el encontrar el conjuntode movimientos que ha de hacer el jugador MAX para que llegue al objetivo (ganar)independientemente de lo que haga el jugador MIN2.

Se puede observar que este escenario es bastante diferente del que se plantean losalgoritmos de los capitulos anteriores. Nos veremos obligados a revisar el concepto desolución y de óptimo. De hecho estamos pasando de un escenario en el que poseemos todoel conocimiento necesario para resolver un problema desde el principio hasta el �n sintener que observar la reacción del entorno, a un escenario donde nuestras decisiones se venin�uidas por el entorno. En los algoritmos que veremos supondremos que podemos preverhasta cierto punto como reaccionará ese entorno, pero evidentemente no siempre tendrápor que ser ese el caso.

5.2. Una aproximación trivial

Para poder obtener el camino que permite a MAX llegar a un estado ganador, notenemos más que explorar todas las posibles jugadas que puede hacer cada jugador, hastaencontrar un camino que lleve a un estado �nal. Para poder obtenerlo podemos utilizar unalgoritmo de búsqueda en profundidad que explore exhaustivamente todas las posibilidades.

El algoritmo explorará hasta llegar a una solución evaluándola a +1 si es un estado enel que gana MAX o a -1 si es un estado en el que gana MIN, este valor se propagará hastael nivel superior. A medida que se acaben de explorar los descendientes de un nivel el valorresultante de su exploración se seguirá propagando a los niveles superiores.

Cada nivel elegirá el valor que propaga a su ascendiente dependiendo de si correspondea un nivel del jugador MAX o del jugador MIN. En los niveles de MAX se elegirá elvalor mayor de todos los descendientes, en los niveles de MIN se elegirá el mínimo. En elmomento en el que se propague un +1 a la raíz signi�cará que hemos encontrado el caminoque permite ganar a MAX independientemente de las jugadas de MIN. En este momentopodemos parar la exploración ya que hemos cubierto su objetivo, encontrar una secuenciade pasos ganadora.

En la siguiente �gura podemos ver el espacio de búsqueda que generaría un juegohipotético (los cuadrados corresponden a niveles de MAX y los círculos a niveles de MIN),se han marcado con +1 las jugadas en las que gana el jugador MAX y con −1 las jugadasen la que gana el jugador MIN:

2No es que nos caiga mal el jugador MIN, lo que pasa es que los algoritmos serán los mismos para losdos, ya que desde la perspectiva de MIN, él es MAX y su oponente es MIN.

Page 50: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

5.2. UNA APROXIMACIÓN TRIVIAL 45

+1

−1

+1

+1

+1

−1 −1

Si hacemos el recorrido en profundidad propagando los valores de las jugadas terminalestendríamos el siguiente resultado:

+1

−1

+1

+1

+1

−1 −1

+1

+1

−1

−1

−1

−1

−1 +1

+1

+1−1

−1

−1

−1

−1

+1

Podemos ver marcado el camino que permite ganar a MAX.

Desgraciadamente este algoritmo sólo lo podemos aplicar a juegos triviales, ya que eltiempo que necesitariamos para hacer la exploración completa sería exponencial respectoal número de posibles jugadas en cada nivel (r) y la profundidad de la solución (p) (O(rp)).En cualquier juego real este valor es una cifra astronómica.

Page 51: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

46 CAPÍTULO 5. BÚSQUEDA CON ADVERSARIO

5.3. Seamos un poco más inteligentes

Es evidente que no podemos explorar todo el espacio de búsqueda para obtener el mejorconjunto de jugadas, así que debemos de echar mano del conocimiento que tenemos deljuego para reducir la exploración. Tendremos que introducir una función heurística queen este caso no medirá la bondad de un estado respecto a su distancia hasta una jugadaganadora.

La �losofía de esta función heurística es diferente de las que hemos visto hasta ahora, yaque no existe ninguna noción de coste, ni tampoco de optimalidad, pues todas las jugadasganadoras son igual de buenas. Esto hará que construir esta función sea todavía mas difícilque en las ocasiones anteriores, habrá que determinar cuál es la ventaja de cada jugador encada estado3 y esto puede ser bastante difícil de determinar. También hemos de tener encuenta que el coste de calcular la función heurística in�uirá en el coste de la exploración.

En este caso, esta función nos podrá dar valores positivos y negativos. Consideraremosque si el valor es positivo la jugada es ventajosa para el jugador MAX, y si es negativo laventaja es para MIN. Por convenio, las jugadas ganadoras de MAX tienen un valor de +∞y las ganadoras de MIN de −∞.

Además de utilizar una función heurística para guiar la búsqueda, usaremos una es-trategia distinta para explorar el conjunto de jugadas. Ya que es imposible hacer unaexploración exhaustiva, haremos una búsqueda en profundidad limitada, esto limitará loque podremos ver del espacio de búsqueda.

Decidiremos un nivel de profundidad máximo para la búsqueda, evaluaremos los estadosque están en ese nivel y averiguaremos cuál es la mejor jugada a la que podemos accederdesde el estado actual. Hay que tener claro que con este procedimiento sólo decidimos unajugada, y que repetimos la búsqueda en cada movimiento que tenemos que decidir. A pesarde que repitamos la búsqueda a cada paso, el número de nodos explorados es mucho menorque si exploráramos todo el árbol de búsqueda completo.

La calidad del juego vendrá determinada por la profundidad a la que llegamos en cadaexploración. Cuanto más profunda sea la exploración mejor jugaremos, ya que veremosmás porción del espacio de búsqueda. Evidentemente, cuanto más exploremos, más costetendrá la búsqueda.

El algoritmo que realiza esta exploración recibe el nombre de minimax4 y es un reco-rrido en profundidad recursivo. El que sea un recorrido en profundidad hace que el costeespacial sea lineal, pero evidentemente el coste temporal será exponencial (dependerá dela profundidad máxima de exploración). El algoritmo es el siguiente:

funcion MiniMax ( g ) retorna movimientomovr : movimiento ;

3Nótese que la función heurística no sólo evalúa los estados �nales.4El nombre minimax proviene del teorema del Minimax del área de teoría de juegos enunciado por John

von Neumann en 1928.

Page 52: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

5.3. SEAMOS UN POCO MÁS INTELIGENTES 47

max ,maxc : ente ro

max=− i n f i n i t opara cada mov en movs_posibles ( g ) hacer

cmax=valorMin ( a p l i c a r (mov , g ) )s i cmax>max entonces

max=cmaxmovr=mov

f s i

fpara

retorna (movr )ffuncion

funcion valorMax ( g ) retorna ente rovmax : ente ro

s i estado_terminal ( g ) entonces

retorna ( eva luac ion ( g ) )s i no

vmax=− i n f i n i t opara cada mov en movs_posibles ( g ) hacer

vmax=max(vmax , valorMin ( a p l i c a r (mov , g ) )fpara

retorna (vmax)f s i

ffuncion

funcion valorMin ( g ) retorna ente rovmin : ente ros i estado_terminal ( g ) entonces

retorna ( eva luac ion ( g ) )s i no

vmin=+i n f i n i t opara cada mov en movs_posibles ( g ) hacer

vmin=min (vmin , valorMax ( a p l i c a r (mov , g ) )fpara

retorna ( vmin )f s i

ffuncion

El algoritmo tiene una función principal (MiniMax) que es la que retorna la mejorjugada que se puede realizar, y dos funciones recursivas mutuas (valorMax y valorMin)que determinan el valor de las jugadas dependiendo de si el nivel es de MAX o de MIN.La función estado_terminal(g) determina si el estado actual es una solución o perteneceal nivel máximo de exploración. La función evaluacion(g) calcula el valor de la función

Page 53: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

48 CAPÍTULO 5. BÚSQUEDA CON ADVERSARIO

heurística para el estado actual.

5.4. Seamos aún más inteligentes

Un punto clave que hemos de tener en cuenta es que cuanto más profunda sea laexploración, mejor podremos tomar la decisión sobre qué jugada debemos escoger. Parajuegos en los que el factor de rami�cación sea muy grande, esta profundidad no podrá sermuy grande, ya que el tiempo que necesitaremos para cada decisión será prohibitivo.

Para reducir este tiempo de exploración se han estudiado las propiedades que tienenestos árboles de búsqueda y se han desarrollado heurísticas que permiten no explorarlos ensu totalidad y obtener el mismo resultado que obtendríamos con la exploración completa.

La heurística que veremos se denomina poda alfa-beta (αβ pruning). Esta heurísticaaprovecha que el algoritmo del minimax hace una exploración en profundidad para guardarinformación sobre cuál es el valor de las mejores jugadas encontradas hasta cierto puntode la búsqueda para el jugador MAX y para el jugador MIN .

Lo que hace esta heurística es evitar seguir explorando nodos que sabemos que no vana variar la decisión que se va a tomar en niveles superiores, eliminándolos de la búsqueday ahorrando tiempo.

Podemos ver por ejemplo el siguiente árbol de exploración:

12

8

8

6 7

8 16 6 9 13 10 9 7

Podemos ver que el valor que propagaría el algoritmo del minimax a nodo raíz sería 8.Pero si nos �jamos en el nodo marcado, el segundo descendiente de la raíz ya sabe que elmejor nodo del primer descendiente tiene valor 8, y su primer descendiente vale 6. Dadoque la raíz es un nodo MAX, este preferirá el valor 8 al 6. Dado que el segundo descendientees un nodo MIN, éste siempre escogerá un valor que como máximo será 6. Esto nos hacepensar que, una vez hemos visto que el valor del nodo marcado es 6, el valor que salga deesa exploración no se elegirá (ya que tenemos un valor mejor de la exploración anterior).Esto lleva a la conclusión de que seguir explorando los nodos del segundo descendiente dela raíz no merece la pena, ya que el valor resultante ya no es elegible.

Podemos observar también que esta circunstancia se repite en el tercer descendiente alexplorar su último nodo, pero al no quedar más descendientes esta heurística no nos ahorranada. Esto querrá decir que la efectividad de esta heurística dependerá del orden de los

Page 54: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

5.4. SEAMOS AÚN MÁS INTELIGENTES 49

nodos, pero desgraciadamente es algo que no se puede establecer a priori.

Esta heurística modi�ca el algoritmo del minimax introduciendo dos parámetros en lasllamadas de las funciones, α y β, y representarán el límite del valor que pueden tomarlas jugadas que exploramos. Una vez superado ese límite sabremos que podemos parar laexploración porque ya tenemos el valor de la mejor jugada accesible.

La función minimax se mantiene igual, sólo varían las funciones que hacen la exploraciónde cada nivel, su código sería el siguiente:

funcion valorMax (g , a l f a , beta ) retorna ente ros i estado_terminal ( g ) entonces

retorna ( eva luac ion ( g ) )s i no

para cada mov en movs_posibles ( g ) hacer

a l f a=max( a l f a , valorMin ( a p l i c a r (mov , g ) , a l f a , beta ) )s i a l f a>=beta entonces retorna ( beta )

fpara

retorna ( a l f a )f s i

ffuncion

funcion valorMin (g , a l f a , beta ) retorna ente ros i estado_terminal ( g ) entonces

retorna ( eva luac ion ( g ) )s i no

para cada mov en movs_posibles ( g ) hacer

beta=min ( beta , valorMax ( a p l i c a r (mov , g ) , a l f a , beta ) )s i a l f a>=beta entonces retorna ( a l f a )

fpara

retorna ( beta )f s i

ffuncion

La llamada que hará la función MiniMax a la función valorMax le pasará −∞ comovalor de alfa y +∞ como valor de beta.

En la función valorMax, alfa es el valor que se actualiza y beta se mantiene constanterepresentando el valor de la mejor jugada encontrada hasta ahora. En la función valorMin,beta es el valor que se actualiza y alfa se mantiene constante representando el valor dela mejor jugada encontrada hasta ahora.

En la siguiente �gura se ve como exploraría el algoritmo de minimax con poda alfa betael ejemplo anterior:

Page 55: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

50 CAPÍTULO 5. BÚSQUEDA CON ADVERSARIO

αβ

αβ

αβ

128 16 6 9 13 10 9 7

=+inf

=−inf αβ

=−inf,8

=+inf,8=8 =8=+inf,6 =+inf,10,9,7

La ventaja de utilizar la poda alfa beta es que podemos permitirnos ampliar el límitede profundidad de exploración, ya que nos ahorramos la exploración de parte del árbol debúsqueda, y así conseguir mejores resultados.

Page 56: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

Capítulo 6

Satisfacción de restricciones

6.1. De variables y valores

Existen problemas especí�cos que, por sus propiedades, se pueden resolver más fácil-mente utilizando algoritmos adaptados a ellos que utilizando algoritmos generales. Estees el caso de los problemas denominados de satisfacción de restricciones (constraintsatisfaction1.

Las características de un problema de satisfacción de restricciones son las siguientes:

El problema se puede representar mediante un conjunto de variables.

Cada variable tiene un dominio de valores (un conjunto �nito de valores discretos ointervalos de valores continuos)

Existen restricciones de consistencia entre las variables (binarias, n-arias)

Una solución es una asignación de valores a esas variables

El interés de este tipo de problemas viene de que muchos problemas reales se puedenplantear como problemas de satisfacción de restricciones, como por ejemplo la plani�caciónde tareas, logística (localización o asignación de recursos, personas, vehículos, ...), gestiónde redes (electricidad, comunicaciones, ...), diseño/con�guración, visión y reconocimientode patrones, razonamiento (temporal, espacial, ...), ... Estas aplicaciones hacen que sea unárea bastante interesante desde un punto de vista práctico.

Todos los algoritmos de resolución de problemas de satisfacción de restricciones queveremos están pensados para el caso de que las restricciones sean binarias ya que se pue-den representar mediante grafos (grafos de restricciones) en los que los nodos son lasvariables, las restricciones son los arcos, y los dominios de las variables son los diferentes

1En la literatura los encontrareis abreviados como CSP (constraint satisfaction problems).

51

Page 57: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

52 CAPÍTULO 6. SATISFACCIÓN DE RESTRICCIONES

valores que pueden tomar los nodos. Esto no supone ninguna limitación, dado que la ma-yor parte de los problemas no binarios se pueden convertir en problemas binarios mediantetransformaciones en las restricciones.

Ejemplo 6.1 Un ejemplo clásico de problema de satisfacción de restricciones es el decoloreado de mapas. El problema consiste en asignar colores a los países de un mapa demanera que dos países adyacentes no tengan el mismo color.

P1

P2 P3

P4

P5P6

P1

P2P3

P4

P5P6

Colores={rojo, verde, amarillo, azul}

El problema se puede representar como un grafo donde cada nodo es un país y los arcosentre nodos representan las fronteras comunes. Los nodos del grafo serían las variables delproblema, los arcos representarían las restricciones entre pares de variables (sus valoreshan de ser diferentes) y los colores disponibles serían los dominios de las variables.

6.2. Buscando de manera diferente

Se puede plantear un problema de satisfacción de restricciones como un problema debúsqueda general. Dado que una solución es una asignación de valores a las variablesdel problema, sólo haría falta enumerar de alguna manera todas las posibilidades hastaencontrar alguna que satisfaga las restricciones.

Evidentemente, esta aproximación es irrealizable ya que el conjunto de posibles asigna-ciones a explorar es muy grande. Suponiendo n variables y m posibles valores, tendríamosun espacio de búsqueda de O(mn).

Un problema adicional es que no hay ninguna noción de calidad de solución, ya quetodas las asignaciones son igual de buenas y lo único que las diferencia es si satisfacen lasrestricciones o no, por lo que no podemos con�ar en una función heurística que nos indiqueque combinaciones debemos mirar primero, o como modi�car una asignación para acercarlaa la solución. Esto nos deja con que los únicos algoritmos que podremos utilizar serán losde búsqueda no informada, lo que hará que tengamos que estudiar com más profundidadel problema para poder solucionarlo de una manera e�ciente.

Una ventaja con la que nos encontraremos es que, las propiedades que tienen estosproblemas permiten derivar heurísticas que reducen el espacio de búsqueda de manera

Page 58: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

6.2. BUSCANDO DE MANERA DIFERENTE 53

considerable.

Veremos tres aproximaciones a la resolución de problemas de satisfacción de restriccio-nes, la primera se basará en búsqueda no informada, la segunda se basará en la reducciónde espacio de búsqueda del problema y la tercera intentará combinar ambas.

6.2.1. Búsqueda con backtracking

La primera aproximación se basará en la búsqueda no informada. Plantearemos elproblema de manera que podamos explorar el conjunto de posibles asignaciones de valoresa las variables como una búsqueda en profundidad.

Podemos observar que, dada una asignación parcial de valores a las variables de unproblema, ésta podría formar parte de una solución completa si no viola ninguna restricción,por lo tanto sólo tendríamos que encontrar el resto de valores necesarios para completarla.

Esto nos hace pensar que podemos plantear la búsqueda más fácilmente si exploramosen el espacio de las soluciones parciales, que si lo planteamos como una búsqueda enel espacio de las soluciones completas como habíamos comentado antes. Esto nos puedeindicar un algoritmo para hacer la exploración.

Podemos establecer un orden �jo para las variables y explorar de manera sistemática elespacio de soluciones parciales, asignando valores a las variables de manera consecutiva enel orden que hemos �jado. En el momento en el que una solución parcial viole alguna de lasrestricciones del problema, sabremos que no formará parte de ninguna solución completa,por lo que replantearemos las asignaciones que hemos realizado. A este tipo de búsquedase la denomina busqueda con bactracking cronológico.

De�niremos tres conjuntos con las variables del problema. Por un lado tendremos lasvariables pasadas, que serán las que ya tienen un valor asignado y forman parte de lasolución parcial. Tendremos la variable actual, que será a la que debemos asignarle unvalor. Y por último tendremos las variables futuras, que serán las que aún no tienen valor.

El algoritmo es el siguiente:

funcion backtrack ing_crono log i co ( v futuras , s o l u c i on ) retorna a s i gnac i ons i v fu tura s . es_vacio ? ( ) entonces retorna ( s o l u c i on )s i no

vactua l=v futura s . primero ( )v fu tura s . borrar_primero ( )para cada v en vactua l . v a l o r e s ( ) hacer

vactua l . a s i gna r ( v )s o l u c i on . anadir ( vactua l )s i s o l u c i on . va l i da ( ) entonces

s o l u c i on=backtrack ing_crono log i co ( v futuras , s o l u c i on )s i (no s o l u c i on . es_vacio ? ( ) ) entonces

retorna ( s o l u c i on )s i no s o l u c i on . bor rar ( vactua l )

Page 59: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

54 CAPÍTULO 6. SATISFACCIÓN DE RESTRICCIONES

f s i

s i no s o l u c i on . bor rar ( vactua l )f s i

fpara

retorna ( s o l u c i on . vac ia ( ) )f s i

ffuncion

El algoritmo hace un recorrido en profundidad de manera recursiva por todas las asigna-ciones posibles de valores a cada una de las variables del problema. El parámetro vfuturascontiene todas las variables del problema en orden, el parámetro solución irá guardandolas soluciones parciales. El hacer el recorrido en profundidad hace que el coste espacial dela búsqueda sea lineal.

El caso base de la recursividad es que el conjunto de variables futuras se haya agotado,el caso recursivo es iterar para todos los valores de la variable actual. El algoritmo parala llamada recursiva cuando una asignación de valor a la variable actual viola algunarestricción del problema (solucion.válida()). En el caso de que ninguna asignación déuna solución válida, el algoritmo permite que se cambie el valor de la variable anterior(retorna una solución vacía).

Ejemplo 6.2 Otro problema clásico de satisfacción de restricciones es el de la N reinasque ya hemos comentado en el primer capítulo. Éste se puede plantear como un problema desatisfacción de restricciones en el que las reinas serían las variables, el dominio de valoressería la columna en la que se coloca la reina y las restricciones serían que las posicionesen las que colocamos las reinas no hagan que se maten entre si.

En la �gura 6.1 podemos ver como exploraría el algoritmo de backtracking cronológicoel problema en el caso de 4 reinas.

El algoritmo de backtracking cronológico puede hacer bastante trabajo innecesario aveces si la variable que provoca la vuelta atrás del algoritmo no es precisamente la últi-ma asignada, haciendo que se tengan que probar todas las combinaciones posibles de lasvariables que hay entre el primer punto donde se encuentra la violación de la restriccióny la variable que la provoca. Esto ha hecho desarrollar variantes más inteligentes del ba-cktracking cronológico, la mas sencilla es la denominada backjumping, que intenta queel backtracking no sea a la variable anterior, sino que, teniendo en cuenta las restriccionesinvolucradas, vuelva a la variable que tiene alguna restricción con la variable actual. Estoconsigue evitar todas las pruebas de valores entre la variable actual y esa variable.

6.2.2. Propagación de restricciones

Otras vías a través de las que atacar este tipo de problemas son las denominadas técni-cas de propagación de restricciones. Mediante éstas se pretende reducir el número de

Page 60: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

6.2. BUSCANDO DE MANERA DIFERENTE 55

R1=1 R1=2

R2=3

R2=1 NOR2=2 NO

R3=1 NOR3=2 NOR3=3 NOR3=4 NO

Backtracking a R2

R2=4

R3=1 NO

R4=1 NOR4=2 NOR4=3 NOR4=4 NO

R3=2NO

R3=3 NOR3=4 NO

R2=1 NOR2=2 NOR2=3 NOR2=4

R3=1

R4=1 NOR4=2 NOR4=3

Solucion (R1=2,R2=4,R3=1,R4=3)Backtracking a R3

Figura 6.1: 4 reinas mediante backtracking cronológico

combinaciones que hay que probar, descartando todas aquellas que contengan asignacionesde valores que sabemos que no pueden aparecer en ninguna solución.

Estas técnicas se han desarrollado a partir de heurísticas derivadas de propiedades quetienen los grafos de restricciones. Las más utilizadas son las que se derivan de la propiedaddenominada k-consistencia.

Se dice que un grafo de restricciones es k-consistente si para cada variable Xi del grafo,cada conjunto de k variables que la incluyan y para cada valor del dominio de Xi, podemosencontrar una combinación de k valores de estas variables que no viola las restriccionesentre ellas. La ventaja de estas propiedades es que se pueden comprobar con algoritmos decoste polinómico.

Esta propiedad la podemos de�nir para cualquier valor de k, pero típicamente se utilizael caso de k igual a 2, al que se denomina arco-consistencia. Diremos que un grafo derestricciones es arco-consistente, si para cada pareja de variables del grafo, para cadauno de los valores de una de las variables, podemos encontrar otro valor de la otra variableque no viola las restricciones entre ellas.

Esta propiedad permite eliminar valores del dominio de una variable. Si dado un valorde una variable y dada otra variable con la que tenga una restricción, no podemos encontraralgún valor en la otra variable que no viole esa restricción, entonces podemos eliminar elvalor, ya que no puede formar parte de una solución.

Page 61: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

56 CAPÍTULO 6. SATISFACCIÓN DE RESTRICCIONES

El objetivo será pues, a partir de un grafo de restricciones, eliminar todos aquellosvalores que no hagan arco consistente el grafo, de manera que reduzcamos el número deposibles valores que pueden tener las variables del problema y por lo tanto el número decombinaciones a explorar.

El algoritmo que convierte un grafo de restricciones en grafo arco-consistente es elsiguiente:

Algoritmo Arco_cons i s tenc iaR=conjunto de arcos de l problema /∗ en ambos s en t i do s ∗/mientras haya mod i f i c a c i one s en l o s dominios de l a s v a r i a b l e s hacer

r=extraer_arco (R)/∗ r_i es l a v a r i ab l e de l o r i g en de l arco

r_j es l a v a r i ab l e de l de s t i no de l arco ∗/para cada v en e l dominio de r_i hacer

s i v no t i e n e ningún va lo r en e l dominio de r_j que cumpla r entonces

e l im ina r v de l dominio de v_ianadir todos l o s a rcos que tengan como de s t i no r_i

menos e l ( r_j − r_i )f s i

fpara

fmientras

fAlgoritmo

El coste del algoritmo es O(k · r) siendo r el número de restricciones del problema(contando los dos sentidos) y k un factor constante (hay que tener en cuenta que r escuadrático respecto al número de variables).

Ejemplo 6.3 En la siguiente �gura tenemos un problema de coloreado de grafos donde encada uno de los nodos se indica el dominio de cada variable. El objetivo será colorear elgrafo de manera que ningún nodo adyacente tenga el mismo color, por lo que cada arco esuna restricción de desigualdad:

{Azul}

{Axul, Rojo}

{Azul, Verde}{Azul, Rojo, Verde}

X1

X2

X3X4

El conjunto de arcos con los que comenzaría el algoritmo son:

{X1 −X2, X2 −X1, X2 −X3, X3 −X2, X2 −X4, X4 −X2, X3 −X4, X4 −X3}

Page 62: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

6.2. BUSCANDO DE MANERA DIFERENTE 57

La ejecución del algoritmo sería la siguiente:

1. Seleccionamos X1 −X2 Eliminamos Azul del dominio de X1

2. Seleccionamos X2 −X1 Todos los valores son consistentes3. Seleccionamos X2 −X3 Todos los valores son consistentes4. Seleccionamos X3 −X2 Eliminamos Azul del dominio de X3

Tendríamos que añadir el arco X4 −X3

pero ya está5. Seleccionamos X2 −X4 Todos los valores son consistentes6. Seleccionamos X4 −X2 Eliminamos Azul del dominio de X4

Tendríamos que añadir el arco X3 −X4

pero ya está7. Seleccionamos X3 −X4 Eliminamos Verde del dominio de X3

Añadimos el arco X2 −X3

8. Seleccionamos X4 −X3 Todos los valores son consistentes9. Seleccionamos X2 −X3 Todos los valores son consistentes

Casualmente, al hacer arco-consistente el grafo hemos hallado la solución, pero no siem-pre tiene por que ser así.

La arco-consistencia no siempre nos asegura una reducción en los dominios del problema,por ejemplo, si consideramos el grafo del problema de las 4 reinas que hemos visto en elejemplo 6.2, éste es arco-consistente, por lo que no se puede eliminar ninguno de los valoresde las variables.

La k-consistencia para el caso de k igual a 3 se denomina camino consistencia, ypermite eliminar más combinaciones, pero con un coste mayor. El algoritmo de comproba-ción de camino-consistencia tiene coste O(n3) siendo n el número de restricciones. Existela propiedad que se denomina k-consistencia fuerte, que se cumple cuando un grafocumple la propiedad de consistencia desde 2 hasta k.

Esta propiedad asegura que si el grafo tiene anchura2 k y es k-consistente fuerte, en-contraremos una solución sin necesidad de hacer backtracking, desgraciadamente probaresto necesita un tiempo exponencial.

6.2.3. Combinando búsqueda y propagación

La combinación de la búsqueda con backtracking y la propagación de restricciones esla que da resultados más exitosos en estos problemas. La idea consiste en que cada vezque asignemos un valor a una variable realicemos una propagación de las restricciones queinduce esa asignación, eliminando de esta manera valores de las variables que quedan porasignar. Si con esta propagación, alguna de las variables se queda sin valores, deberemoshacer backtracking.

2Se puede calcular la anchura de un grafo en coste cuadrático.

Page 63: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

58 CAPÍTULO 6. SATISFACCIÓN DE RESTRICCIONES

La ventaja de este método es que podremos hacer backtracking antes de que lleguemosa la variable que acabará provocándolo. De manera que nos ahorraremos todos los pasosintermedios.

Existen diferentes algoritmos que combinan búsqueda y propagación, dependiendo deque tipo de consistencia se evalúe en cada paso de búsqueda. El algoritmo más sencillo esel denominado de forward checking.

Este algoritmo añade a cada paso de asignación de variables una prueba de arco-consistencia entre las variables futuras y la variable actual. Esta prueba de arco consistenciaconsigue que todos los valores de las variables futuras que no sean consistentes con la asig-nación a la variable actual sean eliminados, de manera que si algún dominio de algunavariable futura queda vacío realizamos backtracking.

El algoritmo sería idéntico al que hemos visto para el backtracking cronológico, salvoque incluiríamos la reducción de dominios mediante la prueba de arco consistencia y ademásen la comprobación de la validez de la solución parcial se incluiría la comprobación de quetodas las variables futuras tienen aún valores.

Ejemplo 6.4 En la �gura 6.2 podemos ver de nuevo el ejemplo 6.2 utilizando del algorit-mo de forward checking. Se puede comprobar que el número de asignaciones que se realizanes mucho menor ya que los valores no compatibles son eliminados por las pruebas de con-sistencia. Ahora el coste ha pasado a las pruebas de consistencia que se realizan en cadaiteración.

Existen algorimos que realizan pruebas de consistencia mas fuertes, como por ejemploel algoritmo RFL (Real Full Lookahead) que además comprueba la arco-consistenciaentre todas las variables futuras, o el algoritmo MAC (Maintaining Arc Consistency)que convierte el problema en arco consistente a cada paso.

Evidentemente, esta reducción de los dominios de las variables no sale gratis, el númerode comprobaciones a cada paso incrementa el coste por iteración del algoritmo. Dependien-do del problema, el coste de propagación puede hacer que el coste de hallar una soluciónsea mayor que utilizar el algoritmo de backtracking cronológico.

6.3. Otra vuelta de tuerca

Muchas veces estas heurísticas no son son su�cientes para reducir el coste de encontraruna solución, por lo que se combinan con otras que también se han mostrado efectivas eneste tipo de problemas.

Hasta ahora siempre hemos mantenido un orden �jo en la asignación de las variables,pero este puede no ser el más adecuado a la hora de realizar la exploración. Se utilizandiferentes heurísticas de ordenación dinámica de variables de manera que siempre se escoja

Page 64: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

6.3. OTRA VUELTA DE TUERCA 59

R1=1 R1=2

R2=4

Solucion (R1=2,R2=4,R3=1,R4=3)

R2={3,4}R3={2,4}R4={2,3}

R2=3

R4={2,3}R3={}

R3={2}R4={3}

R3=2R4={}

Backtracking a R2

Back a R1R2=4

R2={4}R3={1,3}R4={1,3,4}

R3={1}R4={1,3}

R4={3}

R4=3

R3=1

Figura 6.2: 4 reinas mediante forward checking

la que tenga más probabilidad de llevarnos antes a darnos cuenta de si una solución parcialno nos llevará a una solución.

Las heurísticas más utilizadas son:

Dominios mínimos (Dinamic value ordering), escogemos la variable con el me-nor número de valores.

Min width ordering, escogemos la variable conectada al menor número de variablesno instanciadas.

Max degree ordering, escogemos la variable más conectada en el grafo original.

No es despreciable el ahorro que se puede obtener mediante este tipo de heurísticas,para el problema de las 20 reinas, hallar la primera solución necesita alrededor de 2,5 · 107

asignaciones, utilizando forward checking se reduce a alrededor de 2,4 · 106 asignaciones, ysi utilizamos la heurística de dominios mínimos combinada con el forward checking hacenfalta alrededor de 4 · 103 asignaciones.

Page 65: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

60 CAPÍTULO 6. SATISFACCIÓN DE RESTRICCIONES

Page 66: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

Capítulo 7

Problemas resueltos

7.1. Búsqueda heurística

1. Dado el árbol de búsqueda que aparece en la �gura indica cual sería el recorrido queharía el algoritmo A∗ e IDA∗ ¾la función heurística es admisible?

En el árbol la función heurística esta descompuesta en la g y la h'. Cuando en unnodo aparecen dos valores el orden corresponde a la rama por la que se ha llegado alnodo.

A

D

H

E

C

I

F

J

L

N

7+0

6+1

4+3

5+1

4+2

3+3

1+5

3+3|2+3

0+6

6+1

7+1

4+2

B2+4

3+3

G5+2

K

M

O

61

Page 67: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

62 CAPÍTULO 7. PROBLEMAS RESUELTOS

Este problema corresponde al problema numero 19 del capítulo 2 de la colección deproblemas Solución:

Este es el recorrido que obtendría el algoritmo de A∗.

A

D

H

E

C

I

F

J

L

N

7+0

6+1

4+3

5+1

4+2

3+3

1+5

3+3|2+3

0+6

6+1

7+1

4+2

B2+4

3+3

G5+2

K

M

O

1

2

3

4

5

6

7 8

9

10

11

12

Este es el recorrido que obtendría el algoritmo de IDA∗.

A

D

H

E

C

I

F

J

L

N

7+0

6+1

4+3

5+1

4+2

3+3

1+5

3+3|2+3

0+6

6+1

7+1

4+2

B2+4

3+3

G5+2

K

M

O

1

2

3

7

4 6

5 8

9

10

11

12

13

14

15

16

17

18

19

20 21

22

23

Page 68: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

7.2. BÚSQUEDA LOCAL 63

Sobre cada árbol de búsqueda aparece el orden de expansión de los nodos que hacenlos respectivos algoritmos.

En el caso del A∗ se puede observar como el nodo E es reabierto al ser encontradopor un camino de mejor coste y reexpandido ya que llega a ser la mejor alternativa.

En el caso del IDA∗ se puede ver como, al sólo guardar el camino actual, variosnodos son explorados varias veces en una misma iteración, concretamente el nodo Ees expandido 2 veces y el H tres veces en la primera iteración del algoritmo.

También se puede ver que el camino a la solución que se encuentra con IDA∗ es dife-rente que el de A∗, ya que la exploración del primero sigue una estrategia sistemáticaen profundidad, y por lo tanto se encuentra el primer camino de más a la izquierdaque lleva a la solución.

Respecto a la admisibilidad de la función heurística, en este caso podemos ver elespacio completo de búsqueda, por lo que es sencillo comprobar si es admisible.Ninguno de los caminos que lleva a la solución (que tiene 7 como coste real) violala condición de admisibilidad. Todos los caminos que no llevan a la solucion tienencoste ∞, por lo que tampoco la violan.

Respecto a la admisibilidad de la función heurística, dado que tenemos el árbol deexploración completo podemos observar su comportamiento en todos los nodos. Estaes admisible ya que nunca sobreestima el coste real.

7.2. Búsqueda local

1. Deseamos colocar un conjunto de S supermercados y A almacenes para abastecerlosdentro de una ciudad. Para ello disponemos de un mapa de la ciudad que nos indica Lposibles locales donde podemos colocar los supermercados y los almacenes. Ademástambién disponemos del número de supermercados competidores que hay alrededorde cada local que puede ubicar un supermercado.

El objetivo es colocar los supermercados de manera que se minimice la competenciay que se maximice la distancia entre supermercados. Además deseamos colocar losalmacenes de manera que minimicemos el recorrido que harán nuestros camiones dereparto (disponemos de una función D(li, lj) que nos indica la distancia del recorridoóptimo entre cada local)

En los siguientes apartados se proponen diferentes alternativas para algunos de loselementos necesarios para plantear la búsqueda (solución inicial, operadores, funciónheurística, ...). El objetivo es comentar la solución que se propone respecto a si escorrecta, es e�ciente, o es mejor o peor respecto a otras alternativas posibles. Justi�catu respuesta.

a) Se plantea solucionarlo mediante Hill-Climbing usando como función heurísticala suma de las distancias de los locales de cada uno de los S supermercados

Page 69: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

64 CAPÍTULO 7. PROBLEMAS RESUELTOS

al resto, multiplicado por la suma de los supermercados competidores de cadasupermercado

b) Se plantea solucionarlo mediante Hill-Climbing utilizando como solución inicialel colocar aleatoriamente los S supermercados y los A almacenes y usando comooperadores de búsqueda mover un supermercado o almacén al local más cercanorespecto a su posición actual.

c) Se plantea solucionarlo mediante Hill-Climbing utilizando como solución inicialel colocar los supermercados consecutivamente hasta colocar los S y para cadasupermercado colocarlo en el local que esté a máxima distancia respecto allocal donde se colocó el supermercado anterior. Se plantean como operadoresmover un supermercado a cualquier local cuya suma de distancias al resto desupermercados sea mayor que la suma de distancias del local actual y mover unalmacén a cualquier local cuya suma de distancias al resto de supermercadossea menor que la distancia del local actual

d) Planteamos dividir el problema en dos partes una para los supermercados y otrapara los almacenes. El problema de los almacenes se resuelve una vez ubicadoslos supermercados. Utilizamos Hill-Climbing para solucionarlo, nos plateamoscomo operador asignar un almacén a un supermercado y como función heurísticala suma de las distancias de todos los supermercados al almacén que tienenasignado

e) Planteamos dividir el problema en dos partes, una para los supermercados y otrapara los almacenes. El problema de los supermercados lo resolvemos mediantealgoritmos genéticos. Para representar el problema utilizamos una tira de Lbits y como población inicial generamos n individuos donde en cada uno hayexactamente S bits a 1. La función heurística es la suma de distancias de cadasupermercado al resto mas una constante por la suma de la competencia de cadalocal. Como operadores usamos los operadores habituales de cruce y mutación.

Este problema corresponde al problema número 3 del capítulo 3 de la colección deproblemas

Solución:

a) La función heurística sólo tiene en cuenta una parte del problema y no optimizala distancia a los centros de reparto.

Si estamos minimizando la función debería decrecer, lo cual es falso respecto ala suma de las distancias de los locales entre ellos, debería ser el negativo de esafunción. Por otro lado, multiplicando por la competencia estaríamos penalizandoubicaciones donde la competencia fuera grande lo cual es correcto.

Page 70: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

7.2. BÚSQUEDA LOCAL 65

b) La solución inicial es correcta, ya que nos daría una ubicación para supermer-cados y almacenes. Además el coste de hallarla es pequeño

Mover un supermercado o almacén al local mas cercano nos mantiene dentrode las soluciones y tiene un factor de rami�cación pequeño, de manera que decada estado solo podemos llegar a S +A estados. El coste de hallar el local máscercano podría ser un problema ya que tendríamos que buscarlo para cada local.

c) La manera de colocar los supermercados podría ser algo mejor que hacerlo alea-toriamente, pero no nos asegura que nos deje en una solución inicial mejor yaque al colocar un supermercado sólo nos �jamos en el supermercado anteriory eso no nos asegura nada respecto al resto. Además el coste de colocar ca-da supermercado es relativamente grande ya que debemos buscar el local másalejado.

El operador propuesto tiene un factor de rami�cación mayor que el anterior,pero no demasiado grande. El coste de calcular los locales a donde desplazar elsupermercado es bastante grande, ya que tenemos que calcular para cada localposible la suma de las distancias a los locales donde están los otros supermer-cados o almacenes.

d) El operador es correcto, nos mantiene dentro de las soluciones, el factor de ra-mi�cación sería el numero de supermercados, lo cual podría ser un poco grande.

La suma de las distancias de los supermercados al almacén nos podría dar unaidea de la longitud del recorrido (cuanto más cerca estén los supermercados esterecorrido será más pequeño), pero no es exactamente lo que queremos minimizar.Evidentemente es mucho menos costoso que calcular el coste del camino mínimoentre cada supermercado y su almacén, por lo que sería una buena aproximación.

e) La representación es correcta, una solución es una asignación de supermercadosa locales, lo cual se puede representar indicando si un local tiene supermercadoo no. La forma de generar las soluciones iniciales también es correcta, todas sonsolución.

Estamos combinando dos elementos en la función heurística, primero la sepa-ración entre supermercados, esto ya se considera correctamente con la suma delas distancias entre supermercados, a mayor suma mayor separación. La penali-zación respecto a la competencia debería tener signo contrario, ya que a mayorcompetencia peor es la solución, así que la funcion debería ser:

En caso de que el algoritmo minimize:- Suma de distancias + K * Suma de competencia

Si el algoritmo maximiza solo tenemos que cambiar el signo.

Los operadores habituales de cruce y mutación no nos asegurarán que obtenga-mos soluciones al aplicarlos

Page 71: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

66 CAPÍTULO 7. PROBLEMAS RESUELTOS

7.3. Juegos

1. La siguiente �gura muestra el árbol de búsqueda de profundidad 4 para un deter-minado juego para el jugador MAX. Los valores de los nodos terminales indican elvalor de la función de evaluación para la posición obtenida en dicho nodo.

4 9 5 6 7 2 3 4 9 2 3 4 6 9 0 1 10 8 9 9 8 9

a) Utiliza el algoritmo Minimax para decidir qué jugada debe escoger MAX, in-dicando claramente los valores de la función de evaluación propagados a cadanodo.

b) Repite la exploración del apartado anterior utilizando la poda alfa-beta. Indicaclaramente la evolución de los valores de alfa y beta y los nodos que se podan.

c) ¾Crees que modi�cando el orden de generación de nodos podría podarse unmayor número de nodos? Justi�ca brevemente la respuesta.

Este problema corresponde al problema número 4 del capítulo 4 de la colección deproblemas

Solución:

a) La ejecución del minimax daría el siguiente resultado:

Page 72: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

7.3. JUEGOS 67

4 9 5 6 7 2 3 4 9 2 3 4 6 9 0 1 10 8 9 9 8 9

4 5 2 2 3 6 0 8 9 8

5 6 8 9

5 8

8

b) La ejecución del minimax con poda alfa-beta daría el siguiente resultado:

6 7 2 3 4

α=β=

α=β=

α=β= +inf

−inf,4,5

α=β=

α=β=

α=β=

α=β= +inf,5

−inf,2,3

α=β=

α=β=

α=β=

4 9 6 99 2 3 45

−inf+inf,4

−inf,4+inf,5 +inf,2

−inf+inf,5,2 +inf,5,3 +inf,5

+inf,5−inf

+inf−inf,5

5 2 3

Page 73: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

68 CAPÍTULO 7. PROBLEMAS RESUELTOS

9 9

α=β=

α=β=

α=β=

α=β=

5+inf,8

α=β=

α=β=

α=β=

10 80 1 8 9

5+inf,0

5+inf,10,8

+inf5,8

5

8

8

5,8

+inf−inf,5,8

c) Evidentemente el orden en que están los nodos afecta a la cantidad de nodospodados.

7.4. Satisfacción de restricciones

1. Dado el siguiente grafo de restricciones donde cada restricción es una condición dedesigualdad y los siguientes dominios para las variables:

A={1,2,3}B={1,2}C={2,3}D={2,3}E={1,2,3}

Page 74: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

7.4. SATISFACCIÓN DE RESTRICCIONES 69

A D

E

CB

Haz la ejecución del backtracking cronológico hasta el primer backtracking a la va-riable A y del forward checking hasta encontrar la primera solución

Este problema corresponde al problema número 17 del capítulo 5 de la colección deproblemas

Solución:

Backtracking cronologico

1) A=12) B= 6 1,23) C= 6 2,34) D= 6 2, 6 37) C= 6 38) B= 6 29) A= 6 1,2

Page 75: Inteligencia Artificial: Resolucion de Problemas, Algoritmos de Busqueda, Javier Bejar

70 CAPÍTULO 7. PROBLEMAS RESUELTOS

Forward checking

1) A=1B={6 1,2}C={2,3}D={2,3}E={6 1,2,3}

2) B=2C={6 2,3}D={6 2,3}E={6 2,3}

3) C=3D=∅E={3}Backtracking a A

4) A=2B={1,6 2}C={6 2,3}D={2,3}E={1, 6 2,3}

5) B=1C={3}D={2,3}E={6 1,3}

6) C=3D={2, 6 3}E={3}

7) D=2E={3}

8) E=3