Está en la página 1de 76

Inteligencia Articial (IA) de problemas Resolucion Algoritmos de busqueda

Javier Bjar

Departament de Llenguatges i Sistemes Informtics Enginyeria en informtica 1

er

Cuatrimestre - curso 2006/2007

BY:

This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License. To view a copy of this license, visit

http://creativecommons.org/licenses/by-nc-sa/2.0/
Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.

BY:

C
or send a letter to:

ndice general
1. Resolucin de problemas
1.1. 1.2. 1.3. Qu es un problema? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . El espacio de estados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Algoritmos de bsqueda en el espacio de estados . . . . . . . . . . . . . . .

1
1 2 6

2. Bsqueda no informada
2.1. 2.2. 2.3. 2.4. Bsqueda independiente del problema . . . . . . . . . . . . . . . . . . . . . Bsqueda en anchura prioritaria . . . . . . . . . . . . . . . . . . . . . . . . Bsqueda en profundida prioritaria Bsqueda en profundidad iterativa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

11
11 11 12 15

3. Bsqueda heurstica
3.1. 3.2. 3.3. 3.4. 3.5. El conocimiento importa . . . . . . . . . . . . . . . . . . . . . . . . . . . . El ptimo est en el camino . . . . . . . . . . . . . . . . . . . . . . . . . .

17
17 17 18 19 22 22 24 25 25 25 26

T primero y t despus . . . . . . . . . . . . . . . . . . . . . . . . . . . .

El algoritmo A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Pero, encontrar el ptimo? . . . . . . . . . . . . . . . . . . . . . . . . . . 3.5.1. 3.5.2. 3.5.3. Admisibilidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Consistencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Heurstico ms informado . . . . . . . . . . . . . . . . . . . . . . .

3.6.

Mi memoria se acaba . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.6.1. 3.6.2. El algoritmo IDA

. . . . . . . . . . . . . . . . . . . . . . . . . . .

Otras alternativas . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4. Bsqueda local
4.1. El tamao importa, a veces . . . . . . . . . . . . . . . . . . . . . . . . . . 3

31
31

NDICE GENERAL

4.2. 4.3. 4.4.

Tu s, vosotros no . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Demasiado calor, demasiado fro . . . . . . . . . . . . . . . . . . . . . . . . Cada oveja con su pareja . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4.1. 4.4.2. 4.4.3. 4.4.4. 4.4.5. Codicacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

32 35 37 38 39 40 41 42

Combinacin de individuos . . . . . . . . . . . . . . . . . . . . . . . El algoritmo gentico cannico . . . . . . . . . . . . . . . . . . . . . Cuando usarlos . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5. Bsqueda con adversario


5.1. 5.2. 5.3. 5.4. T contra mi o yo contra ti . . . . . . . . . . . . . . . . . . . . . . . . . . Una aproximacin trivial . . . . . . . . . . . . . . . . . . . . . . . . . . . . Seamos un poco ms inteligentes . . . . . . . . . . . . . . . . . . . . . . .

43
43 44 46 48

Seamos an ms inteligentes . . . . . . . . . . . . . . . . . . . . . . . . . .

6. Satisfaccin de restricciones
6.1. 6.2. De variables y valores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Buscando de manera diferente . . . . . . . . . . . . . . . . . . . . . . . . . 6.2.1. 6.2.2. 6.2.3. 6.3. Bsqueda con backtracking . . . . . . . . . . . . . . . . . . . . . .

51
51 52 53 54 57 58

Propagacin de restricciones . . . . . . . . . . . . . . . . . . . . . . Combinando bsqueda y propagacin . . . . . . . . . . . . . . . . .

Otra vuelta de tuerca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

7. Problemas resueltos
7.1. 7.2. 7.3. 7.4. Bsqueda heurstica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Bsqueda local . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

61
61 63 66 68

Juegos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Satisfaccin de restricciones . . . . . . . . . . . . . . . . . . . . . . . . . .

Captulo 1 Resolucin de problemas


1.1. Qu es un problema?

Una de las principales capacidades de la inteligencia humana es su capacidad para resolver problemas. La habilidad para analizar los elementos esenciales de cada problema, abstrayndolos, el identicar las acciones que son necesarias para resolverlos y el determinar cual es la estrategia ms acertada para atacarlos, son rasgos fundamentales que debe tener cualquier entidad inteligente. Es por eso por lo que la resolucin de problemas es uno de los temas bsicos en inteligencia articial. Podemos denir la resolucin de problemas como el proceso que partiendo de unos datos iniciales y utilizando un conjunto de procedimientos escogidos a priori, es capaz de determinar el conjunto de pasos o elementos que nos llevan a lo que denominaremos una solucin. Esta solucin puede ser, por ejemplo, el conjunto de acciones que nos llevan a cumplir cierta propiedad o como deben combinarse los elementos que forman los datos iniciales para cumplir ciertas restricciones. Evidentemente, existen muchos tipos diferentes de problemas, pero todos ellos tienen elementos comunes que nos permiten clasicarlos y estructurarlos. Por lo tanto, no es descabellada la idea de poder resolverlos de manera automtica, si somos capaces de expresarlos de la manera adecuada. Para que podamos resolver problemas de una manera automatizada es necesario, en primer lugar, que podamos expresar las caractersticas de los problemas de una manera formal y estructurada. Eso nos obligar a encontrar un lenguaje comn que nos permita denir problemas. En segundo lugar, hemos de denir algoritmos que representen estrategias que nos permitan hallar la solucin de esos problemas, que trabajen a partir de ese lenguaje de representacin y que nos garanticen hasta cierta medida que la solucin que buscamos ser hallada. Si abstraemos los elementos que describen un problema podemos identicar los siguien-

CAPTULO 1.

RESOLUCIN DE PROBLEMAS

tes elementos: 1. Un punto de partida, los elementos que denen las caractersticas del problema. 2. Un objetivo a alcanzar, qu queremos obtener con la resolucin. 3. Acciones a nuestra disposicin para resolver el problema, de qu herramientas disponemos para manipular los elementos del problema. 4. Restricciones sobre el objetivo, qu caractersticas debe tener la solucin 5. Elementos que son relevantes en el problema denidos por el dominio concreto, qu conocimiento tenemos que nos puede ayudar a resolver el problema de una manera eciente. Escogiendo estos elementos como base de la representacin de un problema podemos llegar a diferentes aproximaciones, algunas generales, otras ms especcas. De entre los tipos de aproximaciones podemos citar:

Espacio de estados:
el problema.

Se trata de la aproximacin ms general, un problema se divide en

un conjunto de pasos de resolucin que enlazan los elementos iniciales con los elementos que describen la solucin, donde en cada paso podemos ver como se transforma

Reduccin a subproblemas:
descomposicin.

En esta aproximacin suponemos que podemos descom-

poner el problema global en problemas ms pequeos de manera recursiva hasta llegar a problemas simples. Es necesario que exista la posibilidad de realizar esta

Satisfaccin de restricciones: Juegos:

Esta aproximacin es especca para problemas que se

puedan plantear como un conjunto de variables a las que se han de asignar valores cumpliendo ciertas restricciones. Tambin es una aproximacin especca, en la que el problema se plantea como

la competicin entre dos o mas agentes

1.2.

El espacio de estados

La aproximacin ms general y ms sencilla es la que hemos denominado espacio de


estados.

Deberemos suponer que podemos denir un problema a partir de los elementos

que intervienen en l y sus relaciones. En cada instante de la resolucin de un problema estos elementos tendrn unas caractersticas y relaciones especcas.

estado a la representacin de los elementos que describen el problema en un momento dado. Distinguiremos dos estados especiales, el estado inicial (punto de
Denominaremos

1.2.

EL ESPACIO DE ESTADOS

partida) y el

estado nal (objetivo del problema). La cuestin principal que nos deberemos

plantear ser qu debemos incluir en el estado. No existen unas directrices que nos resuelvan esta cuestin, pero podemos tomar como lnea general que debemos incluir lo suciente para que, cuando obtengamos la solucin, sta pueda trasladarse al problema real, ya que una simplicacin excesiva nos llevar a soluciones inservibles. En el otro extremo, representar elementos de estado que sean irrelevantes o superuos lo nico que conseguir es aumentar el coste computacional de la resolucin. Para poder movernos entre los diferentes estados que denen el problema, necesitaremos lo que denominaremos

operadores de transformacin. Un operador es una funcin de

transformacin sobre la representacin de un estado que lo convierte en otro estado. Los operadores denirn una relacin de accesibilidad entre estados. Los elementos que denen un operador son:

1.

Condiciones de aplicabilidad, es decir, las condiciones que debe cumplir un estado


para que podamos aplicrselo.

2.

Funcin de transformacin,
estado para conseguir otro.

es decir, la transformacin que ha de aplicarse al

Igual que con la eleccin de los elementos que forman parte del estado, tampoco existen unas directrices que nos permitan decidir, de manera general, que operadores sern necesarios para resolver el problema, cuantos sern necesarios, o que nivel de granularidad han de tener (como de diferente es el estado transformado respecto al original). Se puede dar el mismo consejo que con los estados, pocos operadores pueden hacer que nuestro problema sea irresoluble, o que la solucin no nos sirva en el problema real, demasiados operadores pueden hacer que el coste de la resolucin sea prohibitivo.

de estados. ste representa todos los caminos que hay entre todos los estados posibles de
nuestro problema esta dentro de ese mapa, slo nos falta hallar el camino adecuado. El ltimo elemento que nos queda por denir es la

Los estados y su relacin de accesibilidad conforman lo que se denomina el

espacio

un problema. Podra asimilarse con un mapa de carreteras de un problema, la solucin de

solucin.

La deniremos de dos

maneras, como la secuencia de pasos que llevan del estado inicial al nal (secuencia de operadores) o el estado nal del problema. Existen problemas en los que la secuencia de operadores es el objetivo de la solucin, en stos, por lo general, sabemos como es la solucin, pero no sabemos como construirla, y existen tambien problemas en los que queremos saber si es posible combinar los elementos del problema cumpliendo ciertas restricciones, pero la forma de averiguarlo no es importante. Adems, podremos catalogar diferentes tipos problema segn el tipo de solucin que busquemos, dependiendo de si nos basta con una cualquiera, queremos la mejor o buscamos todas las soluciones posibles. Evidentemente el coste computacional de cada uno de estos tipos es muy diferente.

CAPTULO 1.

RESOLUCIN DE PROBLEMAS

En el caso de plantearnos el

coste de una solucin, deberemos introducir otros ele-

mentos en la representacin del problema. Deniremos el coste de una solucin como el gasto en recursos de la aplicacin de los operadores a los estados, por lo que cada operador tendr tambin asociado un coste. Vamos a ver dos ejemplos de como denir problemas como espacio de estados:

ciones dispuesto como una matriz de 33 en el que hay 8 posiciones ocupadas por chas numeradas del 1 al 8 y una posicin vaca. Las chas se pueden mover ocupando la posicin vaca, si la tienen adyacente. El objetivo es partir de una disposicin cualquiera de las chas, para obtener una disposicin de stas en un orden especco. Tenemos una representacin del problema en la siguiente gura:

Ejemplo 1.1 El ocho puzzle es un problema clsico que consiste en un tablero de 9 posi-

1 4 7

2 5 8

3 6

La denicin de los elementos del problema para plantearlo en el espacio de estados sera la siguiente: Espacio de estados: Conguraciones de 8 chas en el tablero Estado inicial: Cualquier conguracin Estado nal: Fichas en un orden especco Operadores: Mover el hueco
Condiciones: El movimiento est dentro del tablero Transformacin: Intercambio entre el hueco y la cha en la posicin del movi-

miento

Solucin: Que movimientos hay que hacer para llegar al estado nal, posiblemente nos interesa la solucin con el menor nmero de pasos En esta denicin hemos escogido como operador mover el hueco, evidentemente, en el problema real lo que se mueven son las chas, pero elegir el movimiento de una cha como

1.2.

EL ESPACIO DE ESTADOS

operador nos habra dado 8 posibles aplicaciones con 4 direcciones posibles para cada una. Al elegir el mover hueco como operador tenemos una nica aplicacin con 4 direcciones posibles. Este tipo de elecciones pueden hacer que un problema sea computacionalmente ms o menos costoso de resolver.

el problema se trata de colocar N reinas en un tablero de ajedrez de NN de manera que no se maten entre si. En este problema no nos interesa la manera de hallar la solucin, sino el estado nal. En la gura tenemos representada la solucin para un problema con dimensin 4:

Ejemplo 1.2 El problema de las N reinas es tambin un problema clsico, en este caso

Espacio de estados: Conguraciones de 0 a n reinas en el tablero con slo una por la y columna Estado inicial: Conguracin sin reinas en el tablero Estado nal: Conguracin 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 Transformacin: Colocar una reina ms en el tablero en una la y columna

determinada

Solucin: Una solucin, pero no nos importan los pasos Tambin podramos haber hecho otras elecciones como por ejemplo que el estado inicial tuviera las N reinas colocadas, o que el operador permitiera mover las reinas a una celda adyacente. Todas estas alternativas supondran un coste de solucin ms elevado.

CAPTULO 1.

RESOLUCIN DE PROBLEMAS

Un elemento que ser importante a la hora de analizar los problemas que vamos a solucionar, y que nos permitir tomar decisiones, es el y su

conectividad.

tamao del espacio de bsqueda

Este tamao inuir sobre el tipo de solucin que podemos esperar

(por ejemplo, si el tamao es demasiado grande, encontrar la solucin ptima puede ser irrealizable), el tipo de algoritmo que es ms adecuado, (por ejemplo, habr algoritmos ms aptos para soluciones que estn ms lejos del estado inicial), y cual ser el coste computacional que implicar la resolucin del problema. Es esencial, a la hora de plantear un problema, estimar cual es el nmero de estados que contiene. Por ejemplo, en el caso del ocho puzzle tenemos tantas combinaciones como posibles ordenes podemos hacer de las 9 piezas mas el hueco, esto signica 9! estados posibles (362880 estados). Probablemente no tendremos que recorrer todos los estados posibles del problema, pero nos puede dar una idea de si el problema ser mas o menos difcil de resolver . Otro elemento a considerar es la conectividad entre los estados, que se puede calcular a partir del factor de ramicacin de los operadores que podemos utilizar. No es lo mismo recorrer un espacio de estados en el que de un estado podemos movernos a unos pocos estados sucesores, que un espacio de estados en los que cada estado esta conectado con casi todos los estados posibles. Esta es la razn por la que elegir operadores con un factor de ramicacin no muy grande es importante. Pero debemos tener en cuenta una cosa, un factor de ramicacin pequeo puede hacer que el camino hasta la solucin sea ms largo. Como siempre, hemos de buscar el compromiso, tener mucha conectividad es malo, pero muy poca tambin puede ser malo. En el caso del ocho puzzle, el factor de ramicacin es 4 en el peor de los casos, pero en media podemos considerar que estar alrededor de 2.

1.3.

Algoritmos de bsqueda en el espacio de estados

La resolucin de un problema planteado como un espacio de estados pasa por su exploracin. Debemos partir del estado inicial marcado por el problema, evaluando cada paso posible y avanzando hasta encontrar un estado nal. En el caso peor deberemos explorar todos los posibles caminos desde el estado inicial hasta poder llegar a un estado que cumpla las condiciones del estado nal. Para poder implementar un algoritmo capaz de explorar el espacio de estados en busca de una solucin primero debemos denir una representacin adecuada de ste. Las estructuras de datos ms 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-

