Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Inteligencia Artificial Resolucion de Problemas Algoritmos de Busqueda
Inteligencia Artificial Resolucion de Problemas Algoritmos de Busqueda
de problemas
Resolucion
Algoritmos de busqueda
Javier Bjar
$
BY:
er
$
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.
ndice general
1. Resolucin de problemas
1.1.
Qu es un problema?
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2.
El espacio de estados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3.
2. Bsqueda no informada
11
2.1.
11
2.2.
11
2.3.
. . . . . . . . . . . . . . . . . . . . . .
12
2.4.
. . . . . . . . . . . . . . . . . . . . . .
15
3. Bsqueda heurstica
17
3.1.
El conocimiento importa . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
3.2.
. . . . . . . . . . . . . . . . . . . . . . . . . .
17
3.3.
T primero y t despus . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
3.4.
El algoritmo A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
3.5.
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.
31
. . . . . . . . . . . . . . . . . . . . . . . . . .
31
NDICE GENERAL
4.2.
Tu s, vosotros no . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
32
4.3.
35
4.4.
37
4.4.1.
Codicacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
38
4.4.2.
Operadores
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
39
4.4.3.
Combinacin de individuos . . . . . . . . . . . . . . . . . . . . . . .
40
4.4.4.
41
4.4.5.
Cuando usarlos
42
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
43
5.1.
T contra mi o yo contra ti
. . . . . . . . . . . . . . . . . . . . . . . . . .
43
5.2.
44
5.3.
. . . . . . . . . . . . . . . . . . . . . . .
46
5.4.
Seamos an ms inteligentes . . . . . . . . . . . . . . . . . . . . . . . . . .
48
6. Satisfaccin de restricciones
51
6.1.
De variables y valores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
51
6.2.
52
6.2.1.
. . . . . . . . . . . . . . . . . . . . . .
53
6.2.2.
Propagacin de restricciones . . . . . . . . . . . . . . . . . . . . . .
54
6.2.3.
57
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?
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:
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:
Satisfaccin de restricciones:
puedan plantear como un conjunto de variables a las que se han de asignar valores
cumpliendo ciertas restricciones.
Juegos:
1.2.
El espacio de estados
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
1.
2.
Funcin de transformacin,
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
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
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:
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
determinada
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.
(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.
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.
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,
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
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
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 ( )
generar_sucesores
Completitud:
solucin, si no lo es, es posible que algoritmo no acabe o que sea incapaz de encontrarla.
Complejidad temporal:
cin del tamao del problema, generalmente a partir del factor de ramicacin y la
profundidad a la que se encuentra la solucin.
Optimalidad:
preferencia o coste.
Atendiendo a estos criterios podemos clasicar los algoritmos principales que estudiaremos en:
1.3.
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.
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.
11
12
CAPTULO 2.
BSQUEDA NO INFORMADA
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.
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
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,
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
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:
O(p),
O(rp).
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
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
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
2.4.
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
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
Captulo 3
Bsqueda heurstica
3.1.
El conocimiento importa
3.2.
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).
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
c(ni , nj ).
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
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
h(ni )
K(ni , nj ),
ni
g(nj )
K(ni , nj ),
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:
h(n)
funcin
heurstica. De esta manera tendremos una estimacin del coste del camino mnimo que
pasa por cierto nodo:
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 ( )
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
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:
h0
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
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
optimista
del coste
Ejemplo 3.2 Podemos ver en este ejemplo dos grafos de bsqueda, uno con una funcin
admisible y otra que no lo es
1
A
2
B
5
C
(1+2)
(1+3)
(2+2)
(3+1)
(3+1)
J
(4+1)
(1+5)
(2+2)
(4+0)
Objetivo
A
2
B
C
(1+2)
(2+2)
(1+4)
D
(1+5)
H
(2+0)
Objetivo
(3+1)
(4+0)
Objetivo
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
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 )
ni
h0 :
ptima entre nodos. Si esta propiedad se cumple esto quiere decir que
uniforme de
h.
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.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.
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
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
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.
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 ).
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
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 ,
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-
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.
(
). Este algoritmo utiliza la estrategia
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.
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
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
ramicacin y poda
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
ascenso de colinas (Hill-climbing). Existen diferentes variantes que tienen sus ventajas
e inconvenientes.
4.2.
33
TU S, VOSOTROS NO
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
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
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).
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.
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.
35
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.
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
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-
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
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
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
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.
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
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
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.
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
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
40
CAPTULO 4.
BSQUEDA LOCAL
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:
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
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 .
a)
Pcruce
1 Pcruce
generacin
b)
Pmutacion
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
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
Captulo 5
Bsqueda con adversario
5.1.
T contra mi o yo contra ti
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.
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.
1 La
competicin no solamente aparece en el caso de los juegos, pero los algoritmos que veremos tambin
son aplicables.
43
44
CAPTULO 5.
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
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)
5.2.
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
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
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
46
CAPTULO 5.
5.3.
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
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
5.3.
47
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 )
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 )
El algoritmo tiene una funcin principal (MiniMax) que es la que retorna la mejor
valorMin)
La funcin
al nivel
48
CAPTULO 5.
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
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
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 )
alfa
como valor de
MiniMax
beta.
a la funcin
valorMax
le pasar
como
50
CAPTULO 5.
=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
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 (
variables, las restricciones son los arcos, y los dominios de las variables son los diferentes
1 En
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.
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.
variables y
un espacio de bsqueda de
6.2.
53
considerable.
Veremos tres aproximaciones a la resolucin de problemas de satisfaccin de restricciones, la primera se basar en bsqueda no informada, la segunda se basar en la reduccin
de espacio de bsqueda del problema y la tercera intentar combinar ambas.
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
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 )
asignacion
54
CAPTULO 6.
fsi
si no
fsi
fpara
retorna
fsi
ffuncion
SATISFACCIN DE RESTRICCIONES
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).
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
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.
55
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)
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.
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.
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
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 )
del
es
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}
6.2.
57
igual a 3 se denomina
camino consistencia,
k-consistencia fuerte,
k.
2
2 Se
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-
6.3.
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
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)
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.
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
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
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
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
por un camino de mejor coste y reexpandido ya que llega a ser la mejor alternativa.
En el caso del IDA
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
7.2.
Bsqueda local
supermercados y
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
a)
supermercados
64
CAPTULO 7.
PROBLEMAS RESUELTOS
b)
supermercados y los
c)
y para cada
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
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
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)
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)
c)
Solucin:
a)
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
= 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
7.4.
Satisfaccin de restricciones
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
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