Está en la página 1de 76

Inteligencia Artificial (IA)

de problemas
Resolucion
Algoritmos de busqueda

Javier Bjar

Departament de Llenguatges i Sistemes Informtics


Enginyeria en informtica
Cuatrimestre - curso 2006/2007

$
BY:


er

This work is licensed under the Creative Commons

$
BY:


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.

or send a letter to:

ndice general
1. Resolucin de problemas

1.1.

Qu es un problema?

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

1.2.

El espacio de estados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.3.

Algoritmos de bsqueda en el espacio de estados . . . . . . . . . . . . . . .

2. Bsqueda no informada

11

2.1.

Bsqueda independiente del problema . . . . . . . . . . . . . . . . . . . . .

11

2.2.

Bsqueda en anchura prioritaria . . . . . . . . . . . . . . . . . . . . . . . .

11

2.3.

Bsqueda en profundida prioritaria

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

12

2.4.

Bsqueda en profundidad iterativa

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

15

3. Bsqueda heurstica

17

3.1.

El conocimiento importa . . . . . . . . . . . . . . . . . . . . . . . . . . . .

17

3.2.

El ptimo est en el camino

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

17

3.3.

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

18

3.4.

El algoritmo A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

19

3.5.

Pero, encontrar el ptimo? . . . . . . . . . . . . . . . . . . . . . . . . . .

22

3.5.1.

Admisibilidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

22

3.5.2.

Consistencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

24

3.5.3.

Heurstico ms informado

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

25

Mi memoria se acaba . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

25

3.6.

3.6.1.

El algoritmo IDA

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

25

3.6.2.

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

26

4. Bsqueda local
4.1.

El tamao importa, a veces

31
. . . . . . . . . . . . . . . . . . . . . . . . . .

31

NDICE GENERAL

4.2.

Tu s, vosotros no . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

32

4.3.

Demasiado calor, demasiado fro . . . . . . . . . . . . . . . . . . . . . . . .

35

4.4.

Cada oveja con su pareja . . . . . . . . . . . . . . . . . . . . . . . . . . . .

37

4.4.1.

Codicacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

38

4.4.2.

Operadores

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

39

4.4.3.

Combinacin de individuos . . . . . . . . . . . . . . . . . . . . . . .

40

4.4.4.

El algoritmo gentico cannico . . . . . . . . . . . . . . . . . . . . .

41

4.4.5.

Cuando usarlos

42

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

5. Bsqueda con adversario

43

5.1.

T contra mi o yo contra ti

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

43

5.2.

Una aproximacin trivial . . . . . . . . . . . . . . . . . . . . . . . . . . . .

44

5.3.

Seamos un poco ms inteligentes

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

46

5.4.

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

48

6. Satisfaccin de restricciones

51

6.1.

De variables y valores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

51

6.2.

Buscando de manera diferente . . . . . . . . . . . . . . . . . . . . . . . . .

52

6.2.1.

Bsqueda con backtracking

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

53

6.2.2.

Propagacin de restricciones . . . . . . . . . . . . . . . . . . . . . .

54

6.2.3.

Combinando bsqueda y propagacin . . . . . . . . . . . . . . . . .

57

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

58

6.3.

7. Problemas resueltos

61

7.1.

Bsqueda heurstica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

61

7.2.

Bsqueda local

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

63

7.3.

Juegos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

66

7.4.

Satisfaccin de restricciones

68

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

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:

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
el problema.

Reduccin a subproblemas:

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
descomposicin.

Satisfaccin de restricciones:

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.

Juegos:

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,

es decir, la transformacin que ha de aplicarse al

estado para conseguir otro.

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.
Los estados y su relacin de accesibilidad conforman lo que se denomina el

espacio

de estados. ste representa todos los caminos que hay entre todos los estados posibles de

un problema. Podra asimilarse con un mapa de carreteras de un problema, la solucin 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

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.