sola comentar hace unos aos que problemas que tengan menos de 232 estados eran la frontera de los problemas sencillos y que se pueden resolver por fuerza bruta simplemente enumerndolos todos, con la capacidad de clculo actual probablemente ahora ese nmero mnimo de estados sea bastante mayor.

1 Se

1.3.

ALGORITMOS DE BSQUEDA EN EL ESPACIO DE ESTADOS

radores de cambio de estado estarn representados por los arcos. La eleccin de un rbol o un grafo la determinar la posibilidad de que a un estado slo se pueda llegar a travs de un camino (rbol) o que haya diferentes caminos que puedan llevar al mismo estado (grafo). Los grafos sobre los que trabajarn los algoritmos de resolucin de problemas son diferentes de los algoritmos habituales sobre grafos. La caracterstica principal es que el grafo se construir a medida que se haga la exploracin, dado que el tamao que puede tener hace imposible que se pueda almacenar en memora (el grafo puede ser incluso innito). Esto hace que, por ejemplo, los algoritmos habituales de caminos mnimos en grafos no sirvan en este tipo de problemas. Nosotros nos vamos a centrar en los algoritmos que encuentran una solucin, pero evidentemente extenderlo a todas las soluciones es bastante sencillo. Este sera un esquema a alto nivel de un algoritmo que halla una solucin de un problema en el espacio de estados:

funcion mientras
Generar Escoger

Busqueda_en_espacio_de_estados el primer estado

retorna
estado actual

solucion

Seleccionar

el

estado guardar

actual

no es

como el

el

actual

estado

final

hacer
( seleccion )

sucesores estado

del

estado los

( expansion )

fmientras retorna ffuncion

el

siguiente

entre

pendientes

solucion

En este algoritmo tenemos varias decisiones que nos permitirn obtener diferentes variantes que se comportarn de distinta manera y que tendrn propiedades especcas. La primera decisin es el

orden de expansin,

o lo que es lo mismo, el orden en el que

generamos los sucesores de un nodo. La segunda decisin es el

orden de seleccin, o sea,

el orden en el que decidimos explorar los nodos que an no hemos visitado.

tinguir dos tipos de nodos, los que ya se han expandido.

nodos abiertos, que representarn a los estados generados pero an no visitados y los nodos cerrados, que correspondern a los estados visitados y
Nuestro algoritmo siempre tendr una estructura que almacenar los nodos abiertos. Las diferentes polticas de insercin de esta estructura sern las que tengan una inuencia determinante sobre el tipo de bsqueda que har el algoritmo. Dado que estaremos explorando grafos, y que por lo tanto durante la exploracin nos encontraremos con estados ya visitados, puede ser necesario tener una estructura para almacenar los nodos cerrados. Merecer la pena si el nmero de nodos diferentes es pequeo respecto al nmero de caminos, pero puede ser prohibitivo para espacios de bsqueda muy grandes. A continuacin tenemos un algoritmo algo ms detallado que nos va a servir como

Entrando un poco ms en los detalles de funcionamiento del algoritmo, podremos dis-

CAPTULO 1.

RESOLUCIN DE PROBLEMAS

esquema general para la mayora de los algoritmos que iremos viendo:

Algoritmo
A c t u a l=

Busqueda

General inicial )

E s t _ a b i e r t o s . i n s e r t a r ( Estado

mientras no
H i j o s= H i j o s=

Est_abiertos . primero ( ) e s _ f i n a l ?( Actual )

y no

Est_abiertos . vacia ?()

hacer

Est_abiertos . borrar_primero ( ) Est_cerrados . i n s e r t a r ( Actual ) generar_sucesores ( Actual ) tratar_repetidos ( Hijos , Est_cerrados , Est_abiertos )

Est_abiertos . i n s e r t a r ( Hijos )

fmientras fAlgoritmo

A c t u a l=

Est_abiertos . primero ( )

Variando la estructura de abiertos variamos el comportamiento del algoritmo (orden de visita de los nodos). La funcin

generar_sucesores

seguir el orden de generacin

de sucesores denido en el problema. El tratamiento de repetidos depender de cmo se visiten los nodos, en funcin de la estrategia de visitas puede ser innecesario. Para poder clasicar y analizar los algoritmos que vamos a tratar, escogeremos unas propiedades que nos permitirn caracterizarlos. Estas propiedades sern:

Completitud:
trarla.

Si un algoritmo es completo tenemos la garanta de que hallar la

solucin, si no lo es, es posible que algoritmo no acabe o que sea incapaz de encon-

Complejidad temporal:

Nos indicar el coste temporal de la bsqueda en fun-

cin del tamao del problema, generalmente a partir del factor de ramicacin y la profundidad a la que se encuentra la solucin.

Complejidad espacial: Espacio requerido para almacenar los nodos pendientes de


explorar. Tambin se puede tener en cuenta el espacio para almacenar los nodos ya explorados si es necesario para el algoritmo

Optimalidad:

Si es capaz de encontrar la mejor solucin segn algn criterio de

preferencia o coste. Atendiendo a estos criterios podemos clasicar los algoritmos principales que estudiaremos en:

Algoritmos de bsqueda no informada: Estos algoritmos no tienen en cuenta el


coste de la solucin durante la bsqueda. Su funcionamiento es sistemtico, siguen un orden de visitas de nodos jo, establecido por la estructura del espacio de bsqueda. Los principales ejemplos de estos algoritmos son el de anchura prioritaria, el de profundidad prioritaria y el de profundidad iterativa.

1.3.

ALGORITMOS DE BSQUEDA EN EL ESPACIO DE ESTADOS

Algoritmos de bsqueda heurstica y bsqueda local: Estos algoritmos utilizan


una estimacin del coste o de la calidad de la solucin para guiar la bsqueda, de manera que se basan en algn criterio heurstico dependiente del problema. Estos algoritmos no son sistemticos, de manera que el orden de exploracin no lo determina la estructura del espacio de bsqueda sino el criterio heurstico. Algunos de ellos tampoco son exhaustivos y basan su menor complejidad computacional en ignorar parte del espacio de bsqueda. Existen bastantes algoritmos de este tipo con funcionamientos muy diferentes, no siempre garantizan el encontrar la solucin ptima, ni tan siquiera el hallar una solucin. Los principales ejemplos de estos algoritmos son A , IDA , Branch & Bound, Hill-climbing.

10

CAPTULO 1.

RESOLUCIN DE PROBLEMAS

Captulo 2 Bsqueda no informada


2.1. Bsqueda independiente del problema

Los algoritmos de bsqueda no informada (tambin conocidos como algoritmos de bsqueda ciega), no dependen de informacin propia del problema a la hora de resolverlo. Esto quiere decir que son algoritmos generales y por lo tanto se pueden aplicar en cualquier circunstancia. Estos algoritmos se basan en la estructura del espacio de estados y determinan estrategias sistemticas para su exploracin. Es decir, siguen una estrategia ja a la hora de visitar los nodos que representan los estados del problema. Se trata tambin de algoritmos exhaustivos, de manera que pueden acabar recorriendo todos los nodos del problema para hallar la solucin. Existen bsicamente dos polticas de recorrido de un espacio de bsqueda, en anchura y en profundidad. Todos los algoritmos que se explicarn a continuacin se basan en una de las dos. Al ser algoritmos exhaustivos y sistemticos su coste puede ser prohibitivo para la mayora de los problemas reales, por lo tanto slo ser aplicables en problemas pequeos. Su ventaja es que no nos hace falta obtener ningn conocimiento adicional sobre el problema, por lo que siempre son aplicables.

2.2.

Bsqueda en anchura prioritaria

La bsqueda en anchura prioritaria intenta explorar el espacio de bsqueda haciendo un recorrido por niveles, de manera que un nodo se visita solamente cuando todos sus predecesores y sus hermanos anteriores en orden de generacin ya se han visitado. Para obtener este algoritmo solo hemos de instanciar la estructura que guarda los nodos abiertos a una cola. Esta estructura nos consigue que el algoritmo general visite los nodos

11

12

CAPTULO 2.

BSQUEDA NO INFORMADA

en el orden que hemos establecido. Si nos jamos en las propiedades que hemos escogido para clasicar los algoritmos:

Completitud: El algoritmo siempre encuentra una solucin. Complejidad temporal: El coste es exponencial respecto al factor de ramicacin y p la profundidad de la solucin O (r ). Complejidad espacial: El coste es exponencial respecto al factor de ramicacin y la p profundidad de la solucin O (r ). Optimalidad: La solucin obtenida es ptima respecto al nmero de pasos desde la raz.

Respecto al tratamiento de nodos repetidos, si nos jamos en la gura que aparece a continuacin:

                                                                                                                                                                                                        

                                                                                                         










El nodo de color negro sera el nodo generado actual, los nodos en cuadrcula son nodos cerrados y los nodos rayados son nodos abiertos. Si el nodo generado actual est repetido en niveles superiores (ms cerca de la raz), su coste ser peor ya que su camino desde la raz es ms largo, si est al mismo nivel, su coste ser el mismo. Esto quiere decir que su coste ser peor o igual que algn nodo anterior visitado o no, de manera que lo podremos descartar, ya que o lo hemos expandido ya o lo haremos prximamente. El coste espacial de guardar los nodos cerrados para el tratamiento de repetidos es

O(rp ).

2.3.

Bsqueda en profundida prioritaria

La bsqueda en profundidad prioritaria intenta seguir un camino hasta la mayor profundidad posible, retrocediendo cuando acaba el camino y retomando la ltima posibilidad de eleccin disponible.

2.3.

BSQUEDA EN PROFUNDIDA PRIORITARIA

13

Para obtener este algoritmo solo hemos de instanciar la estructura que guarda los nodos abiertos a una pila. Esta estructura nos consigue que el algoritmo general visite los nodos en el orden que hemos establecido. El principal problema de este algoritmo es que no acaba si existe la posibilidad de que hayan caminos innitos. Una variante de este algoritmo que evita este problema es el algoritmo de

profundidad limitada,

ste impone un lmite mximo de profundidad

que impone la longitud mxima de los caminos recorridos. Esta limitacin garantiza que el algoritmo acaba, pero no garantiza la solucin ya que esta puede estar a mayor profundidad que el lmite impuesto. El algoritmo de profundidad limitada es el siguiente:

Algoritmo
A c t u a l=

Busqueda

en

profundidad

limitada

( limite :

entero )

E s t _ a b i e r t o s . i n s e r t a r ( Estado

inicial )

mientras no si
H i j o s=

Est_abiertos . primero ( ) e s _ f i n a l ?( Actual )

y no

Est_abiertos . vacia ?()

hacer

Est_abiertos . borrar_primero ( ) Est_cerrados . i n s e r t a r ( Actual ) p r o f u n d i d a d ( A c t u a l ) <= limite

entonces
Est_cerrados , Est_abiertos )

generar_sucesores ( Actual ) tratar_repetidos ( Hijos ,

fsi

H i j o s=

Est_abiertos . i n s e r t a r ( Hijos )

fmientras fAlgoritmo

A c t u a l=

Est_abiertos . primero ( )

La nica diferencia con el algoritmo general es que se dejan de generar sucesores cuando se alcanza la profundidad lmite. Si nos jamos en las propiedades que hemos escogido para clasicar los algoritmos:

Completitud: El algoritmo encuentra una solucin si se impone una profundidad lmite y existe una solucin dentro de ese lmite. Complejidad temporal: El coste es exponencial respecto al factor de ramicacin y p la profundidad del lmite de exploracin O (r ). Complejidad espacial: El coste es lineal respecto al factor de ramicacin y el lmite de profundidad es

O(rp).

Si hacemos una implementacin recursiva del algoritmo el coste

O(p),

ya que no nos hace generar todos los sucesores de un nodo, pudindolos

tratar uno a uno. Si tratamos los nodos repetidos el coste espacial es igual que en anchura ya que tendremos que guardar todos los nodos cerrados. Optimalidad: No se garantiza que la solucin sea ptima.

14

CAPTULO 2.

BSQUEDA NO INFORMADA

Respecto al tratamiento de nodos repetidos, si nos jamos en la gura que aparece a continuacin:

                                                                                                          

















                                                                                                      

                                                                                                

El nodo de color negro sera el nodo generado actual, los nodos en cuadrcula son nodos cerrados y los nodos rayados son nodos abiertos. Si el nodo generado actual est repetido en niveles superiores (ms cerca de la raz), su coste ser peor ya que su camino desde la raz es ms largo, si est al mismo nivel, su coste ser el mismo. En estos dos casos podemos olvidarnos de este nodo. En el caso de que el repetido corresponda a un nodo de profundidad superior, signica que hemos llegado al mismo estado por un camino ms corto, de manera que deberemos mantenerlo y continuar su exploracin, ya que nos permitir llegar a mayor profundidad que antes. En el caso de la bsqueda en profundidad, el tratamiento de nodos repetidos no es crucial ya que al tener un lmite en profundidad los ciclos no llevan a caminos innitos. Adems, no tratando repetidos mantenemos el coste espacial lineal, lo cual es una gran ventaja. El evitar tener que tratar repetidos y tener un coste espacial lineal supone una caracterstica diferenciadora de hace muy ventajosa a la bsqueda en profundidad. Este algoritmo ser capaz de obtener soluciones que se encuentren a gran profundidad. En un problema concreto, el algoritmo de bsqueda en anchura tendr una estructura p de nodos abiertos de tamao O (r ), lo que agotar rpidamente la memoria impidiendo continuar la bsqueda, pero solo habiendo alcanzado una profundidad de camino de cambio el algoritmo en profundidad solo tendr profundidad. Esto quiere decir que en problemas difciles la estrategia en profundidad ser la nica capaz de hallar una solucin con un espacio de memoria limitado.

p. En O(rp) nodos abiertos al llegar a esa misma

2.4.

BSQUEDA EN PROFUNDIDAD ITERATIV A

15

2.4.

Bsqueda en profundidad iterativa

Este algoritmo intenta obtener las propiedades ventajosas de la bsqueda en profundidad y en anchura combinadas, es decir, un coste espacial lineal y asegurar que la solucin ser ptima respecto a la longitud del camino. Para obtener este algoritmo lo que se hace es repetir sucesivamente el algoritmo de profundidad limitada, aumentando a cada iteracin la profundidad mxima a la que permitimos llegar. Este algoritmo obtendra el mismo efecto que el recorrido en anchura en cada iteracin, ya que a cada paso recorremos un nivel ms del espacio de bsqueda. El coste espacial ser lineal ya que cada iteracin es un recorrido en profundidad. Para que el algoritmo acabe en el caso de que no haya solucin se puede imponer un lmite mximo de profundidad en la bsqueda. Aparentemente podra parecer que este algoritmo es ms costoso que los anteriores al tener que repetir en cada iteracin la bsqueda anterior, pero si pensamos en el nmero de nodos nuevos que recorremos a cada iteracin, estos son siempre ms que todos los que hemos recorrido en todas las iteraciones anteriores, por lo que las repeticiones suponen un factor constante respecto a los que recorreriamos haciendo slo la ltima iteracin. El algoritmo de profundidad iterativa es el siguiente:

Algoritmo
p r o f =1;

Busqueda

en

profundidad

iterativa

( limite :

entero )

mientras no
( A c t u a l= (

Est_abiertos . i n i c i a l i z a r () e s _ f i n a l ?( Actual ) )

p r o f <l i m i t e

hacer hacer

E s t _ a b i e r t o s . i n s e r t a r ( Estado

inicial )

mientras no si
H i j o s=

Est_abiertos . primero ( ) e s _ f i n a l ?( Actual ) )

y no

Est_abiertos . vacia ?()

Est_abiertos . borrar_primero ( ) Est_cerrados . i n s e r t a r ( Actual ) p r o f u n d i d a d ( A c t u a l ) <= prof

entonces
Est_cerrados , Est_abiertos )

generar_sucesores ( Actual ) tratar_repetidos ( Hijos ,

fsi

H i j o s=

Est_abiertos . i n s e r t a r ( Hijos )

fmientras fmientras fAlgoritmo

A c t u a l=

Est_abiertos . primero ( )

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

Si nos jamos en las propiedades que hemos escogido para clasicar los algoritmos:

16

CAPTULO 2.

BSQUEDA NO INFORMADA

Completitud: El algoritmo siempre encontrar la solucin Complejidad temporal: La misma que la bsqueda en anchura. El regenerar el rbol p en cada iteracin solo aade un factor constante a la funcin de coste O (r ) Complejidad espacial: Igual que en la bsqueda en profundidad Optimalidad: La solucin es ptima igual que en la bsqueda en anchura Igual que en el caso del algoritmo en profundidad, el tratar repetidos acaba con todas las ventajas espaciales del algoritmo, por lo que es aconsejable no hacerlo. Si el algoritmo en profundidad limitada es capaz de encontrar soluciones a mayor profundidad, este algoritmo adems nos garantizar que la solucin ser ptima. Por lo tanto este es el algoritmo ms ventajoso de los tres.

Captulo 3 Bsqueda heurstica


3.1. El conocimiento importa

Es evidente que los algoritmos de bsqueda no informada sern incapaces de encontrar soluciones en problemas en los que el tamao del espacio de bsqueda sea grande. Todos estos algoritmos tiene un coste temporal que es una funcin exponencial del tamao de la entrada, por lo tanto el tiempo para encontrar la mejor solucin a un problema no es asumible en problemas reales. La manera de conseguir reducir este tiempo de bsqueda a algo razonable es intentar hacer intervenir conocimiento sobre el problema que queremos resolver dentro del funcionamiento del algoritmo de bsqueda. El problema que tendremos es que este conocimiento ser particular para cada problema, por lo tanto no ser exportable a otros. Perderemos en generalidad, pero podremos ganar en eciencia temporal. En este captulo nos centraremos en los algoritmos que buscan la solucin ptima. Este objetivo solo es abordable hasta cierto tamao de problemas, existir todo un conjunto de problemas en los que la bsqueda del ptimo ser imposible generalmente por el tamao de su espacio de bsqueda.

3.2.

El ptimo est en el camino

Para poder plantear la bsqueda del ptimo siempre hemos que tener alguna medida del coste de obtener una solucin. Este coste lo mediremos sobre el camino que nos lleva desde el estado inicial del problema hasta el estado nal. No todos los problemas se pueden plantear de esta forma tal y como veremos en el prximo captulo. Por lo tanto, supondremos que podemos plantear nuestra bsqueda como la bsqueda de un camino y que de alguna manera somos capaces de saber o estimar cual es la longitud o

17

18

CAPTULO 3.

BSQUEDA HEURSTICA

coste de ste. Por lo general tendremos un coste asociado a los operadores que nos permiten pasar de un estado a otro, por lo que ese coste tendr un papel fundamental en el clculo del coste del camino. Los algoritmos que veremos utilizarn el clculo del coste de este camino para saber que nodos merece la pena explorar antes. De esta manera, perderemos la sistematicidad de los algoritmos de bsqueda no informada, y el orden de visita de los estados de bsqueda no vendr determinado por su posicin en el grafo de bsqueda, sino por su coste. Dado que el grafo va siendo generado a medida que lo exploramos, podemos ver que tenemos dos elementos que intervienen en el coste del camino hasta la solucin que buscamos. En primer lugar, tendremos el coste del camino recorrido, que podremos calcular simplemente sumando los costes de los operadores aplicados desde el estado inicial hasta el nodo actual. En segundo lugar, tendremos el coste ms difcil, que es el del camino que nos queda por recorrer hasta el estado nal. Dado que lo desconocemos, tendremos que utilizar el conocimiento del que disponemos del problema para obtener una aproximacin. Evidentemente, la calidad de ese conocimiento que nos permite predecir el coste futuro, har ms o menos exitosa nuestra bsqueda. Si nuestro conocimiento fuera perfecto, podramos dirigirnos rpidamente hacia el objetivo descartando todos los caminos de mayor coste, en este extremo podramos encontrar nuestra solucin en tiempo lineal. En el otro extremo, si estuviramos en la total ignorancia, tendramos que explorar muchos caminos antes de hallar la solucin ptima, todos en el peor caso. Esta ltima situacin es en la que se encuentra la bsqueda no informada y desgraciadamente la primera situacin es rara. Quedar pues como labor fundamental en cada problema, obtener una funcin que nos haga el clculo del coste futuro desde un estado al estado solucin. Cuanto ms podamos ajustarlo al coste real, mejor funcionarn los algoritmos que veremos a continuacin.

3.3.

T primero y t despus

El fundamento de los algoritmos de bsqueda heurstica ser el cmo elegir que nodo explorar primero, para ello podemos utilizar diferentes estrategias que nos darn diferentes propiedades. Una primera estrategia que se nos puede ocurrir es utilizar la estimacin del coste futuro para decidir qu nodos explorar primero. De esta manera supondremos que los nodos que aparentemente estn ms cerca de la solucin formarn parte del camino hasta la solucin ptima y por lo tanto la encontraremos antes si los exploramos en primer lugar.

rst).

Esta estrategia se traduce en el algoritmo

primero el mejor avaricioso (greedy best

La nica diferencia respecto a los algoritmos que hemos visto es el utilizar como

estructura para almacenar los nodos abiertos una cola con prioridad. La prioridad de los nodos la marca la estimacin del coste del camino del nodo hasta el nodo solucin. El algoritmo es el siguiente:

3.4.

EL ALGORITMO A

19

Algoritmo
A c t u a l=

Greedy

Best

First inicial )

E s t _ a b i e r t o s . i n s e r t a r ( Estado

mientras no
( h i j o s= h i j o s=

Est_abiertos . primero ( ) e s _ f i n a l ?( Actual ) )

y no
(

Est_abiertos . vacia ? ( ) )

hacer

Est_abiertos . borrar_primero ( ) Est_cerrados . i n s e r t a r ( Actual ) generar_sucesores ( Actual ) tratar_repetidos ( Hijos , Est_cerrados , Est_abiertos )

Est_abiertos . i n s e r t a r ( Hijos )

fmientras fAlgoritmo

A c t u a l=

Est_abiertos . primero ( )

El explorar antes los nodos ms cercanos a la solucin probablemente nos har encontrarla antes, pero el no tener en cuenta el coste del camino recorrido hace que no se garantice la solucin ptima.

3.4.

El algoritmo A

Dado que nuestro objetivo no es slo llegar lo mas rpidamente a la solucin, sino encontrar la de menor coste tendremos que tener en cuenta el coste de todo el camino y no solo el camino por recorrer. Para poder introducir el siguiente algoritmo y establecer sus propiedades tenemos primero que dar una serie de deniciones. Denominaremos el

coste de un arco entre dos nodos ni y nj al coste del operador que


c(ni , nj ).

nos permite pasar de un nodo al otro, y no denotaremos como Denominaremos el

coste de un camino entre dos nodos ni y nj a la suma de los costes


j 1

de todos los arcos que llevan desde un nodo al otro y lo denotaremos como

C (ni , nj ) =
x= i
Denominaremos el

c(nx , nx+1 )
y

coste del camino mnimo entre dos nodos ni


l

nj

al camino de

menor coste de entre los que llevan desde un nodo al otro y lo denotaremos como

K (ni , nj ) = m n Ck (ni , nj )
k=1
Si

nj ni

es un nodo terminal, llamaremos

h(ni )
a

K (ni , nj ),

es decir, el coste del camino

mnimo desde un estado cualquiera a un estado solucin. Si es un nodo inicial, llamaremos

g (nj )

K (ni , nj ),

es decir, el coste del camino

mnimo desde el estado inicial a un estado cualquiera.

20

CAPTULO 3.

BSQUEDA HEURSTICA

Esto nos permite denir el coste del camino mnimo que pasa por cualquier nodo como una combinacin del coste del camino mnimo desde el nodo inicial al nodo mas el coste del nodo hasta el nodo nal:

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


Dado que el valor de

h(n)

lo desconocemos, lo substituiremos por una funcin que nos

lo aproximar, a esta funcin la denotaremos pasa por cierto nodo:

heurstica. De esta manera tendremos una estimacin del coste del camino mnimo que
f (n) = g (n) + h (n)
Ser este valor el que utilicemos para decidir en nuestro algoritmo de bsqueda cual es el siguiente nodo a explorar de entre todos los nodos abiertos disponibles. Para realizar esa bsqueda utilizaremos el algoritmo que denominaremos A :

h (n)

y le daremos el nombre de

funcin

Algoritmo
A c t u a l=

inicial )