En el caso de plantearnos el

RESOLUCIN DE PROBLEMAS

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:

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

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:

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.

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

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:

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-

1 Se

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.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

retorna

Busqueda_en_espacio_de_estados

Seleccionar
el

Generar
Escoger

fmientras
retorna
ffuncion

el

el

primer

estado
guardar

estado

actual

no es

sucesores

siguiente

como

estado

el

el

del

estado

estado

estado

entre

los

solucion

actual

final

actual

hacer

( expansion )

pendientes

( seleccion )

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.


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

nodos abiertos, que representarn a los estados generados


pero an no visitados y los nodos cerrados, que correspondern a los estados visitados y

tinguir dos tipos de nodos, los


que ya se han expandido.

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

CAPTULO 1.

RESOLUCIN DE PROBLEMAS

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

Algoritmo

Busqueda

General

E s t _ a b i e r t o s . i n s e r t a r ( Estado
A c t u a l=

inicial )

Est_abiertos . primero ( )

mientras no

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 )
H i j o s=

generar_sucesores ( Actual )

H i j o s=

tratar_repetidos ( Hijos ,

Est_cerrados ,

Est_abiertos )

Est_abiertos . i n s e r t a r ( Hijos )
A c t u a l=

fmientras
fAlgoritmo

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:

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 encontrarla.

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.

13

BSQUEDA EN PROFUNDIDA PRIORITARIA

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

Busqueda

en

profundidad

E s t _ a b i e r t o s . i n s e r t a r ( Estado
A c t u a l=

Est_abiertos . primero ( )

mientras no

limitada

( limite :

entero )

inicial )

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 )

si

p r o f u n d i d a d ( A c t u a l ) <=

limite

entonces

H i j o s=

generar_sucesores ( Actual )

H i j o s=

tratar_repetidos ( Hijos ,

fsi

Est_cerrados ,

Est_abiertos )

Est_abiertos . i n s e r t a r ( Hijos )
A c t u a l=

fmientras
fAlgoritmo

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(p),

O(rp).

Si hacemos una implementacin recursiva del algoritmo el coste

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

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

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.

2.4.

15

BSQUEDA EN PROFUNDIDAD ITERATIVA

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

Busqueda

en

profundidad

iterativa

( limite :

entero )

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

mientras no
(

A c t u a l=

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

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

Est_abiertos . primero ( )

mientras no
(

p r o f <l i m i t e

hacer

inicial )

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 )

si

p r o f u n d i d a d ( A c t u a l ) <=

prof

entonces

H i j o s=

generar_sucesores ( Actual )

H i j o s=

tratar_repetidos ( Hijos ,

fsi

Est_cerrados ,

Est_abiertos )

Est_abiertos . i n s e r t a r ( Hijos )
A c t u a l=

fmientras

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 ()

fmientras
fAlgoritmo

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.
Esta estrategia se traduce en el algoritmo

rst).

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

Algoritmo

Greedy

19

Best

First

E s t _ a b i e r t o s . i n s e r t a r ( Estado
A c t u a l=

inicial )

Est_abiertos . primero ( )

mientras no
(

y no

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

Est_abiertos . vacia ? ( ) )

hacer

Est_abiertos . borrar_primero ( )
Est_cerrados . i n s e r t a r ( Actual )
h i j o s=

generar_sucesores ( Actual )

h i j o s=

tratar_repetidos ( Hijos ,

Est_cerrados ,

Est_abiertos )

Est_abiertos . i n s e r t a r ( Hijos )
A c t u a l=

fmientras
fAlgoritmo

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

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


Denominaremos el

c(ni , nj ).

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

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

C(ni , nj ) =

j1
X

c(nx , nx+1 )

x=i
Denominaremos el

coste del camino mnimo entre dos nodos ni

nj

al camino de

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

K(ni , nj ) = mn Ck (ni , nj )
k=1

Si

nj