E s t _ a b i e r t o s . i n s e r t a r ( Estado

mientras no
( h i j o s= h i j o s=

Est_abiertos . primero ( ) e s _ f i n a l ?( Actual ) )

y no
(

Est_abiertos . vacia ? ( ) )

hacer

Est_abiertos . borrar_primero ( ) Est_cerrados . i n s e r t a r ( Actual ) generar_sucesores ( Actual ) tratar_repetidos ( Hijos , Est_cerrados , Est_abiertos )

Est_abiertos . i n s e r t a r ( Hijos )

fmientras fAlgoritmo

A c t u a l=

Est_abiertos . primero ( )

Como se observar, el algoritmo es el mismo que el de

primero el mejor avaricioso,


f
los nodos con

lo nico que cambia es que ahora la ordenacin de los nodos se realiza utilizando el valor

. Como criterio de ordenacin, consideraremos que a igual valor de

ms pequea se explorarn antes (simplemente porque si la

es ms pequea es que

son nodos mas cerca de la solucin), a igual introdujeron en la cola.

se consideraran en el orden en el que se

Nunca est de ms el remarcar que el algoritmo slo acaba cuando se

extrae

una

solucin de la cola. Es posible que en cierto momento ya haya nodos solucin, pero hasta que no se hayan explorado los nodos por delante de ellos, no podemos asegurar que realmente sean soluciones buenas. Siempre hay que tener en mente que los nodos estn ordenados por el coste estimado del camino total, si la estimacin es menor es que podran pertenecer a un camino con una solucin mejor.

3.4.

EL ALGORITMO A

21

Hay que considerar que el coste de este algoritmo es tambin Si por ejemplo, la funcin

O(rp )

en el caso peor.

h (n)

fuera siempre 0, el algoritmo se comportara como una

bsqueda en anchura gobernada por el coste del camino recorrido. Lo que hace que este algoritmo pueda tener un coste temporal inferior es la bondad de la funcin

h.

De hecho, podemos interpretar las funciones

como las que gobiernan

el comportamiento en anchura o profundidad del algoritmo. Cuanto ms cercana a la realidad sea

h , mayor ser el comportamiento en profundidad

del algoritmo, pues los nodos que aparentemente estn mas cerca de la solucin se exploran antes. En el momento en el que esa informacin deje de ser able, el coste del camino ya explorado har que otros nodos menos profundos tengan un coste total mejor y por lo tanto se abrir la bsqueda en anchura. Si pensamos un poco en el coste espacial que tendr el algoritmo podemos observar que como ste puede comportarse como un algoritmo de bsqueda en anchura, el coste espacial p en el caso peor tambin ser O (r ). Igual que nos pasa con el coste temporal, si la funcin heurstica es sucientemente buena no llegaremos a necesitar tanto espacio antes de llegar a la solucin. 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 su posicin 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 insertndolo en la estructura de abiertos con el nuevo coste, no hacemos nada con sus sucesores, ya se reabrirn si hace falta

Si su coste es mayor o igual nos olvidamos del nodo

Mas adelante veremos que si la funcin el tratamiento de repetidos.

cumple ciertas condiciones podemos evitar

A continuacin podemos ver un pequeo ejemplo de ejecucin del algoritmo

Ejemplo 3.1 Si consideramos el grafo de bsqueda de la gura, donde en cada nodo tenemos descompuesto el coste en g y h y marcado el orden en el que el algoritmo ha visitado cada nodo:

22

CAPTULO 3.

BSQUEDA HEURSTICA

0+2

1+1

1+1

1+3

2+1

4 6

1+2

2+2

3+1

3+1

3+2

10
4+1 4+1 3+1 4+1

5+0 Objetivo

4+0 Objetivo

11

5+0 Objetivo

La numeracin en los nodos indica el orden en que el algoritmo A los ha expandido (y por lo tanto el orden en el que han sido extraidos de la cola). Podemos observar tambin que hay un nodo abierto que es revisitado por otro camino con 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 solucin. Hemos visto que en el caso degenerado tenemos una bsqueda en anchura guiada por el coste del camino explorado, eso nos debera garantizar el ptimo en este caso. Pero como hemos comentado, la funcin

nos permite obtener un comportamiento de bsqueda en

profundidad y sabemos que en este caso nada nos garantiza el ptimo. El saber si encontraremos o no el ptimo mediante el algoritmo

recae totalmente en

las propiedades que cumple la funcin heurstica, si esta cumple ciertos criterios sabremos que encontraremos la solucin ptima, si no los cumple, no lo podremos saber.

3.5.1. Admisibilidad
La propiedad clave que nos garantizar el hallar la solucin ptima es la que denominaremos

admisibilidad. Diremos que una funcin heurstica h

es admisible siempre que se

cumpla que su valor en cada nodo sea menor o igual que el valor del coste real del camino que nos falta por recorrer hasta la solucin:

n 0 h (n) h(n)

3.5.

PERO, ENCONTRAR EL PTIMO?

23

Esto quiere decir que la funcin heurstica ha de ser un estimador que falta para llegar a la solucin.

optimista

del coste

Ejemplo 3.2 Podemos ver en este ejemplo dos grafos de bsqueda, uno con una funcin admisible y otra que no lo es
1 A 2 B
(1+2)

5 C
(1+3)

D
(1+5)

3
(2+2)

6
(2+2)

(3+1)

(3+1)

I
(4+1)

8
(4+0)

Objetivo

En este primer caso, la funcin heurstica siempre es admisible, pero en la primera rama el coste es ms pequeo que el real, por lo que pierde cierto tiempo explorndola (el efecto en profundidad que hemos comentado), pero al nal el algoritmo pasa a la segunda rama hallando la solucin.
1 A 2 B
(1+2)

C
(1+4)

D
(1+5)

3
(2+2)

H
(2+0) Objetivo

4
(3+1)

(4+0) Objetivo

En este caso el algoritmo acabara al encontrar la solucin en G, a pesar de que haya

24

CAPTULO 3.

BSQUEDA HEURSTICA

una solucin con un coste ms pequeo en H, simplemente porque el coste estimado que da en el nodo D es superior al real.
Esta propiedad implica que, si podemos demostrar que la funcin de estimacin

que

utilizamos en nuestro problema la cumple, siempre encontraremos una solucin ptima. El problema radica en hacer esa demostracin, pues cada problema es diferente. Por ello, no podemos dar un mtodo general para demostrar la admisibilidad de una funcin heurstica. Lo que si podemos establecer es que para demostrar que una funcin heurstica

no es

admisible basta con encontrar un nodo que incumpla la propiedad. Esto se puede observar simplemente comprobando si alguno de los nodos que estn en el camino solucin tiene un coste mayor que el real, pues slo disponemos del coste real para los nodos de ese camino. Hay que remarcar tambin que la propiedad de admisibilidad es un propiedad de la funcin heurstica, no del algoritmo que la utiliza, por lo que si la funcin es admisible cualquier algoritmo de los que veamos que la utilice nos hallar la solucin ptima. Para una discusin sobre tcnicas para construir heursticos admisibles se puede cona sultar el captulo 4, seccin 4.2, del libro Inteligncia Articial: Un enfoque Moderno (2 edicin) de S. Russell y P. Norvig .

3.5.2. Consistencia
Podemos denir la propiedad de consistencia como una extensin de la propiedad de admisibilidad. Si tenemos el coste

h(ni )

y el coste

h(nj )

y el coste ptimo para ir de

ni

nj ,

o sea

K (ni , nj ),

se cumple la desigualdad triangular:

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


La condicin 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 uniforme de

es un estimador

h.
cualquier nodo es hemos llegado a l

Si h es consistente adems se cumple que el valor de g (n) para K (ni , nj ), por lo tanto, una vez hemos llegado a un nodo sabemos que

por el camino ptimo desde el nodo inicial. Si esto es as, no es posible que nos encontremos el mismo nodo por un camino alternativo con un coste menor y esto hace que el tratamiento de nodos cerrados duplicados sea innecesario, lo que nos ahorra tener que guardarlos.

3.6.

MI MEMORIA SE ACABA

25

3.5.3. Heurstico ms informado


Otra propiedad interesante es la que nos permite comparar heursticos entre si y nos permite saber cul de ellos hallar ms rpido la solucin. Diremos que el heurstico ms informado que el heurstico

h1

es

h2

si se cumple la propiedad:

n 0 h2 (n) < h1 (n) h(h)


Se ha de observar que esta propiedad incluye que los dos heursticos sean admisibles. Si un heurstico es mas informado que otro seguro que expandir menos nodos durante la bsqueda. Esto nos podra hacer pensar que siempre tenemos que escoger el heurstico ms informado. Hemos de pensar tambin que la funcin heurstica tiene un tiempo de clculo que afecta al tiempo de cada iteracin. Evidentemente, cuanto ms informado sea el heurstico, mayor ser ese coste. Nos podemos imaginar por ejemplo, que si tenemos un heurstico que necesita por ejemplo 10 iteraciones para llegar a la solucin, pero tiene un coste de 100 unidades de tiempo, tardar ms en llegar a la solucin que otro heurstico que necesite 100 iteraciones pero que solo necesite una unidad de tiempo por iteracin. Esto nos hace pensar que tenemos que encontrar un equilibrio entre el coste del clculo de la funcin heurstica y el nmero de expansiones que nos ahorramos al utilizarla. Es posible que una funcin heurstica peor nos acabe dando mejor resultado. Todo esto es evidentemente dependiente del problema, incluso nos podemos encontrar con que una funcin no admisible nos permita hallar mas rpidamente la solucin, a pesar de que no nos garantice la optimalidad.

3.6.

Mi memoria se acaba

El algoritmo A tiene sus limitaciones impuestas en primer lugar por poder acabar
degenerando en una bsqueda en anchura si la funcin heurstica no es demasiado buena. Adems, si la solucin del problema est a mucha profundidad o el tamao del espacio de bsqueda es muy grande, no hace falta mucho para llegar a necesidades de espacio prohibitivas. Esto nos lleva a plantearnos algoritmos alternativos con menores necesidades de espacio.

3.6.1. El algoritmo IDA


La primera solucin viene de la mano del algoritmo en profundidad iterativa que hemos visto en el captulo anterior. En este caso lo replanteamos para utilizar la funcin el valor que controla la profundidad a la que llegamos en cada iteracin.

como

26

CAPTULO 3.

BSQUEDA HEURSTICA

Esto quiere decir que hacemos la bsqueda imponiendo un lmite al coste del camino que queremos hallar (en la primera iteracin, la todos los nodos con

del nodo raz), explorando en profundidad

igual o inferior a ese lmite y reiniciando la bsqueda con un coste

mayor si no encontramos la solucin en la iteracin actual. El algoritmo es el siguiente :

Algoritmo mientras no
IDA ( A c t u a l= (

p r o f=f ' ( E s t a d o _ i n i c i a l ) e s _ f i n a l ?( Actual ) )

hacer y no
( Est_abiertos . vacia ? ( ) )

Est_abiertos . i n s e r t a r ( Estado_inicial )

mientras no
H i j o s= H i j o s=

Est_abiertos . primero ( ) e s _ f i n a l ?( Actual ) )

hacer

Est_abiertos . borrar_primero ( ) Est_cerrados . i n s e r t a r ( Actual ) g e n e r a r _ s u c e s o r e s ( Actual , tratar_repetidos ( Hijos , prof ) Est_abiertos )

Est_cerrados ,

Est_abiertos . i n s e r t a r ( Hijos )

fmientras fmientras fAlgoritmo


La funcin de la iteracin actual.

A c t u a l=

Est_abiertos . primero ( )

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

generar_sucesores

slo retorna los nodos con un coste inferior o igual al

Este algoritmo, al necesitar slo una cantidad de espacio lineal, permite hallar soluciones a ms profundidad. El precio que hemos de pagar es el de las reexpansiones de nodos ya visitados. Este precio extra dependender de la conectividad del grafo del espacio de estados, 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 bastante
el tiempo de bsqueda. Estas reexpansiones se deben fundamentalmente a que estamos imponiendo unas restricciones de espacio bastantes severas. Si relajaramos esta restriccin mantenindola en lmites razonables podramos guardar informacin suciente para no tener que realizar tantas reexpansiones.

rst ).

Una primera alternativa es el algoritmo

primero el mejor recursivo (recursive best

El elemento clave es la implementacin recursiva, que permite que el coste espacial

algoritmo admite varias optimizaciones, como no aumentar el coste de uno en uno, sino averiguar cual es el coste ms pequeo de los nodos no expandidos en la iteracin actual y usarlo en la siguiente iteracin.

1 Este

3.6.

MI MEMORIA SE ACABA

27

se mantenga lineal (O (rp)) al no tener que guardar mas que los nodos que pertenecen al camino actual y sus hermanos en cada nivel. Este algoritmo intenta avanzar siempre por la rama ms prometedora (segn la funcin heurstica

) hasta que alguno de los nodos alternativos del camino tiene un coste mejor.

En este momento el camino del nodo actual es olvidado, pero modicando la estimacin de los ascendientes con la del nodo mas profundo al que se ha llegado. Manteniendo esta informacin sabremos si hemos de volver a regenerar esa rama olvidada si pasa a ser la de mejor coste. El algoritmo es el siguiente:

Algoritmo si si no si

BFS

r e c u r s i v o

( nodo ,

e s _ s o l u c i o n ? ( nodo )

entonces

c_alternativo ,

ref

nuevo_coste , r e f

solucion )

s o l u c i o n . a n a d i r ( nodo )

s u c e s o r e s=

g e n e r a _ s u c e s o r e s ( nodo )

sucesores . vacio ?()

entonces

n u e v o _ c o s t e= +i n f i n i t o

si no mientras no si
f i n=f a l s o ( m e j o r=

solucion . vacio ()

fin

hacer
> c_alternativo

s u c e s o r e s . mejor_nodo ( )

mejor . c o s t e ( )

entonces

f i n=c i e r t o solucion . vacio ()

si no

n u e v o _ c o s t e=m e j o r . c o s t e ( )

s e g u n d o=s u c e s o r e s . s e g u n d o _ m e j o r _ n o d o ( ) BFS

r e c u r s i v o ( m e j o r

, min ( c _ a l t e r n a t i v o ,

segundo . c o s t e ( ) ) , solucion )

si si no fsi fsi fmientras fsi fsi fAlgoritmo

solucion . vacio ?()

entonces

nuevo_coste ,

mejor . c o s t e ( nuevo_coste )

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

cillo, en cada nodo aparece el valor de la funcin f :

Ejemplo 3.3 En la gura se puede ver como evoluciona la bsqueda en un ejemplo sen-

28

CAPTULO 3.

BSQUEDA HEURSTICA

1 2

1 2
12 18 8 12

18

12

18

3
18 11 19 18 11 19

17

20

1 2
18 8 12 18 17

1 2
12

1 4
18 17

5
20

6
18 17 19 20 21 18 11 19

7
17 20

8
17

Podemos ver que cuando llega a la tercera iteracin el nodo con mejor coste es el de 12 y por lo tanto la recursividad vuelve hasta ese nodo borrando la rama explorada, pero actualizando cada padre con el mejor coste encontrado, en este caso 17. En la cuarta iteracin se encuentra que ahora es el nodo con coste 17 el de mejor coste, por lo que el camino vuelve a regenerarse.
Por lo general, el nmero de reexpansiones de este algorimo es menor que el de IDA ,
pero puede depender de las caractersticas del espacio de bsqueda como por ejemplo la longitud de los ciclos que pueda haber. Este algoritmo tambin impone un coste lineal al espacio, por lo que tambin se generan bastantes reexpansiones.

Otra alternativa diferente viene de una modicacin del A , es el algoritmo llamado ( ). Este algoritmo utiliza la estrategia de exploracin de A pero siguiendo una estrategia de memorizacin de caminos parecida

A con memoria limitada memory bound A

al

best rst recursivo. ste almacena todos los caminos que le caben en el tamao de

memoria que se impone y no solo el actual, de manera que se ahorra regenerar ciertos caminos. Cuanta ms memoria permitamos, menos regeneraciones de caminos haremos. El algoritmo elimina los caminos peores en el momento en el que ya no caben ms, guardando en los nodos la informacin suciente que le permita saber cuando se han de regenerar. El aporte extra de memoria permite reducir bastante las reexpansiones, con el consiguiente ahorro de tiempo. El algoritmo es capaz de hallar una solucin si el camino completo cabe en la cantidad de

3.6.

MI MEMORIA SE ACABA

29

memoria que hemos impuesto. Esto quiere decir que si tenemos una idea aproximada de la longitud de la solucin podemos ajustar a priori la cantidad de memoria que permitiremos usar al algoritmo.

30

CAPTULO 3.

BSQUEDA HEURSTICA

Captulo 4 Bsqueda local


4.1. El tamao importa, a veces

Los algoritmos que hemos visto en el capitulo anterior nos sirven siempre que podamos plantear el problema como la bsqueda de un camino en un espacio de estados. Pero nos podemos encontrar con problemas en los que: Este planteamiento es demasiado articial, ya que no tenemos realmente operadores de cambio de estado, o no hay realmente una nocin de coste asociada a los operadores del problema La posibilidad de hallar la solucin ptima est fuera de toda posibilidad, dado que el tamao del espacio de bsqueda es demasiado grande y nos conformamos con una solucin que podamos considerar buena. En este tipo de problemas puede ser relativamente fcil hallar una solucin inicial, aunque no sea demasiado buena. Esto hace que nos podamos plantear el problema como una bsqueda 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 posibles soluciones realizando operaciones sobre ellas que nos pueden ayudar a mejorarlas. El coste de estas operaciones no ser relevante ya que lo que nos importa es la calidad de la solucin , en este caso lo que nos importar es esa la calidad. Deberemos disponer de una funcin que segn algn criterio (dependiente del dominio) nos permita ordenarlas. El planteamiento de los problemas es parecido al que consideramos al hablar del espacio de estados, tenemos los siguientes elementos: Un estado inicial, que en este caso ser una solucin inicial y que nos plantear el problema adicional de como hallarla con un coste bajo.

hecho muchas veces estas operaciones no se reeren a operaciones reales en el problema, sino a formas de manipular la solucin.
31

1 De

32

CAPTULO 4.

BSQUEDA LOCAL

Unos operadores de cambio de la solucin, que en este caso manipularn soluciones completas y que no tendrn un coste asociado. Una funcin de calidad, que nos medir lo buena que es una solucin y nos permitir guiar la bsqueda, pero teniendo en cuenta que este valor no nos indica cuanto nos falta para encontrar la solucin que buscamos.

El saber cuando hemos acabado la bsqueda depender totalmente del algoritmo, que tendr que decidir cuando ya no es posible encontrar una solucin mejor. Por lo tanto no tendremos un estado nal denido. Para buscar una analoga con un tema conocido, se puede asimilar la bsqueda local con la bsqueda de ptimos en funciones. En este caso la funcin a optimizar ser la funcin de calidad de la solucin, la funcin se denir en el espacio de soluciones generado por la conectividad que inducen los operadores. Desafortunadamente, las funciones que aparecern no tendrn una expresin analtica global, ni tendrn las propiedades que nos permitiran aplicar los algoritmos conocidos de bsqueda de ptimos en funciones que conocis. El planteamiento ser pues bastante diferente. Ya que no tenemos una expresin analtica global, deberemos explorar la funcin de calidad utilizando solamente lo que podamos obtener de los vecinos de una solucin, sta deber permitir decidir por donde seguir buscando el ptimo. El nombre de bsqueda local viene precisamente de que slo utilizamos informacin local durante el proceso de hallar la mejor solucin.

4.2.

Tu s, vosotros no

Enfrentados a problemas con tamaos de espacio de bsqueda inabordables de manera exhaustiva, nos hemos de plantear estrategias diferentes a las utilizadas hasta ahora. En primer lugar, tendremos pocas posibilidades de guardar informacin para recuperar caminos 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 sin volver a considerarlos.

branch and bound).

Esto nos lleva a la familia de algoritmos conocida como de

ramicacin y poda

Esta familia de algoritmos limita el nmero de elementos que

guardamos como pendientes de explotar olvidando los que no parecen prometedores. Estos algoritmos permiten mantener una memoria limitada, ya que desprecian parte del espacio de bsqueda, pero se arriesgan a no hallar la mejor solucin, ya que esta puede estar en el espacio de bsqueda que no se explora.

ascenso de colinas (Hill-climbing). Existen diferentes variantes que tienen sus ventajas
e inconvenientes.

De entre los algoritmos de

ramicacin y poda, los ms utilizados son los denominados de

4.2.

TU S, VOSOTROS NO

33

Por ejemplo, el denominado

ascenso de colinas simple, que consiste en elegir siempre

el primer operador que suponga una mejora respecto al nodo actual, de manera que no exploramos todas las posibilidades accesibles, ahorrandonos el explorar cierto nmero de descendientes. La ventaja es que es ms rpido que explorar todas las posibilidades, la desventaja es que hay ms probabilidad de no alcanzar las soluciones mejores. El ms utilizado es el ascenso de colinas por mxima pendiente (steepest ascent hill climbing). Esta variante expande todos los posibles descendientes de un nodo y elige el que suponga la mxima mejora respecto al nodo actual. Con esta estrategia suponemos que la mejor solucin la encontraremos a travs del sucesor que mayor diferencia tenga respecto a la solucin actual, siguiendo una poltica avariciosa. Como veremos ms adelante esta estrategia puede ser arriesgada. El algoritmo que implementa este ltimo es el siguiente:

Algoritmo
A c t u a l= fin = H i j o s=

Hill

Climbing

Estado_inicial

mientras no
(

falso

fin )

hacer entonces
Actual ) Escoger_mejor ( H i j o s ) A c t u a l=

generar_sucesores ( Actual ) ordenar_y_eliminar_peores ( Hijos , vacio ?( h i j o s )) f i n=c i e r t o

si no si no fmientras fAlgoritmo
(

H i j o s=

En este algoritmo la utilizacin de memoria es nula, ya que slo tenemos en cuenta el nodo mejor . Se pueden hacer versiones que guarden caminos alternativos que permitan una vuelta atrs en el caso de que consideremos que la solucin a la que hemos llegado no es sucientemente buena, pero hemos de imponer ciertas restricciones de memoria si no queremos tener un coste espacial demasiado grande. Comentaremos estos algoritmos ms adelante. La estrategia de este algoritmo hace que los problemas que tiene, vengan principalmente derivados por las caractersticas de las funciones heursticas que se utilizan. Por un lado, hemos de considerar que el algoritmo parar la exploracin en el momento en el que no se encuentra ningn nodo accesible mejor que el actual. Dado que no mantenemos memoria del camino recorrido nos ser imposible reconsiderar nuestras decisiones, de modo que si nos hemos equivocado, la solucin a la que llegaremos puede que no sea la ptima. Esta circunstancia es probable, ya que seguramente la funcin heurstica que utilicemos tendr ptimos locales y, dependiendo de por donde empecemos a buscar, acabaremos encontrando uno u otro, como se puede ver en la siguiente gura:

que recordar que en este tipo de bsqueda el camino no nos importa, por lo que el gasto en espacio es constante.

2 Hay

34

CAPTULO 4.

BSQUEDA LOCAL

max max

Si iniciamos la bsqueda desde el punto A o el B el mximo que alcanzaremos ser diferente. Esta circunstancia se puede mejorar mediante la ejecucin del algoritmo cierto nmero de veces desde distintos puntos escogidos aleatoriamente y quedndonos con la mejor exploracin. Mucha veces esta estrategia es ms efectiva que mtodos ms complejos que veremos a continuacin y resulta bastante barata. La nica complicacin est en poder generar los distintos puntos iniciales de bsqueda, ya que en ocasiones el problema no permite hallar soluciones iniciales con facilidad. Otro problema con el que se encuentran estos algoritmos son zonas del espacio de bsqueda en las que la funcin heurstica no es informativa. Un ejemplo son las denominadas mesetas y las funciones en escaln, como las de la gura siguiente, en las que los valores de los nodos vecinos al actual tienen valores iguales, y por lo tanto una eleccin local no nos permite decidir el camino a seguir.

Evitar estos problemas requiere extender la bsqueda a ms all de los vecinos inmediatos para obtener la informacin suciente para encaminar la bsqueda. Desgraciadamente esto supone un coste adicional en cada iteracin. Una alternativa es permitir que el algoritmo guarde parte de los nodos visitados para proseguir la bsqueda por ellos en el caso de que el algoritmo se que de atascado en un ptimo local. El algoritmo ms utilizado es el denominado

search).

busqueda en haces (beam


N N

En este algoritmo se van guardando un nmero

de las mejores soluciones,

expandiendo siempre la mejor de ellas. De esta manera no se sigue un solo camino sino Las variantes del algoritmo estn en cmo se escogen esas tienen. Si siempre se substituyen las peores soluciones de las

N.

soluciones que se man-

por los mejores sucesores

del nodo actual caemos en el peligro de que todas acaben estando en el mismo camino, reduciendo la capacidad de volver hacia atrs, as que el poder mantener la variedad de las

4.3.

DEMASIADO CALOR, DEMASIADO FRO

35

soluciones guardadas es importante. Est claro que cuantas mas soluciones guardemos ms posibilidad tendremos de encontrar una buena solucin, pero tendremos un coste adicional tanto en memoria como en tiempo, ya que tendremos que calcular con que sucesores nos quedamos y que soluciones guardadas substituimos. El algoritmo sera el siguiente

Algoritmo
fin =

Beam

Search Estado_inicial

S o l u c i o n e s _ a c t u a l e s=

mientras no
( H i j o s=

falso

fin )

hacer entonces
soluciones_actuales )

generar_sucesores ( Actual ) escoger_mejores ( Hijos ,

si si no fmientras fAlgoritmo

H i j o s=

algun_cambio ? ( h i j o s )

A c t u a l=E s c o g e r _ m e j o r ( S o l u c i o n e s _ a c t u a l e s ) f i n=c i e r t o

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 fro

Se han planteado algoritmos alternativos de bsqueda local que se han mostrado efectivos en algunos dominios en los que los algoritmos de bsqueda por ascenso se quedan atascados enseguida en ptimos no demasiado buenos.

ling). Este algoritmo est inspirado en un fenmeno fsico que se observa en el templado
de metales y en la cristalizacin de disoluciones. Todo conjunto de tomos o molculas tiene un estado de energa que depende de cier-

El primero que veremos es el denominado

templado simulado (simulated annea-

ta funcin de la temperatura del sistema. A medida que lo vamos enfriando, el sistema va perdiendo energa hasta que se estabiliza. El fenmeno fsico que se observa es que dependiendo de como se realiza el enfriamiento, el estado de energa nal es muy diferente. Si una barra de metal se enfra demasiado rpido la estructura cristalina a la que se llega al nal es muy frgil y sta se rompe con facilidad. Si el enfriamiento se realiza ms lentamente el resultado nal es totalmente diferente obteniendo una barra de gran dureza. Durante este enfriamiento controlado, se observa que la energa del conjunto de tomos no disminuye de manera constante, sino que a veces la energa total puede ser mayor que en un momento inmediatamente anterior. Esta circunstancia hace que el estado de energa nal que se alcanza sea mejor que cuando el enfriamiento se hace rpidamente. A partir

36

CAPTULO 4.

BSQUEDA LOCAL

de este fenmeno fsico, podemos derivar un algoritmo que permitir en ciertos problema hallar soluciones mejores que los algoritmos de bsqueda por ascenso. En este algoritmo el nodo siguiente a explorar no ser siempre el mejor descendiente, sino que lo elegiremos aleatoriamente en funcin de los valores de unos parmetros entre todos los descendientes (los buenos y los malos). Una ventaja de este algoritmo es que no tenemos por que generar todos los sucesores de un nodo, basta elegir un sucesor al azar y decidir si continuamos por l o no. El algoritmo de templado simulado se puede ver como una versin estocstica del algoritmo de bsqueda por ascenso. El algoritmo de templado simulado intenta transportar la analoga fsica al problema que queremos solucionar. En primer lugar denominaremos funcin de que denominaremos goritmo. Tendremos una funcin que depender de la temperatura y de la diferencia de calidad entre el nodo actual y un sucesor. sta gobernar la eleccin de los sucesores, su comportamiento ser el siguiente:

energa a la funcin

heurstica que nos mide la calidad de una solucin. Tendremos un parmetro de control

temperatura, que nos permitir controlar el funcionamiento del al-

Cuanta mayor sea la temperatura mas probabilidad habr de que un estado peor sea elegido La eleccin de un estado peor estar en funcin de su diferencia de calidad con el estado actual, cuanta mas diferencia, menos probabilidad de elegirlo.

El ltimo elemento es la

estrategia de enfriamiento. El algoritmo realizar un ntemperatura inicial


y llegando a

mero total de iteraciones jo y cada cierto nmero de ellas el valor de la temperatura disminuir en cierta cantidad, partiendo desde una cero en la ltima fase. De manera que, la eleccin de estos dos parmetros (nmero total de iteraciones y nmero de iteraciones entre cada bajada de temperatura) determinarn el comportamiento del algoritmo. Habr que decidir la temperatura inicial y en que cantidad se va disminuyendo. Como en la analoga fsica, si el nmero de pasos es muy pequeo la temperatura bajar muy rpidamente y el camino explorado ser relativamente aleatorio. Si el nmero de pasos es ms grande la bajada de temperatura ser ms suave y la bsqueda ser mejor. El algoritmo que implementa esta estrategia es el siguiente:

Algoritmo mientras para si


Partimos /

Simulated de la una

Annealing

temperatura

temperatura aleatorio

no

inicial sea cero

hacer
de >0

Paseo un

por

el de

espacio

numero

prefijado

iteraciones

Enuevo=G e n e r a m o s _ s u c e s o r ( E a c t u a l ) F( f ' ( E a c t u a l )

f ' ( Enuevo ) , T)

hacer entonces

soluciones

E a c t u a l=Enuevo

fsi

4.4.

CADA OVEJA CON SU PAREJA

37

fpara fmientras fAlgoritmo

Disminuimos

la

temperatura

Este algoritmo se adapta muy bien a problemas de optimizacin combinatoria (conguracin 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 ptimos locales, ya que a este algoritmo le ser ms fcil escapar de ellos. Se puede utilizar tambin para problemas en los que encontrar una heurstica discriminante es difcil (una eleccin aleatoria es tan buena como otra cualquiera), ya que el algoritmo de ascenso de colinas no tendr mucha informacin con la que trabajar y se quedar atascado enseguida. En cambio el templado simulado podr explorar ms espacio de soluciones y tendr mayor probabilidad de encontrar una solucin buena. El mayor problema de este algoritmo ser determinar los valores de los parmetros, y requerir una importante labor de experimentacin que depender de cada problema.

4.4.

Cada oveja con su pareja

Otra analoga que ha dado lugar un conjunto de algoritmos de bsqueda local bastante efectivos es la seleccin natural como mecanismo de adaptacin de los seres vivos. Esta analoga se ja en que los seres vivos se adaptan al entorno gracias a las caractersticas heredadas de sus progenitores, en que las posibilidades de supervivencia y reproduccin son proporcionales a la bondad de esas caractersticas y en que la combinacin de buenos individuos puede dar lugar a individuos mejor adaptados. Podemos trasladar estos elementos a la bsqueda local identicando las soluciones con individuos, donde una funcin de calidad indicar la bondad de la solucin, es decir, su adaptacin a las caractersticas del problema. Dispondremos de unos operadores de bsqueda que combinarn buenas soluciones con el objetivo de obtener soluciones mejores como resultado.

genticos

El ejemplo que veremos de algoritmos que utilizan esta analoga es el de los

algoritmos

. Se trata de una familia bastante amplia de algoritmos, nosotros slo veremos

el esquema bsico. Estos algoritmos son bastante ms complejos que los algoritmos que hemos visto y requieren ms elementos y parmetros, por lo que su utilizacin requiere cierta experiencia y mucha experimentacin. Los requisitos bsicos para usarlos son: Dar una codicacin a las caractersticas de las soluciones. Las soluciones se representan de una manera especial para que despus se puedan combinar. Por lo general

tambin los denominados algoritmos evolutivos, son menos conocidos, pero suelen ser bastante efectivos en ciertas aplicaciones.

3 Existen

38

CAPTULO 4.

BSQUEDA LOCAL

se utilizan cadenas binarias que codican los elementos de la solucin, por analoga a esta codicacin se la denomina

gen4 .

Tener una funcin que mida la calidad de la solucin. Se tratar de la funcin heurstica que se utiliza en todos los algoritmos que hemos visto. En el rea de algoritmos genticos a esta funcin se la denomina

funcin de adaptacin (tness).

Disponer de operadores que combinen las soluciones para obtener nuevas soluciones. Los operadores que utilizan los algoritmos genticos son bastante jos y estn inspirados en las formas de reproduccin celular. Decidir el nmero de individuos inicial. Un algoritmo gentico no trata un solo individuo, sino una poblacin, se ha de decidir cuan numerosa ha de ser. Decidir una estrategia para hacer la combinacin de individuos. Siguiendo la analoga de la seleccin natural, slo se reproducen los individuos ms aptos, hemos de decidir un criterio para emparejar a los individuos de la poblacin en funcin de su calidad.

Vamos a detallar un poco ms cada uno de estos elementos.

4.4.1. Codicacin
Como hemos mencionado, la forma ms habitual de codicar los individuos para utilizar un algoritmo gentico es transformarlos a una cadena de bits. Cada bit o grupo de bits codicar una caracterstica de la solucin. Evidentemente, no existe un criterio preestablecido sobre como realizarlo. La ventaja de esta codicacin es que los operadores de modicacin de la solucin son muy sencillos de implementar. En la siguiente gura se puede ver un ejemplo de codicacin para el problema de las N reinas siendo N igual a 4:

0 1 2 3

[00 11 10 01]

[0,3,2,1]

En la codicacin binaria se ha asignado una pareja de bits a cada una de las reinas, representando la la en la que estn colocadas y se han concatenado. Alternativamente se podra utilizar una representacin no binaria utilizando simplemente el nmero de la y haciendo una lista con los valores.

no tiene por que ser siempre la representacin ms adecuada y de hecho a veces una representacin binaria hace que el problema no se pueda solucionar ecientemente.

4 Esta

4.4.

CADA OVEJA CON SU PAREJA

39

Como se ha comentado, no siempre la codicacin binaria es la ms adecuada, ya que las caractersticas del problema pueden hacer que el cambio de representacin haga ms complicado el problema. Una ventaja de la codicacin binaria es que nos da una aproximacin del tamao del espacio de bsqueda, ya que el nmero de soluciones posibles corresponder al mayor nmero binario que podamos representar con la codicacin.

4.4.2. Operadores
Los operadores que utilizan estos algoritmos para la exploracin del espacio de bsqueda se pueden agrupar en dos tipos bsicos. Los operadores de

mutacin (mutation).

cruce (crossover)

y los de

Los operadores de cruce se aplican a una pareja de individuos, su efecto consiste en intercambiar parte de la informacin de la codicacin entre los individuos. Existe una gran variedad de formas en las que se puede realizar este intercambio. La ms sencilla es la denominada

cruce por un punto (one point crossover). Se aplica slo a codicaciones

binarias, este operador consiste en elegir un punto al azar en la codicacin e intercambiar los bits de los dos individuos a partir de ese punto. En la siguiente gura hay un ejemplo de 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 los bits entre esos dos puntos.

cruce por dos puntos (two points cross over),

en el que el intercambio se realiza eligiendo dos puntos en la codicacin e intercambiando

Aparte de estos dos operadores existen muchos otros que tienen efectos especcos y que funcionan mejor en ciertas circunstancias. Si la codicacin no es binaria los operadores se han de disear de manera especca para la representacin escogida. Los operadores de mutacin se aplican a un slo individuo y consisten en cambiar parte de la codicacin de manera aleatoria. El ms sencillo es elegir un bit al azar y cambiar su signo. Estos operadores tienen una probabilidad de aplicacin asociada que ser un parmetro del algoritmo. Tendremos una probabilidad de cruce que indicar cuando una pareja elegida de individuos intercambia su informacin y una probabilidad de mutacin. Por lo general la

40

CAPTULO 4.

BSQUEDA LOCAL

probabilidad de mutacin es mucho ms pequea que la probabilidad de cruce. La eleccin de estos valores es crtica para el correcto funcionamiento del algoritmo y muchas veces depende del problema.

4.4.3. Combinacin de individuos


Estos algoritmos no tratan las soluciones de manera individual, sino en grupo. Denominaremos

poblacin al conjunto de soluciones que tenemos en un momento especco. El

efecto de mantener un conjunto de soluciones a la vez es hacer una exploracin en paralelo del espacio de bsqueda desde diferentes puntos. Un parmetro ms que deberemos decidir es el tamao de la poblacin de soluciones. Est claro que si el nmero de individuos es demasiado grande el coste por iteracin puede ser prohibitivo, pero si el tamao es demasiado pequeo es posible que no lleguemos a una solucin demasiado buena. Cada iteracin de un algoritmo genrico es denominada una

generacin, a cada gene-

racin los individuos se emparejan y dan lugar a la siguiente generacin de individuos. Es clave la manera en la que decidimos como se emparejan los individuos.

generacin intermedia que estar compuesta por las parejas que se van a combinar. El
nmero de individuos de esta poblacin es igual al del tamao original de la poblacin. La de muchas maneras, por ejemplo:

La forma habitual de pasar de una generacin a otra, es crear lo que se denomina una

eleccin de los individuos que forman parte de esta generacin intermedia se puede hacer

Escoger un individuo de manera proporcional a su valor de evaluacin de la funcin de tness, de manera que los individuos mejores tendrn ms probabilidad de ser elegidos. Esto puede tener el peligro de que unos pocos individuos pueden ser elegidos muchas veces. Se establecen N torneos entre parejas de individuos escogidas al azar, el ganador de cada emparejamiento es el individuo con mejor valor en la funcion de tness. Esta opcin equilibra mejor la aparicin de los mejores individuos. Se dene un ranking lineal entre individuos segn su funcin de calidad, estableciendo un maximo de posibles apariciones de un individuo, de esta manera que la probabilidad de aparicin de los individuos no est sesgada por los individuos mejores.

Con estos mecanismos de eleccin habr individuos que aparezcan ms de una vez e individuos que no aparezcan . Cada mecanismo de seleccin de individuos tiene sus ventajas e inconvenientes. El primero es el ms simple, pero corre el peligro de degenerar en pocas

reeja lo que sucede en la seleccin natural, los ms aptos tienen una mayor probabilidad de tener descendencia y los menos aptos pueden no llegar a reproducirse.

5 Esto

4.4.

CADA OVEJA CON SU PAREJA

41

generaciones a una poblacin homognea, acabando en un ptimo local. Los otros dos son algo ms complejos, pero aseguran cierta diversidad de individuos en la poblacin. Se ha visto experimentalmente que el asegurar la variedad en la poblacin permite encontrar mejores soluciones .

4.4.4. El algoritmo gentico cannico


Existe una gran variedad de algoritmos genticos, pero todos parten de un funcionamiento bsico que llamaremos el algoritmo bsico son estos:

algoritmo gentico cannico, los pasos que realiza este

1. Se parte de una poblacin de N individuos generada aleatoriamente

2. Se escogen N individuos de la generacin actual para la generacin intermedia (segn el criterio escogido)

3. Se emparejan los individuos y para cada pareja

a)

Con una probabilidad con una probabilidad generacin

Pcruce

se aplica el operador de cruce a cada pareja de inse mantienen la pareja original en la siguiente

dividuos y se obtienen dos nuevos individuos que pasarn a la nueva generacin,

1 Pcruce Pmutacion

b)

Con una probabilidad

se mutan los individuos cruzados

4. Se substituye la poblacin actual con los nuevos individuos, que forman la nueva generacin

5. Se itera desde el segundo paso hasta que la poblacin converge (la funcin de tness de la poblacin no mejora) o pasa un nmero especco de generaciones

La probabilidad de cruce inuir en la variedad de la nueva generacin, cuanto ms baja sea, ms parecida ser a la generacin anterior y harn falta ms iteraciones para converger. Si sta es muy alta cada generacin ser muy diferente, por lo que puede degenerar en una bsqueda aleatoria. La mutacin es un mecanismo para forzar la variedad en la poblacin, pero una probabilidad de mutacin demasiado alta puede dicultar la convergencia.

es algo que se observa en la naturaleza, las poblaciones aisladas o las especies muy especializadas tienen un pobre acervo gentico y no pueden adaptarse a cambios en su entorno.

6 Tambin

42

CAPTULO 4.

BSQUEDA LOCAL

4.4.5. Cuando usarlos


Los algoritmos genticos han demostrado su ecacia en mltiples aplicaciones, pero es difcil decir si sern efectivos o no en una aplicacin concreta. Por lo general suelen funcionar mejor que los algoritmos de bsqueda por ascenso cuando no se tiene una buena funcin heurstica para guiar el proceso. Pero si se dispone de una buena heurstica, estos algoritmos no nos obtendrn mejores resultados y el coste de congurarlos adecuadamente no harn rentable su uso. Sus mayor inconveniente es la gran cantidad de elementos que hemos de ajustar para poder aplicarlos, la codicacin del problema, el tamao de la poblacin, la eleccin de los operadores, las probabilidades de cruce y mutacin, la forma de construir la siguiente generacin, ... Siempre nos encontraremos con la duda de si el algoritmo no funciona porque el problema no se adapta al funcionamiento de estos algoritmos, o es que no hemos encontrado los parmetros adecuados para hacer que funcionen bien.

Captulo 5 Bsqueda con adversario


5.1. T contra mi o yo contra ti

Hasta ahora habamos supuesto problemas en los que un solo

agente

intenta obtener

un objetivo, en nuestro caso la resolucin de un problema. Pero existen casos en los que diferentes agentes compiten por un objetivo que solamente uno de ellos puede alcanzar. Este tipo de problemas los englobaremos dentro de la categora de juegos . No veremos algoritmos para cualquier tipo de juego, sino que nos restringiremos a los que cumplen un conjunto de propiedades:

Son bipersonales, es decir, slo hay dos agentes involucrados, y estos juegan alternativamente. Todos los participantes tienen conocimiento perfecto, no hay ocultacin de informacin 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 de manera parecida a la bsqueda en espacio de estados, tendremos:

Un estado, que indica las caractersticas del juego en un instante especco Un estado inicial, que determinar desde donde se empieza a jugar y quin inicia el juego Un estado nal, o unas caractersticas que debe cumplir, que determinarn quin es el ganador

competicin no solamente aparece en el caso de los juegos, pero los algoritmos que veremos tambin son aplicables.
43

1 La

44

CAPTULO 5.

BSQUEDA CON ADVERSARIO

Unos operadores de transformacin de estado que determinarn las jugadas que puede hacer un agente desde el estado actual. Supondremos que los dos jugadores disponen de los mismos operadores

Identicaremos a cada jugador como el jugador

MAX y el jugador MIN. MAX ser


2

el jugador que inicia el juego, nos marcaremos como objetivo el encontrar el conjunto de movimientos que ha de hacer el jugador MAX para que llegue al objetivo (ganar) independientemente de lo que haga el jugador MIN . Se puede observar que este escenario es bastante diferente del que se plantean los algoritmos de los capitulos anteriores. Nos veremos obligados a revisar el concepto de solucin y de ptimo. De hecho estamos pasando de un escenario en el que poseemos todo el conocimiento necesario para resolver un problema desde el principio hasta el n sin tener que observar la reaccin del entorno, a un escenario donde nuestras decisiones se ven inuidas por el entorno. En los algoritmos que veremos supondremos que podemos prever hasta cierto punto como reaccionar ese entorno, pero evidentemente no siempre tendr por que ser ese el caso.

5.2.

Una aproximacin trivial

Para poder obtener el camino que permite a MAX llegar a un estado ganador, no tenemos ms que explorar todas las posibles jugadas que puede hacer cada jugador, hasta encontrar un camino que lleve a un estado nal. Para poder obtenerlo podemos utilizar un algoritmo de bsqueda en profundidad que explore exhaustivamente todas las posibilidades. El algoritmo explorar hasta llegar a una solucin evalundola a +1 si es un estado en el que gana MAX o a -1 si es un estado en el que gana MIN, este valor se propagar hasta el nivel superior. A medida que se acaben de explorar los descendientes de un nivel el valor resultante de su exploracin se seguir propagando a los niveles superiores. Cada nivel elegir el valor que propaga a su ascendiente dependiendo de si corresponde a un nivel del jugador MAX o del jugador MIN. En los niveles de MAX se elegir el valor mayor de todos los descendientes, en los niveles de MIN se elegir el mnimo. En el momento en el que se propague un +1 a la raz signicar que hemos encontrado el camino que permite ganar a MAX independientemente de las jugadas de MIN. En este momento podemos parar la exploracin ya que hemos cubierto su objetivo, encontrar una secuencia de pasos ganadora. En la siguiente gura podemos ver el espacio de bsqueda que generara un juego hipottico (los cuadrados corresponden a niveles de MAX y los crculos a niveles de MIN), se han marcado con

+1

las jugadas en las que gana el jugador MAX y con

las jugadas

en la que gana el jugador MIN:

es que nos caiga mal el jugador MIN, lo que pasa es que los algoritmos sern los mismos para los dos, ya que desde la perspectiva de MIN, l es MAX y su oponente es MIN.

2 No

5.2.

UNA APROXIMACIN TRIVIAL

45

+1

+1

+1

+1

Si hacemos el recorrido en profundidad propagando los valores de las jugadas terminales tendramos el siguiente resultado:

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

Podemos ver marcado el camino que permite ganar a MAX. Desgraciadamente este algoritmo slo lo podemos aplicar a juegos triviales, ya que el tiempo que necesitariamos para hacer la exploracin completa sera exponencial respecto p al nmero de posibles jugadas en cada nivel (r ) y la profundidad de la solucin (p) (O (r )). En cualquier juego real este valor es una cifra astronmica.

46

CAPTULO 5.

BSQUEDA CON ADVERSARIO

5.3.

Seamos un poco ms inteligentes

Es evidente que no podemos explorar todo el espacio de bsqueda para obtener el mejor conjunto de jugadas, as que debemos de echar mano del conocimiento que tenemos del juego para reducir la exploracin. Tendremos que introducir una funcin heurstica que en este caso no medir la bondad de un estado respecto a su distancia hasta una jugada ganadora. La losofa de esta funcin heurstica es diferente de las que hemos visto hasta ahora, ya que no existe ninguna nocin de coste, ni tampoco de optimalidad, pues todas las jugadas ganadoras son igual de buenas. Esto har que construir esta funcin sea todava mas difcil que en las ocasiones anteriores, habr que determinar cul es la ventaja de cada jugador en cada estado

y esto puede ser bastante difcil de determinar. Tambin hemos de tener en

cuenta que el coste de calcular la funcin heurstica inuir en el coste de la exploracin. En este caso, esta funcin nos podr dar valores positivos y negativos. Consideraremos que si el valor es positivo la jugada es ventajosa para el jugador MAX, y si es negativo la ventaja es para MIN. Por convenio, las jugadas ganadoras de MAX tienen un valor de y las ganadoras de MIN de

Adems de utilizar una funcin heurstica para guiar la bsqueda, usaremos una estrategia distinta para explorar el conjunto de jugadas. Ya que es imposible hacer una exploracin exhaustiva, haremos una bsqueda en profundidad limitada, esto limitar lo que podremos ver del espacio de bsqueda. Decidiremos un nivel de profundidad mximo para la bsqueda, evaluaremos los estados que estn en ese nivel y averiguaremos cul es la mejor jugada a la que podemos acceder desde el estado actual. Hay que tener claro que con este procedimiento slo decidimos una jugada, y que repetimos la bsqueda en cada movimiento que tenemos que decidir. A pesar de que repitamos la bsqueda a cada paso, el nmero de nodos explorados es mucho menor que si explorramos todo el rbol de bsqueda completo. La calidad del juego vendr determinada por la profundidad a la que llegamos en cada exploracin. Cuanto ms profunda sea la exploracin mejor jugaremos, ya que veremos ms porcin del espacio de bsqueda. Evidentemente, cuanto ms exploremos, ms coste tendr la bsqueda. El algoritmo que realiza esta exploracin recibe el nombre de

minimax4 y es un reco-

rrido en profundidad recursivo. El que sea un recorrido en profundidad hace que el coste espacial sea lineal, pero evidentemente el coste temporal ser exponencial (depender de la profundidad mxima de exploracin). El algoritmo es el siguiente:

funcion
3 Ntese 4 El

MiniMax

(g)

retorna

movimiento

movr : m o v i m i e n t o ;

que la funcin heurstica no slo evala los estados nales. nombre minimax proviene del teorema del Minimax del rea de teora de juegos enunciado por John von Neumann en 1928.

5.3.

SEAMOS UN POCO MS INTELIGENTES

47

max , maxc : e n t e r o

max=

para cada si

i n f i n i t o
mov

cmax=v a l o r M i n ( a p l i c a r ( mov , g ) ) cmax>max

en entonces

movs_posibles ( g )

hacer

max=cmax

fsi fpara retorna ffuncion funcion

movr=mov

( movr )

valorMax

(g)

retorna

entero

vmax : e n t e r o

si retorna si no para cada fpara retorna fsi ffuncion funcion si retorna si no para cada fpara retorna fsi ffuncion
vmax= vmin : e n t e r o

estado_terminal ( g )

entonces hacer

( evaluacion (g ))

infinito mov

en

movs_posibles ( g )

vmax=max ( vmax , v a l o r M i n ( a p l i c a r ( mov , g ) )

( vmax )

valorMin

(g)

estado_terminal ( g )

retorna entonces

entero

( evaluacion (g ))

vmin= +i n f i n i t o mov

en

movs_posibles ( g )

hacer

vmin=min ( vmin , v a l o r M a x ( a p l i c a r ( mov , g ) )

( vmin )

jugada que se puede realizar, y dos funciones recursivas mutuas (valorMax y La funcin al nivel

El algoritmo tiene una funcin principal (MiniMax) que es la que retorna la mejor

valorMin)

que determinan el valor de las jugadas dependiendo de si el nivel es de MAX o de MIN.

estado_terminal(g) determina si el estado actual es una solucin o pertenece mximo de exploracin. La funcin evaluacion(g) calcula el valor de la funcin

48

CAPTULO 5.

BSQUEDA CON ADVERSARIO

heurstica para el estado actual.

5.4.

Seamos an ms inteligentes

Un punto clave que hemos de tener en cuenta es que cuanto ms profunda sea la exploracin, mejor podremos tomar la decisin sobre qu jugada debemos escoger. Para juegos en los que el factor de ramicacin sea muy grande, esta profundidad no podr ser muy grande, ya que el tiempo que necesitaremos para cada decisin ser prohibitivo. Para reducir este tiempo de exploracin se han estudiado las propiedades que tienen estos rboles de bsqueda y se han desarrollado heursticas que permiten no explorarlos en su totalidad y obtener el mismo resultado que obtendramos con la exploracin completa. La heurstica que veremos se denomina

poda alfa-beta ( pruning). Esta heurstica

aprovecha que el algoritmo del minimax hace una exploracin en profundidad para guardar informacin sobre cul es el valor de las mejores jugadas encontradas hasta cierto punto de la bsqueda para el jugador MAX y para el jugador MIN . Lo que hace esta heurstica es evitar seguir explorando nodos que sabemos que no van a variar la decisin que se va a tomar en niveles superiores, eliminndolos de la bsqueda y ahorrando tiempo. Podemos ver por ejemplo el siguiente rbol de exploracin:

12

16

13

10

Podemos ver que el valor que propagara el algoritmo del minimax a nodo raz sera 8. Pero si nos jamos en el nodo marcado, el segundo descendiente de la raz ya sabe que el mejor nodo del primer descendiente tiene valor 8, y su primer descendiente vale 6. Dado que la raz es un nodo MAX, este preferir el valor 8 al 6. Dado que el segundo descendiente es un nodo MIN, ste siempre escoger un valor que como mximo ser 6. Esto nos hace pensar que, una vez hemos visto que el valor del nodo marcado es 6, el valor que salga de esa exploracin no se elegir (ya que tenemos un valor mejor de la exploracin anterior). Esto lleva a la conclusin de que seguir explorando los nodos del segundo descendiente de la raz no merece la pena, ya que el valor resultante ya no es elegible. Podemos observar tambin que esta circunstancia se repite en el tercer descendiente al explorar su ltimo nodo, pero al no quedar ms descendientes esta heurstica no nos ahorra nada. Esto querr decir que la efectividad de esta heurstica depender del orden de los

5.4.

SEAMOS AN MS INTELIGENTES

49

nodos, pero desgraciadamente es algo que no se puede establecer a priori. Esta heurstica modica el algoritmo del minimax introduciendo dos parmetros en las llamadas de las funciones,

y representarn el lmite del valor que pueden tomar

las jugadas que exploramos. Una vez superado ese lmite sabremos que podemos parar la exploracin porque ya tenemos el valor de la mejor jugada accesible. La funcin minimax se mantiene igual, slo varan las funciones que hacen la exploracin de cada nivel, su cdigo sera el siguiente:

funcion si retorna si no para cada si fpara retorna fsi ffuncion funcion si retorna si no para cada si fpara retorna fsi ffuncion

valorMax

( g , a l f a , beta )

estado_terminal ( g )

retorna entonces

entero

( evaluacion (g ))

mov

en

movs_posibles ( g )

hacer
, a l f a , beta ) )

a l f a =max ( a l f a , v a l o r M i n ( a p l i c a r ( mov , g ) alfa> =b e t a

entonces retorna

( beta )

( alfa )

valorMin

( g , a l f a , beta )

estado_terminal ( g )

retorna entonces

entero

( evaluacion (g ))

mov

en

movs_posibles ( g )

hacer
, a l f a , beta ) )

b e t a=min ( b e t a , v a l o r M a x ( a p l i c a r ( mov , g ) alfa> =b e t a

entonces retorna

( alfa )

( beta )

La llamada que har la funcin valor de

alfa

como valor de

MiniMax beta.

a la funcin

valorMax

le pasar

como

valorMax, alfa es el valor que se actualiza y beta se mantiene constante representando el valor de la mejor jugada encontrada hasta ahora. En la funcin valorMin, beta es el valor que se actualiza y alfa se mantiene constante representando el valor de
En la funcin la mejor jugada encontrada hasta ahora. En la siguiente gura se ve como explorara el algoritmo de minimax con poda alfa beta el ejemplo anterior:

50

CAPTULO 5.

BSQUEDA CON ADVERSARIO

=inf,8 =+inf =inf =+inf,8

=8 =+inf,6

=8 =+inf,10,9,7

12

16

13

10

La ventaja de utilizar la poda alfa beta es que podemos permitirnos ampliar el lmite de profundidad de exploracin, ya que nos ahorramos la exploracin de parte del rbol de bsqueda, y as conseguir mejores resultados.

Captulo 6 Satisfaccin de restricciones


6.1. De variables y valores

Existen problemas especcos que, por sus propiedades, se pueden resolver ms fcilmente utilizando algoritmos adaptados a ellos que utilizando algoritmos generales. Este es el caso de los problemas denominados de

satisfaction

satisfaccin de restricciones (constraint

Las caractersticas de un problema de satisfaccin 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 o intervalos de valores continuos) Existen restricciones de consistencia entre las variables (binarias, n-arias) Una solucin es una asignacin de valores a esas variables

El inters de este tipo de problemas viene de que muchos problemas reales se pueden plantear como problemas de satisfaccin de restricciones, como por ejemplo la planicacin de tareas, logstica (localizacin o asignacin de recursos, personas, vehculos, ...), gestin de redes (electricidad, comunicaciones, ...), diseo/conguracin, visin y reconocimiento de patrones, razonamiento (temporal, espacial, ...), ... Estas aplicaciones hacen que sea un rea bastante interesante desde un punto de vista prctico. Todos los algoritmos de resolucin de problemas de satisfaccin de restricciones que veremos estn pensados para el caso de que las restricciones sean binarias ya que se pueden representar mediante grafos (

grafos de restricciones) en los que los nodos son las

variables, las restricciones son los arcos, y los dominios de las variables son los diferentes

1 En

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


51

52

CAPTULO 6.

SATISFACCIN DE RESTRICCIONES

valores que pueden tomar los nodos. Esto no supone ninguna limitacin, dado que la mayor parte de los problemas no binarios se pueden convertir en problemas binarios mediante transformaciones en las restricciones.

Ejemplo 6.1 Un ejemplo clsico de problema de satisfaccin de restricciones es el de coloreado de mapas. El problema consiste en asignar colores a los pases de un mapa de manera que dos pases adyacentes no tengan el mismo color.
Colores={rojo, verde, amarillo, azul}
P1 P1 P2 P3 P4 P5 P2 P4 P3

P6 P5

P6

El problema se puede representar como un grafo donde cada nodo es un pas y los arcos entre nodos representan las fronteras comunes. Los nodos del grafo seran las variables del problema, los arcos representaran las restricciones entre pares de variables (sus valores han de ser diferentes) y los colores disponibles seran los dominios de las variables.
6.2. Buscando de manera diferente

Se puede plantear un problema de satisfaccin de restricciones como un problema de bsqueda general. Dado que una solucin es una asignacin de valores a las variables del problema, slo hara falta enumerar de alguna manera todas las posibilidades hasta encontrar alguna que satisfaga las restricciones. Evidentemente, esta aproximacin es irrealizable ya que el conjunto de posibles asignaun espacio de bsqueda de ciones a explorar es muy grande. Suponiendo O(mn ).

variables y

posibles valores, tendramos

Un problema adicional es que no hay ninguna nocin de calidad de solucin, ya que todas las asignaciones son igual de buenas y lo nico que las diferencia es si satisfacen las restricciones o no, por lo que no podemos conar en una funcin heurstica que nos indique que combinaciones debemos mirar primero, o como modicar una asignacin para acercarla a la solucin. Esto nos deja con que los nicos algoritmos que podremos utilizar sern los de bsqueda no informada, lo que har que tengamos que estudiar com ms profundidad el problema para poder solucionarlo de una manera eciente. Una ventaja con la que nos encontraremos es que, las propiedades que tienen estos problemas permiten derivar heursticas que reducen el espacio de bsqueda de manera

6.2.

BUSCANDO DE MANERA DIFERENTE

53

considerable. Veremos tres aproximaciones a la resolucin de problemas de satisfaccin de restricciones, la primera se basar en bsqueda no informada, la segunda se basar en la reduccin de espacio de bsqueda del problema y la tercera intentar combinar ambas.

6.2.1. Bsqueda con backtracking


La primera aproximacin se basar en la bsqueda no informada. Plantearemos el problema de manera que podamos explorar el conjunto de posibles asignaciones de valores a las variables como una bsqueda en profundidad. Podemos observar que, dada una asignacin parcial de valores a las variables de un problema, sta podra formar parte de una solucin completa si no viola ninguna restriccin, por lo tanto slo tendramos que encontrar el resto de valores necesarios para completarla. Esto nos hace pensar que podemos plantear la bsqueda ms fcilmente si exploramos en el espacio de las soluciones parciales, que si lo planteamos como una bsqueda en el espacio de las soluciones completas como habamos comentado antes. Esto nos puede indicar un algoritmo para hacer la exploracin. Podemos establecer un orden jo para las variables y explorar de manera sistemtica el espacio de soluciones parciales, asignando valores a las variables de manera consecutiva en el orden que hemos jado. En el momento en el que una solucin parcial viole alguna de las restricciones del problema, sabremos que no formar parte de ninguna solucin completa, por lo que replantearemos las asignaciones que hemos realizado. A este tipo de bsqueda se la denomina busqueda con

bactracking cronolgico.

Deniremos tres conjuntos con las variables del problema. Por un lado tendremos las variables pasadas, que sern las que ya tienen un valor asignado y forman parte de la solucin parcial. Tendremos la variable actual, que ser a la que debemos asignarle un valor. Y por ltimo tendremos las variables futuras, que sern las que an no tienen valor. El algoritmo es el siguiente:

funcion si si no

backtracking_cronologico ( vfuturas ,

vfuturas . es_vacio ? ( )

entonces retorna hacer

solucion ) ( solucion )

retorna

asignacion

v a c t u a l=v f u t u r a s . p r i m e r o ( )

para cada si

v fu t u ra s . borrar_primero ( ) v

en

vactual . valores ()

vactual . asignar (v) solucion . anadir ( vactual ) solucion . valida ()

entonces entonces

si no retorna si no
(

s o l u c i o n=b a c k t r a c k i n g _ c r o n o l o g i c o ( v f u t u r a s , s o l u c i o n ) s o l u c i o n . es_vacio ? ( ) ) ( solucion )

solucion . borrar ( vactual )

54

CAPTULO 6.

SATISFACCIN DE RESTRICCIONES

fsi si no fsi fpara retorna fsi ffuncion

solucion . borrar ( vactual )

( solucion . vacia ())

El algoritmo hace un recorrido en profundidad de manera recursiva por todas las asignaciones posibles de valores a cada una de las variables del problema. El parmetro contiene todas las variables del problema en orden, el parmetro la bsqueda 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 para la llamada recursiva cuando una asignacin de valor a la variable actual viola alguna restriccin del problema (solucion.vlida()). En el caso de que ninguna asignacin d una solucin vlida, el algoritmo permite que se cambie el valor de la variable anterior (retorna una solucin vaca).

solucin

vfuturas

ir guardando

las soluciones parciales. El hacer el recorrido en profundidad hace que el coste espacial de

que ya hemos comentado en el primer captulo. ste se puede plantear como un problema de satisfaccin de restricciones en el que las reinas seran las variables, el dominio de valores sera la columna en la que se coloca la reina y las restricciones seran que las posiciones en las que colocamos las reinas no hagan que se maten entre si. En la gura 6.1 podemos ver como explorara el algoritmo de backtracking cronolgico el problema en el caso de 4 reinas.
El algoritmo de backtracking cronolgico puede hacer bastante trabajo innecesario a veces si la variable que provoca la vuelta atrs del algoritmo no es precisamente la ltima asignada, haciendo que se tengan que probar todas las combinaciones posibles de las variables que hay entre el primer punto donde se encuentra la violacin de la restriccin y la variable que la provoca. Esto ha hecho desarrollar variantes ms inteligentes del backtracking cronolgico, la mas sencilla es la denominada

Ejemplo 6.2 Otro problema clsico de satisfaccin de restricciones es el de la N reinas

backjumping, que intenta que

el backtracking no sea a la variable anterior, sino que, teniendo en cuenta las restricciones involucradas, vuelva a la variable que tiene alguna restriccin con la variable actual. Esto consigue evitar todas las pruebas de valores entre la variable actual y esa variable.

6.2.2. Propagacin de restricciones


Otras vas a travs de las que atacar este tipo de problemas son las denominadas tcnicas de

propagacin de restricciones. Mediante stas se pretende reducir el nmero de

6.2.

BUSCANDO DE MANERA DIFERENTE

55

R1=1

R1=2

R2=1 NO R2=2 NO R2=3

R2=4

R2=1 NO R2=2 NO R2=3 NO R2=4

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

R3=1 NO R3=2 NO R3=3 NO R3=4 NO R4=1 NO R4=2 NO R4=3 NO R4=4 NO Backtracking a R3

R3=1

Backtracking a R2

R4=1 NO R4=2 NO R4=3

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

Figura 6.1: 4 reinas mediante backtracking cronolgico

combinaciones que hay que probar, descartando todas aquellas que contengan asignaciones de valores que sabemos que no pueden aparecer en ninguna solucin. Estas tcnicas se han desarrollado a partir de heursticas derivadas de propiedades que tienen los grafos de restricciones. Las ms utilizadas son las que se derivan de la propiedad denominada

k-consistencia.

Se dice que un grafo de restricciones es

k-consistente si para cada variable Xi del grafo,


Xi , podemos

cada conjunto de k variables que la incluyan y para cada valor del dominio de

encontrar una combinacin de k valores de estas variables que no viola las restricciones entre ellas. La ventaja de estas propiedades es que se pueden comprobar con algoritmos de coste polinmico. Esta propiedad la podemos denir para cualquier valor de k, pero tpicamente se utiliza el caso de k igual a 2, al que se denomina restricciones es

arco-consistente,

arco-consistencia.

Diremos que un grafo de

si para cada pareja de variables del grafo, para cada

uno de los valores de una de las variables, podemos encontrar otro valor de la otra variable que no viola las restricciones entre ellas. Esta propiedad permite eliminar valores del dominio de una variable. Si dado un valor de una variable y dada otra variable con la que tenga una restriccin, no podemos encontrar algn valor en la otra variable que no viole esa restriccin, entonces podemos eliminar el valor, ya que no puede formar parte de una solucin.

56

CAPTULO 6.

SATISFACCIN DE RESTRICCIONES

El objetivo ser pues, a partir de un grafo de restricciones, eliminar todos aquellos valores que no hagan arco consistente el grafo, de manera que reduzcamos el nmero de posibles valores que pueden tener las variables del problema y por lo tanto el nmero de combinaciones a explorar. El algoritmo que convierte un grafo de restricciones en grafo arco-consistente es el siguiente:

Algoritmo mientras
/

Arco_consistencia de arcos del problema

R =c o n j u n t o

haya

modificaciones

en

en
del del

ambos

sentidos de las

los

dominios

variables

hacer entonces

es es para cada si no

r_i r_j v anadir

r=e x t r a e r _ a r c o (R) la la v variable del del origen destino de arco arco

en
v

variable el

dominio

tiene

ningn

valor de que

en

r_i

hacer

/
de r_j que cumpla r

el

dominio

eliminar

del

dominio arcos ( r_j

v_i tengan como destino r_i

todos menos

los el

fsi fpara fmientras fAlgoritmo

r_i )

El coste del algoritmo es (contando los dos sentidos)

O(k r) siendo r el nmero y k un factor constante (hay

de restricciones del problema que tener en cuenta que

es

cuadrtico respecto al nmero de variables).

cada uno de los nodos se indica el dominio de cada variable. El objetivo ser colorear el grafo de manera que ningn nodo adyacente tenga el mismo color, por lo que cada arco es una restriccin de desigualdad:
X2
{Azul} {Axul, Rojo}

Ejemplo 6.3 En la siguiente gura tenemos un problema de coloreado de grafos donde en

X1

X3
{Azul, Rojo, Verde}

X4
{Azul, Verde}

El conjunto de arcos con los que comenzara el algoritmo son:


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

6.2.

BUSCANDO DE MANERA DIFERENTE

57

La ejecucin del algoritmo sera la siguiente: 1. Seleccionamos X1 X2 Eliminamos Azul del dominio de X1 2. Seleccionamos X2 X1 Todos los valores son consistentes 3. Seleccionamos X2 X3 Todos los valores son consistentes 4. Seleccionamos X3 X2 Eliminamos Azul del dominio de X3 Tendramos que aadir el arco X4 X3 pero ya est 5. Seleccionamos X2 X4 Todos los valores son consistentes 6. Seleccionamos X4 X2 Eliminamos Azul del dominio de X4 Tendramos que aadir el arco X3 X4 pero ya est 7. Seleccionamos X3 X4 Eliminamos Verde del dominio de X3 Aadimos el arco X2 X3 8. Seleccionamos X4 X3 Todos los valores son consistentes 9. Seleccionamos X2 X3 Todos los valores son consistentes Casualmente, al hacer arco-consistente el grafo hemos hallado la solucin, pero no siempre tiene por que ser as.
La arco-consistencia no siempre nos asegura una reduccin en los dominios del problema, por ejemplo, si consideramos el grafo del problema de las 4 reinas que hemos visto en el ejemplo 6.2, ste es arco-consistente, por lo que no se puede eliminar ninguno de los valores de las variables. La k-consistencia para el caso de

igual a 3 se denomina

camino consistencia,

permite eliminar ms combinaciones, pero con un coste mayor. El algoritmo de comproba3 cin de camino-consistencia tiene coste O (n ) siendo n el nmero de restricciones. Existe la propiedad que se denomina

k-consistencia fuerte,
k.

que se cumple cuando un grafo

cumple la propiedad de consistencia desde 2 hasta

Esta propiedad asegura que si el grafo tiene anchura esto necesita un tiempo exponencial.

y es k-consistente fuerte, en-

contraremos una solucin sin necesidad de hacer backtracking, desgraciadamente probar

6.2.3. Combinando bsqueda y propagacin


La combinacin de la bsqueda con backtracking y la propagacin de restricciones es la que da resultados ms exitosos en estos problemas. La idea consiste en que cada vez que asignemos un valor a una variable realicemos una propagacin de las restricciones que induce esa asignacin, eliminando de esta manera valores de las variables que quedan por asignar. Si con esta propagacin, alguna de las variables se queda sin valores, deberemos hacer backtracking.

2 Se

puede calcular la anchura de un grafo en coste cuadrtico.

58

CAPTULO 6.

SATISFACCIN DE RESTRICCIONES

La ventaja de este mtodo es que podremos hacer backtracking antes de que lleguemos a la variable que acabar provocndolo. De manera que nos ahorraremos todos los pasos intermedios. Existen diferentes algoritmos que combinan bsqueda y propagacin, dependiendo de que tipo de consistencia se evale en cada paso de bsqueda. El algoritmo ms sencillo es el denominado de

forward checking.

Este algoritmo aade a cada paso de asignacin de variables una prueba de arcoconsistencia entre las variables futuras y la variable actual. Esta prueba de arco consistencia consigue que todos los valores de las variables futuras que no sean consistentes con la asignacin a la variable actual sean eliminados, de manera que si algn dominio de alguna variable futura queda vaco realizamos backtracking. El algoritmo sera idntico al que hemos visto para el backtracking cronolgico, salvo que incluiramos la reduccin de dominios mediante la prueba de arco consistencia y adems en la comprobacin de la validez de la solucin parcial se incluira la comprobacin de que todas las variables futuras tienen an valores.

mo de forward checking. Se puede comprobar que el nmero de asignaciones que se realizan es mucho menor ya que los valores no compatibles son eliminados por las pruebas de consistencia. Ahora el coste ha pasado a las pruebas de consistencia que se realizan en cada iteracin.
Existen algorimos que realizan pruebas de consistencia mas fuertes, como por ejemplo el algoritmo

Ejemplo 6.4 En la gura 6.2 podemos ver de nuevo el ejemplo 6.2 utilizando del algorit-

RFL (Real Full Lookahead)

que adems comprueba la arco-consistencia

entre todas las variables futuras, o el algoritmo

MAC (Maintaining Arc Consistency)

que convierte el problema en arco consistente a cada paso. Evidentemente, esta reduccin de los dominios de las variables no sale gratis, el nmero de comprobaciones a cada paso incrementa el coste por iteracin del algoritmo. Dependiendo del problema, el coste de propagacin puede hacer que el coste de hallar una solucin sea mayor que utilizar el algoritmo de backtracking cronolgico.

6.3.

Otra vuelta de tuerca

Muchas veces estas heursticas no son son sucientes para reducir el coste de encontrar una solucin, por lo que se combinan con otras que tambin se han mostrado efectivas en este tipo de problemas. Hasta ahora siempre hemos mantenido un orden jo en la asignacin de las variables, pero este puede no ser el ms adecuado a la hora de realizar la exploracin. Se utilizan diferentes heursticas de ordenacin dinmica de variables de manera que siempre se escoja

6.3.

OTRA VUELTA DE TUERCA

59

R1=1

R1=2 R2={3,4} R3={2,4} R4={2,3} Back a R1 R2={4} R3={1,3} R4={1,3,4}

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

R2=4

R3={2} R4={3}

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

R3=2 R4={}

R3=1 R4={3}

Backtracking a R2

R4=3

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

Figura 6.2: 4 reinas mediante forward checking

la que tenga ms probabilidad de llevarnos antes a darnos cuenta de si una solucin parcial no nos llevar a una solucin. Las heursticas ms utilizadas son:

Dominios mnimos (Dinamic value ordering), escogemos la variable con el menor nmero de valores.

Min width ordering, escogemos la variable conectada al menor nmero de variables


no instanciadas.

Max degree ordering, escogemos la variable ms conectada en el grafo original.


No es despreciable el ahorro que se puede obtener mediante este tipo de heursticas, 7 para el problema de las 20 reinas, hallar la primera solucin necesita alrededor de 2,5 10 6 asignaciones, utilizando forward checking se reduce a alrededor de 2,4 10 asignaciones, y si utilizamos la heurstica de dominios mnimos combinada con el forward checking hacen 3 falta alrededor de 4 10 asignaciones.

60

CAPTULO 6.

SATISFACCIN DE RESTRICCIONES

Captulo 7 Problemas resueltos


7.1. Bsqueda heurstica

1. Dado el rbol de bsqueda que aparece en la gura indica cual sera el recorrido que hara el algoritmo A e IDA la funcin heurstica es admisible? En el rbol la funcin heurstica esta descompuesta en la g y la h'. Cuando en un nodo aparecen dos valores el orden corresponde a la rama por la que se ha llegado al nodo.

0+6

2+4

1+5

3+3

3+3|2+3

3+3

5+2

4+2

4+3

4+2

6+1

5+1

7+1

6+1

7+0
61

62

CAPTULO 7.

PROBLEMAS RESUELTOS

Este problema corresponde al problema numero 19 del captulo 2 de la coleccin de problemas Solucin:
Este es el recorrido que obtendra el algoritmo de A .

0+6
2

2+4
3

1+5
5 7

3+3
4

3+3|2+3

3+3

5+2

4+2

4+3

4+2

6+1

5+1

10

7+1

6+1

11

7+0

12

Este es el recorrido que obtendra el algoritmo de IDA .

0+6
2 14

1 13

2+4
3 15 5 8 19

1+5

3+3
16 20 4 6 9 18

3+3|2+3
21

3+3

10

5+2
17

4+2

4+3

4+2

11

6+1

5+1

12

7+1
23

22

6+1

7+0

7.2.

BSQUEDA LOCAL

63

Sobre cada rbol de bsqueda aparece el orden de expansin de los nodos que hacen los respectivos algoritmos. En el caso del A

se puede observar como el nodo E es reabierto al ser encontrado

por 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 slo guardar el camino actual, varios

nodos son explorados varias veces en una misma iteracin, concretamente el nodo E es expandido 2 veces y el H tres veces en la primera iteracin del algoritmo.

Tambin se puede ver que el camino a la solucin que se encuentra con IDA es dife rente que el de A , ya que la exploracin del primero sigue una estrategia sistemtica
en profundidad, y por lo tanto se encuentra el primer camino de ms a la izquierda que lleva a la solucin. Respecto a la admisibilidad de la funcin heurstica, en este caso podemos ver el espacio completo de bsqueda, por lo que es sencillo comprobar si es admisible. Ninguno de los caminos que lleva a la solucin (que tiene 7 como coste real) viola la condicin de admisibilidad. Todos los caminos que no llevan a la solucion tienen coste

por lo que tampoco la violan.

Respecto a la admisibilidad de la funcin heurstica, dado que tenemos el rbol de exploracin completo podemos observar su comportamiento en todos los nodos. Esta es admisible ya que nunca sobreestima el coste real.

7.2.

Bsqueda local

1. Deseamos colocar un conjunto de

supermercados y

almacenes para abastecerlos

dentro de una ciudad. Para ello disponemos de un mapa de la ciudad que nos indica

posibles locales donde podemos colocar los supermercados y los almacenes. Adems tambin disponemos del nmero de supermercados competidores que hay alrededor de cada local que puede ubicar un supermercado. El objetivo es colocar los supermercados de manera que se minimice la competencia y que se maximice la distancia entre supermercados. Adems deseamos colocar los almacenes de manera que minimicemos el recorrido que harn nuestros camiones de reparto (disponemos de una funcin ptimo entre cada local) En los siguientes apartados se proponen diferentes alternativas para algunos de los elementos necesarios para plantear la bsqueda (solucin inicial, operadores, funcin heurstica, ...). El objetivo es comentar la solucin que se propone respecto a si es correcta, es eciente, o es mejor o peor respecto a otras alternativas posibles. Justica tu respuesta.

D(li , lj ) que nos indica la distancia del recorrido

a)

Se plantea solucionarlo mediante Hill-Climbing usando como funcin heurstica la suma de las distancias de los locales de cada uno de los

supermercados

64

CAPTULO 7.

PROBLEMAS RESUELTOS

al resto, multiplicado por la suma de los supermercados competidores de cada supermercado

b)

Se plantea solucionarlo mediante Hill-Climbing utilizando como solucin inicial el colocar aleatoriamente los

supermercados y los

A almacenes y usando como

operadores de bsqueda mover un supermercado o almacn al local ms cercano respecto a su posicin actual.

c)

Se plantea solucionarlo mediante Hill-Climbing utilizando como solucin inicial el colocar los supermercados consecutivamente hasta colocar los

y para cada

supermercado colocarlo en el local que est a mxima distancia respecto al local donde se coloc el supermercado anterior. Se plantean como operadores mover un supermercado a cualquier local cuya suma de distancias al resto de supermercados sea mayor que la suma de distancias del local actual y mover un almacn a cualquier local cuya suma de distancias al resto de supermercados sea menor que la distancia del local actual

d)

Planteamos dividir el problema en dos partes una para los supermercados y otra para los almacenes. El problema de los almacenes se resuelve una vez ubicados los supermercados. Utilizamos Hill-Climbing para solucionarlo, nos plateamos como operador asignar un almacn a un supermercado y como funcin heurstica la suma de las distancias de todos los supermercados al almacn que tienen asignado

e)

Planteamos dividir el problema en dos partes, una para los supermercados y otra para los almacenes. El problema de los supermercados lo resolvemos mediante algoritmos genticos. Para representar el problema utilizamos una tira de bits y como poblacin inicial generamos exactamente

individuos donde en cada uno hay

bits a 1. La funcin heurstica es la suma de distancias de cada

supermercado al resto mas una constante por la suma de la competencia de cada local. Como operadores usamos los operadores habituales de cruce y mutacin.

Este problema corresponde al problema nmero 3 del captulo 3 de la coleccin de problemas

Solucin:
a)
La funcin heurstica slo tiene en cuenta una parte del problema y no optimiza la distancia a los centros de reparto. Si estamos minimizando la funcin debera decrecer, lo cual es falso respecto a la suma de las distancias de los locales entre ellos, debera ser el negativo de esa funcin. Por otro lado, multiplicando por la competencia estaramos penalizando ubicaciones donde la competencia fuera grande lo cual es correcto.