es un nodo terminal, llamaremos

h(ni )

K(ni , nj ),

es decir, el coste del camino

mnimo desde un estado cualquiera a un estado solucin.


Si

ni

es un nodo inicial, llamaremos

g(nj )

K(ni , nj ),

mnimo desde el estado inicial a un estado cualquiera.

es decir, el coste del camino

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


h0 (n) y le daremos el nombre de

funcin

lo aproximar, a esta funcin la denotaremos

heurstica. De esta manera tendremos una estimacin del coste del camino mnimo que
pasa por cierto nodo:

f 0 (n) = g(n) + h0 (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 :

Algoritmo

E s t _ a b i e r t o s . i n s e r t a r ( Estado
A c t u a l=

inicial )

Est_abiertos . primero ( )

mientras no
(

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 )
h i j o s=

generar_sucesores ( Actual )

h i j o s=

tratar_repetidos ( Hijos ,

Est_cerrados ,

Est_abiertos )

Est_abiertos . i n s e r t a r ( Hijos )
A c t u a l=

fmientras
fAlgoritmo

Est_abiertos . primero ( )

Como se observar, el algoritmo es el mismo que el

primero el mejor avaricioso,

lo nico que cambia es que ahora la ordenacin de los nodos se realiza utilizando el valor
0
0
de f . Como criterio de ordenacin, consideraremos que a igual valor de f los nodos con
h0 ms pequea se explorarn antes (simplemente porque si la h0 es ms pequea es que
0
son nodos mas cerca de la solucin), a igual h se consideraran en el orden en el que se
introdujeron en la cola.
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

p
Hay que considerar que el coste de este algoritmo es tambin O(r ) en el caso peor.
0
Si por ejemplo, la funcin 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
0
0
la funcin h . De hecho, podemos interpretar las funciones g y h como las que gobiernan
el comportamiento en anchura o profundidad del algoritmo.
Cuanto ms cercana a la realidad sea

h0 , 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

h0

cumple ciertas condiciones podemos evitar

el tratamiento de repetidos.
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 h0 y marcado el orden en el que el algoritmo ha visitado
cada nodo:

22

CAPTULO 3.

0+2

1+1

2+1

3+1

4
6

1+1

1+2

3+1

BSQUEDA HEURSTICA

1+3

2+2

3+2

10
4+1

4+1

5+0

4+0

Objetivo

Objetivo

3+1

11

4+1

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 he0
mos comentado, la funcin h 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 denomina0
remos
. Diremos que una funcin heurstica h es admisible siempre que se

admisibilidad

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 h0 (n) h(n)

3.5.

23

PERO, ENCONTRAR EL PTIMO?

Esto quiere decir que la funcin heurstica ha de ser un estimador

optimista

del coste

que falta para llegar a la solucin.

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

5
C

(1+2)

(1+3)

(2+2)

(3+1)

(3+1)

J
(4+1)

(1+5)

(2+2)

(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

C
(1+2)

(2+2)

(1+4)

D
(1+5)

H
(2+0)
Objetivo

(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

h0

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

nj ,

o sea

K(ni , nj ),

h(ni )

y el coste

h(nj )

y el coste ptimo para ir de

ni

se cumple la desigualdad triangular:

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


La condicin de consistencia exige pedir lo mismo al estimador

h0 :

h0 (ni ) h0 (nj ) K(ni , nj )


Es decir, que la diferencia de las estimaciones ha de ser menor o igual que la distancia
h0 es un estimador

ptima entre nodos. Si esta propiedad se cumple esto quiere decir que
uniforme de

h.

h0 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
Si

cualquier nodo es
hemos llegado a l

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
0
permite saber cul de ellos hallar ms rpido la solucin. Diremos que el heurstico h1 es
0
ms informado que el heurstico h2 si se cumple la propiedad:

n 0 h02 (n) < h01 (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
f 0 como

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.

26

CAPTULO 3.

BSQUEDA HEURSTICA

Esto quiere decir que hacemos la bsqueda imponiendo un lmite al coste del camino que
0
queremos hallar (en la primera iteracin, la f del nodo raz), explorando en profundidad
0
todos los nodos con f 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

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

Est_abiertos . i n s e r t a r ( Estado_inicial )
A c t u a l=

Est_abiertos . primero ( )

mientras no
(

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 )
H i j o s=

g e n e r a r _ s u c e s o r e s ( Actual ,

H i j o s=

tratar_repetidos ( Hijos ,

prof )

Est_cerrados ,

Est_abiertos )

Est_abiertos . i n s e r t a r ( Hijos )
A c t u a l=

fmientras

Est_abiertos . primero ( )

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

fmientras
fAlgoritmo
La funcin

generar_sucesores

slo retorna los nodos con un coste inferior o igual al

de la iteracin actual.
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.
Una primera alternativa es el algoritmo

rst ).

primero el mejor recursivo (recursive best

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

1 Este

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.

hacer

3.6.

27

MI MEMORIA SE ACABA

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
f 0 ) hasta que alguno de los nodos alternativos del camino tiene un coste mejor.

heurstica

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

r e c u r s i v o

BFS

( nodo ,

c_alternativo ,

entonces

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

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 )

entonces

sucesores . vacio ?()

n u e v o _ c o s t e=+ i n f i n i t o
solucion . vacio ()

si no
mientras no
si
f i n=f a l s o

m e j o r=

fin

hacer

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

mejor . c o s t e ( )

>

c_alternativo

entonces

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

si no

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 ( )

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

BFS

si
si no

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

solucion . vacio ?()

entonces

segundo . c o s t e ( ) ) ,

nuevo_coste ,

solucion )

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

fsi
fsi
fmientras
fsi
fsi
fAlgoritmo

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

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

28

CAPTULO 3.

BSQUEDA HEURSTICA

2
18

12

18

12

18

18

11

19

18

11

12

3
19

17

20

18

12

18

17

19

18

17

12

18

17

18

11

20

6
20

21

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.

1 De

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

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.
Esto nos lleva a la familia de algoritmos conocida como de

branch and bound).

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.
De entre los algoritmos de