7.2.

BSQUEDA LOCAL

65

b)

La solucin inicial es correcta, ya que nos dara una ubicacin para supermercados y almacenes. Adems el coste de hallarla es pequeo Mover un supermercado o almacn al local mas cercano nos mantiene dentro de las soluciones y tiene un factor de ramicacin pequeo, de manera que de cada estado solo podemos llegar a

S + A estados. El coste de hallar el local ms

cercano podra ser un problema ya que tendramos que buscarlo para cada local.

c)

La manera de colocar los supermercados podra ser algo mejor que hacerlo aleatoriamente, pero no nos asegura que nos deje en una solucin inicial mejor ya que al colocar un supermercado slo nos jamos en el supermercado anterior y eso no nos asegura nada respecto al resto. Adems el coste de colocar cada supermercado es relativamente grande ya que debemos buscar el local ms alejado. El operador propuesto tiene un factor de ramicacin mayor que el anterior, pero no demasiado grande. El coste de calcular los locales a donde desplazar el supermercado es bastante grande, ya que tenemos que calcular para cada local posible la suma de las distancias a los locales donde estn los otros supermercados o almacenes.

d)

El operador es correcto, nos mantiene dentro de las soluciones, el factor de ramicacin sera el numero de supermercados, lo cual podra ser un poco grande. La suma de las distancias de los supermercados al almacn nos podra dar una idea de la longitud del recorrido (cuanto ms cerca estn los supermercados este recorrido ser ms pequeo), pero no es exactamente lo que queremos minimizar. Evidentemente es mucho menos costoso que calcular el coste del camino mnimo entre cada supermercado y su almacn, por lo que sera una buena aproximacin.

e)

La representacin es correcta, una solucin es una asignacin de supermercados a locales, lo cual se puede representar indicando si un local tiene supermercado o no. La forma de generar las soluciones iniciales tambin es correcta, todas son solucin. Estamos combinando dos elementos en la funcin heurstica, primero la separacin entre supermercados, esto ya se considera correctamente con la suma de las distancias entre supermercados, a mayor suma mayor separacin. La penalizacin respecto a la competencia debera tener signo contrario, ya que a mayor competencia peor es la solucin, as que la funcion debera 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 mutacin no nos asegurarn que obtengamos soluciones al aplicarlos

66

CAPTULO 7.

PROBLEMAS RESUELTOS

7.3.

Juegos

1. La siguiente gura muestra el rbol de bsqueda de profundidad 4 para un determinado juego para el jugador MAX. Los valores de los nodos terminales indican el valor de la funcin de evaluacin para la posicin obtenida en dicho nodo.

5 6 7

3 4

2 3 4

10

a)

Utiliza el algoritmo Minimax para decidir qu jugada debe escoger MAX, indicando claramente los valores de la funcin de evaluacin propagados a cada nodo.

b) c)

Repite la exploracin del apartado anterior utilizando la poda alfa-beta. Indica claramente la evolucin de los valores de alfa y beta y los nodos que se podan. Crees que modicando el orden de generacin de nodos podra podarse un mayor nmero de nodos? Justica brevemente la respuesta.