ramicacin y poda, los ms utilizados son los denominados de

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

4.2.

33

TU S, VOSOTROS NO

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

Hill

Climbing

Estado_inicial

falso

mientras no
(

fin )

hacer

H i j o s=

generar_sucesores ( Actual )

H i j o s=

ordenar_y_eliminar_peores ( Hijos ,

si no
si no
fmientras
fAlgoritmo
(

vacio ?( h i j o s ))

entonces

A c t u a l=

Actual )
Escoger_mejor ( H i j o s )

f i n=c i e r t o

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:

2 Hay

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

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).

En este algoritmo se van guardando un nmero

busqueda en haces (beam


N

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

Beam

Search

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

falso

mientras no
(

fin )

Estado_inicial

hacer

H i j o s=

generar_sucesores ( Actual )

H i j o s=

escoger_mejores ( Hijos ,

si
si no
fmientras
fAlgoritmo

algun_cambio ? ( h i j o s )

soluciones_actuales )

entonces

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.
El primero que veremos es el denominado

templado simulado (simulated annea-

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-

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

energa a la funcin

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

temperatura, que nos permitir controlar el funcionamiento del al-

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:

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 n-

mero total de iteraciones jo y cada cierto nmero de ellas el valor de la temperatura
disminuir en cierta cantidad, partiendo desde una

temperatura inicial

y llegando a

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

Simulated

Partimos

una

la

temperatura

Paseo
un

Annealing

de

temperatura

aleatorio

numero

no

por

prefijado

inicial
sea

el
de

cero

espacio

hacer
de

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 )

soluciones

hacer
entonces

iteraciones

f ' ( Enuevo ) , T)

>0

E a c t u a l=Enuevo

fsi

4.4.

37

CADA OVEJA CON SU PAREJA

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.
El ejemplo que veremos de algoritmos que utilizan esta analoga es el de los

genticos

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

3 Existen

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

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

[00 11 10 01]

2
3

[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.

4 Esta

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.4.

39

CADA OVEJA CON SU PAREJA

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]

Otra variante muy utilizada es el

[000 101 100 000 011 101]

cruce por dos puntos (two points cross over),

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


los bits entre esos dos puntos.
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.
La forma habitual de pasar de una generacin a otra, es crear lo que se denomina una

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

eleccin de los individuos que forman parte de esta generacin intermedia se puede hacer
de muchas maneras, por ejemplo:

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

5 Esto

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.

4.4.

41

CADA OVEJA CON SU PAREJA

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 gentico cannico, los pasos que realiza este

algoritmo bsico son estos:

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

Pcruce

se aplica el operador de cruce a cada pareja de in-

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


con una probabilidad

1 Pcruce

se mantienen la pareja original en la siguiente

generacin

b)

Con una probabilidad

Pmutacion

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.

6 Tambin

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.

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

1 La

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

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

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:

2 No

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.

5.2.

45

UNA APROXIMACIN TRIVIAL

+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.

5.3.

BSQUEDA CON ADVERSARIO

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

MiniMax

(g)

retorna

movimiento

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

3 Ntese

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.
4 El

5.3.

47

SEAMOS UN POCO MS INTELIGENTES

max , maxc : e n t e r o

i n f i n i t o

max=

para cada
si

mov

en
entonces

movs_posibles ( g )

hacer

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

max=cmax
movr=mov

fsi
fpara
retorna
ffuncion
funcion

( 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

estado_terminal ( g )

entonces

( evaluacion (g ))

vmax=

infinito
mov

en

movs_posibles ( g )

hacer

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

( vmax )

valorMin

(g)

vmin : e n t e r o

retorna
entonces

entero

estado_terminal ( g )

( 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 )

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

jugada que se puede realizar, y dos funciones recursivas mutuas (valorMax y

valorMin)

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

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

La funcin
al nivel

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.

49

SEAMOS AN MS INTELIGENTES

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

retorna
entonces

( g , a l f a , beta )

estado_terminal ( g )

entero

( evaluacion (g ))

mov

en

movs_posibles ( g )

hacer

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 )
a l f a >=b e t a

entonces retorna

, a l f a , beta ) )

( beta )

( alfa )

valorMin

retorna
entonces

( g , a l f a , beta )

estado_terminal ( g )

entero

( evaluacion (g ))

mov

en

movs_posibles ( g )

hacer

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 )
a l f a >=b e t a

entonces retorna

, a l f a , beta ) )

( 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

12

16

=8
=+inf,10,9,7

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

P2

P3

P3
P4

P4
P5

P6

P6
P5

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 asignaciones a explorar es muy grande. Suponiendo
O(mn ).

variables y

posibles valores, tendramos

un espacio de bsqueda de

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.

53

BUSCANDO DE MANERA DIFERENTE

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

solucion )

retorna

( solucion )

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

para cada

en

vactual . valores ()

hacer

vactual . asignar (v)


solucion . anadir ( vactual )

si

solucion . valida ()

entonces

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 )

si no
retorna
si no
(

s o l u c i o n . es_vacio ? ( ) )

entonces

( solucion )

solucion . borrar ( vactual )

asignacion

54

CAPTULO 6.

fsi
si no
fsi
fpara
retorna
fsi
ffuncion

SATISFACCIN DE RESTRICCIONES

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

solucin

vfuturas

ir guardando

las soluciones parciales. El hacer el recorrido en profundidad hace que el coste espacial de
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).

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

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

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.

55

BUSCANDO DE MANERA DIFERENTE