Este problema corresponde al problema nmero 4 del captulo 4 de la coleccin de problemas

Solucin:

a)

La ejecucin del minimax dara el siguiente resultado:

7.3.

JUEGOS

67

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

4 4 9

5 6 7

b)

La ejecucin del minimax con poda alfa-beta dara el siguiente resultado:

= inf,5 = +inf = inf = +inf,5 = inf,4,5 = +inf = inf = +inf,4 = inf,4 = +inf,5 = 5 = +inf,2 = inf,2,3 = +inf,5 = inf = +inf,5,2 = 2 = +inf,5,3 = 3 = +inf,5

6 7

3 4

68

CAPTULO 7.

PROBLEMAS RESUELTOS

= inf,5,8 = +inf

= 5 = +inf,8 = 5,8 = 8 = 5 = 5 = +inf,10,8 = 8

= 5,8 = +inf = 5 = +inf,0

0
c)

10

Evidentemente el orden en que estn los nodos afecta a la cantidad de nodos podados.

7.4.

Satisfaccin de restricciones

1. Dado el siguiente grafo de restricciones donde cada restriccin es una condicin de desigualdad y los siguientes dominios para las variables:

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

7.4.

SATISF ACCIN DE RESTRICCIONES

69

Haz la ejecucin del backtracking cronolgico hasta el primer backtracking a la variable A y del forward checking hasta encontrar la primera solucin

Este problema corresponde al problema nmero 17 del captulo 5 de la coleccin de problemas

Solucin:
Backtracking cronologico 1) 2) 3) 4) 7) 8) 9) A=1 B= C= D= C= B= A=

1,2 2,3 2, 3 3 2 1,2

70

CAPTULO 7.

PROBLEMAS RESUELTOS

Forward checking 1) A=1 B={

1,2}

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

1,2,3}

2,3} 2,3} E={ 2,3}


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

2} 2,3} 2,3}

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

1,3} 3}