R1=2

R1=1

R2=1 NO
R2=2 NO
R2=3

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

Backtracking a R2

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

R3=1

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

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,

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

Xi , podemos

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

R=c o n j u n t o

de

arcos

haya

del

problema

modificaciones

en

en

los

ambos

dominios

sentidos
de

las

variables

r_j

que

destino

r_i

hacer

r=e x t r a e r _ a r c o (R)

es
es
para cada
si no
/

r_i

la

variable

del

origen

r_j

la

variable

del

destino

fsi
fpara
fmientras
fAlgoritmo

el

tiene

eliminar
anadir

en
v

dominio

ningn

del

valor

dominio

todos

los

menos

el

arcos
( r_j

de

de

r_i

en

arco
arco

dominio

de

del

hacer

el

cumpla

entonces

v_i

que

tengan

como

r_i )

O(k r) siendo r el nmero


y k un factor constante (hay

El coste del algoritmo es


(contando los dos sentidos)

del

de restricciones del problema


que tener en cuenta que

es

cuadrtico respecto al nmero de variables).

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

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

{Axul, Rojo}

X1

{Azul}

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.

57

BUSCANDO DE MANERA DIFERENTE

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,

cumple la propiedad de consistencia desde 2 hasta

que se cumple cuando un grafo

k.
2

Esta propiedad asegura que si el grafo tiene anchura

y es k-consistente fuerte, en-

contraremos una solucin sin necesidad de hacer backtracking, desgraciadamente probar


esto necesita un tiempo exponencial.

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.

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

mo de forward checking. Se puede comprobar que el 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

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.

59

OTRA VUELTA DE TUERCA

R1=1

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

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

R2=4

R2=3

Back a R1

R2=4

R3={2}

R3={}
R4={2,3}

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

R4={3}

R3=2

R3=1

R4={}

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

1+5

2+4

3+3|2+3

3+3

4+3

4+2

5+2

3+3

4+2

6+1

5+1

6+1

7+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

1+5

2+4
3

5 7

3+3|2+3

3+3

3+3

4+3

4+2

5+2

4+2

6+1

5+1

10

11

6+1

7+1

12

7+0

Este es el recorrido que obtendra el algoritmo de IDA .

1 13

0+6
2

14

1+5

2+4
3

15

5 8

19

3+3|2+3

3+3
16

21

4+3

4+2

5+2

10

3+3

20
4 6 9 18

17

4+2

6+1

5+1
22

6+1

7+1
23

7+0

11

12

7.2.

63

BSQUEDA LOCAL

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

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

ptimo entre cada local)


En los siguientes apartados se proponen diferentes alternativas para algunos de 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.

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.

65

BSQUEDA LOCAL

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.

7.3.

PROBLEMAS RESUELTOS

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

a)

3 4

2 3 4

10

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)

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.

c)

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.

67

JUEGOS

8
8

5
5

5 6 7

b)

2 3 4

2
3 4

0
9

10

9
8

8
9

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

6 7

= inf,2,3
= +inf,5

= 5
= +inf,2

3 4

= inf
= +inf,5,2

= 2
= +inf,5,3

= 3
= +inf,5

68

CAPTULO 7.

= inf,5,8
= +inf

PROBLEMAS RESUELTOS

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

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

= 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.

69

SATISFACCIN DE RESTRICCIONES

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)

A=1

2)

B=

3)
4)
7)
8)
9)

6 1,2
C= 6 2,3
D= 6 2,6 3
C= 6 3
B= 6 2
A= 6 1,2

70

CAPTULO 7.

Forward checking
1)

A=1
B={6

1,2}

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

1,2,3}

B=2
C={6

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

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

4)

A=2
B={1,6
C={6

2}
2,3}

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

2,3}

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

6)

1,3}

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

7)

D=2
E={3}

8)

E=3

3}

PROBLEMAS RESUELTOS

También podría gustarte