Documentos de Académico
Documentos de Profesional
Documentos de Cultura
3.1. Introducción.
59
2) Prueba: Examinar si el árbol de búsqueda contiene alguna solución, o sea, si
uno de los estados generados es el estado final, entonces
TERMINAR y EXITO. En caso contrario aplicar la función de
evaluación a cada uno de los estados generados.
3) Generar:
a) Si los recursos computacionales están agotados o no existen en el
árbol estados sin procesar, entonces TERMINAR y FALLO, en caso
contrario continuar.
b) Aplicar la función de selección de estados a los estados del árbol de
búsqueda para seleccionar uno de ellos.
c) Aplicar la función de selección de movimientos al estado
seleccionado.
d) Generar los nuevos estados aplicando los movimientos
seleccionados.
e) Repetir desde el paso de prueba.
Dentro de estos dos tipos existen diferentes métodos de búsqueda, los cuales
están determinados por la forma en que se construyen las funciones de selección
de estados y de movimientos. Entre estos métodos podemos señalar:
60
Esquema de reducción: En este esquema el problema se descompone en varios
subproblemas, los cuales se resuelven de manera independiente y luego se
combinan sus soluciones para obtener la solución del problema original. Existen
dos tipos de movimientos: un conjunto de movimientos de reducción que se
encarga de la descomposición de un estado en otros que se supone sean más
fáciles de manejar que el original y el otro constituye un conjunto de movimientos
terminales que resuelven el problema completamente.
- Espacio de estado.
- Espacio de reducción de problemas.
- Árboles de juego.
61
Analicemos cada uno de estos tipos.
Espacio de estado.
Veamos un ejemplo:
Consideremos el problema de “jugar al ajedrez”. Nuestro objetivo no sólo es jugar
la partida, sino ganar la misma. Es necesario, en primer lugar, especificar cuál es
la posición inicial del tablero de ajedrez (nodo inicial), las reglas que definen los
movimientos legales en este juego y qué posiciones del tablero representan una
victoria para un jugador u otro (nodos finales). Además debemos hacer explícita la
meta de no solo jugar una partida de ajedrez, sino también ganar dicha partida si
podemos. Una forma de describir la posición inicial del tablero puede ser
mediante una matriz de 8x8, donde cada elemento es un símbolo que representa
la pieza del ajedrez que está situada en la posición de apertura del ajedrez.
Nuestra meta podría ser tratar de llegar a una posición del tablero, en la cual el
oponente no pueda realizar ningún movimiento legal y su rey esté amenazado.
Los movimientos legales proporcionan la manera de llegar desde el estado inicial
hasta el estado meta. Pueden describirse como un conjunto de reglas donde la
parte izquierda describa una posición del tablero que debe coincidir con la actual
y la parte derecha describa la nueva posición del tablero una vez ejecutado dicho
movimiento. Existen diversas maneras de describir estas reglas:
1) Tableroi Tableroj
donde Tableroi es una matriz de 8x8 que representa, por ejemplo, la posición
inicial del tablero y Tableroj es otra matriz de 8x8 que representa, por ejemplo, el
tablero del ajedrez con todas sus piezas en su posición inicial y el movimiento
P4R realizado.
Como puede verse, esta representación requiere una regla separada para cada
120
una de las 10 posiciones posibles del tablero, lo cual presenta tres dificultades:
nadie puede proporcionar el conjunto de tales reglas, pues esto requeriría mucho
tiempo, es difícil lograrlo sin cometer errores y ningún programa puede manejar
fácilmente todas esas reglas aunque se usen tablas hash para encontrar de forma
rápida las reglas relevantes para cada movimiento. El solo hecho de almacenar
tantas reglas crea dificultades.
62
corresponde a una posición válida del tablero. Podemos jugar al ajedrez
empezando en un estado inicial, usando un conjunto de reglas para movernos de
un estado a otro, intentando finalizar en uno de entre un conjunto de estados
finales.
63
9. (X,Y | X+Y≤4 ∧ Y>0) → (X+Y,0) Verter todo el contenido del jarro de 3 litros
en el jarro de 4 litros.
10. (X,Y | X+Y≤3 ∧ X>0) → (0,X+Y) Verter todo el contenido del jarro de 4 litros
en el jarro de 3 litros.
Por supuesto, para resolver este problema de los jarros de agua, es necesario
implementar un mecanismo que seleccione la regla cuya parte izquierda
concuerde con el estado actual, genere los nuevos estados y así sucesivamente,
hasta alcanzar el estado final. Estos métodos los estudiaremos en las próximas
secciones.
64
Espacio de reducción de problema.
A diferencia del espacio de estado, en este espacio el nodo inicial o nodo raíz del
árbol representa el problema original que se desea resolver, los nodos finales o
metas constituyen problemas que pueden resolverse mediante una primitiva
simple y los restantes nodos representan subproblemas en que puede
descomponerse un determinado problema. Los arcos serían, entonces, operadores
que permiten descomponer un problema en un conjunto de subproblemas.
Existen dos tipos de nodos. Si sólo basta con resolver uno de los subproblemas en
que se descompuso un nodo dado para resolver éste, el nodo se denomina nodo O
(or). Si por el contrario, deben ser resueltos todos los subproblemas en que se
descompuso el nodo, éste se denomina nodo Y (and).
Adquirir un TV
65
significa encontrar un camino entre las ciudades 1 y 6 y un camino entre las
ciudades 6 y 11. Lo mismo ocurre para el subproblema de encontrar el camino
por la segunda vía. Una porción del árbol y/o correspondiente a esta
descomposición del problema original puede verse en la figura 3.3.
2 3
4 5 6
7 8 9
10 11
66
Camino 1-11
OR
AND AND
OR
AND AND
Fig. 3.3. Porción del árbol AND/OR correspondiente al problema de la fig. 3.2.
Árboles de juego.
Un caso especial de los árboles y/o son los árboles de juego, donde participan dos
jugadores. En un árbol de juego el nodo raíz representa la posición inicial del
juego y los nodos terminales representan posiciones del juego donde un jugador
gana, pierde o hace tablas. Los operadores son, precisamente, los movimientos
legales que pueden realizarse en dicho juego. Este tipo de árbol se caracteriza por
tener en el primer nivel a los nodos que se derivaron de movimientos del primer
jugador y en el segundo nivel, a los que se derivaron de movimientos del segundo
jugador y así sucesivamente se van alternando por niveles.
En la figura 3.4 se muestra una porción del árbol de juego del titafor. Este
espacio de búsqueda tiene 362 880 nodos. Estas magnitudes demuestran la
necesidad de utilizar métodos de búsqueda eficientes.
67
3.2.1.2. Representación del espacio de búsqueda.
Estado inicial
Movs. Jugador A
x x x
x x x
x x x
Movs. Jugador B
o o o
x x x o x x o x x x
o o o
68
(0,0)
(4,0) (0,3)
Fig. 3.5. Porción del espacio de búsqueda del problema de los jarros de agua
representado en forma de árbol.
(0,0)
(4,0) (0,3)
Fig. 3.6. Porción del espacio de búsqueda del problema de los jarros de agua
representado en forma de grafo.
69
Hemos descrito la búsqueda como el proceso de recorrer un árbol o un grafo,
donde cada nodo representa un punto en el espacio del problema. Pero, ¿cómo
representaremos cada nodo individual? Por ejemplo, en el ajedrez puede ser una
matriz en la que cada elemento tenga el carácter que representa la pieza en esa
posición y en el problema de los jarros de agua podemos usar dos enteros. Si el
problema es más complicado usaremos una FRC estudiada en el tema anterior.
70
cual consiste en que se tiene una bandeja en la que se colocan ocho
baldosas cuadradas. El noveno cuadrante sobrante queda sin cubrir. Cada
baldosa tiene un número sobre ella. Una baldosa que esté adyacente al
espacio en blanco puede deslizarse a dicho espacio. El juego consiste en,
dadas una posición inicial y una posición final (usualmente las baldosas en
orden consecutivo con el espacio en blanco en el centro), transformar la
posición inicial en la final, desplazando las baldosas. Al intentar resolver
este problema, podemos realizar un movimiento tonto. Los errores cometidos
pueden enmendarse, retrocediendo para deshacer cada paso incorrecto.
Lógicamente hace falta memorizar el orden de los pasos realizados para
poder corregirlos. Note que esto no fue necesario en el caso anterior.
3. Irrecuperables: En ellos los pasos dados incorrectamente para la solución
del problema no pueden deshacerse. Un ejemplo es el juego del ajedrez. Si se
realiza un movimiento estúpido, no se puede ignorar ni retroceder al
principio de la partida. Lo único que puede hacerse es tratar de realizar la
mejor jugada a partir de la situación actual. Necesitan aplicar mucho
esfuerzo en la toma de decisiones. Usualmente se analiza por adelantado
una secuencia de pasos antes de dar el primero.
Uno de los tipos de problemas más difíciles son los irrecuperables de resultados
inciertos. Ej: el Bridge.
Los problemas en los que se desea encontrar el mejor camino a la solución son
más difíciles de resolver que aquellos donde basta encontrar una solución
cualquiera, pues mientras los primeros requieren búsqueda exhaustiva, los
segundos pueden resolverse eficientemente usando técnicas heurísticas. Un
71
ejemplo de problema donde basta encontrar una solución se expone a
continuación.
72
Razonemos: la bala tarda 0.1s en alcanzar el blanco, suponiendo que viaja en
línea recta. La bala cae a una distancia d:
d = 1/2gt2 = 1/2(9.8)(0.1)2 = 0.049 m = 4.9 cm.
Si el hombre apunta 4.9 cm por encima del blanco daría en la diana. Pero se ha
supuesto que la bala viaja en línea recta, lo que entra en conflicto conque viaja en
una parábola.
73
3.2.3. Tercer paso: Aislar y representar el conocimiento necesario para
resolver el problema.
74
3.3.2. Búsqueda primero a lo ancho.
2 3
4 5 6 7
8 9 10 11 12
1 + b + b2 + ... + bd,
Para grandes valores de d, puede ser aproximada por bd. Es por esto que la
complejidad temporal de este método de búsqueda es O(bd), lo cual es una función
exponencial de d.
Este método tiene como ventaja que siempre encuentra el camino más corto a la
solución, si ésta existe, aún en el caso de que el espacio de búsqueda sea infinito,
por eso la búsqueda primero a lo ancho siempre encuentra una solución óptima
para esa medida.
75
- Los operadores irrelevantes o redundantes incrementarán grandemente el
número de nodos que deben explorarse.
Como en los caminos del CCC hay mucha información repetida se puede emplear
un árbol. El árbol equivalente al CCC del paso (d) es:
t(1, [t(2, [h(4), h(5)] ), t(3, [h(6), h(7)] )] )
76
Aquí meta/1 es un hecho que indica el nodo objetivo, miembro/2 es un predicado
que determina si un elemento es miembro de una lista, sucesor/2 indica el
sucesor de un nodo dado y append/3 concatena dos listas.
77
La búsqueda primero en profundidad es mejor cuando el nodo objetivo está
situado en la porción inferior izquierda del árbol de búsqueda, mientras que la
búsqueda primero a lo ancho es mejor cuando el nodo objetivo está situado en la
porción superior derecha de dicho árbol, según se muestra en la figura 3.8.
En la figura 3.8 se compara el orden de generación de los nodos del árbol por los
tres métodos analizados.
* * *
1* *2 1* *4 1,3* *2,6
3* 4* *5 *6 2* 3* *5 *6 4* 5* *7 *8
78
3.3.4. Búsqueda en árboles AND/OR.
Aunque no hay una diferencia formal entre un sistema de producción que trabaja
sobre un problema en una dirección hacia adelante y uno que trabaja en dirección
contraria, es conveniente hacer esta distinción explícita. Cuando un problema tiene
intuitivamente claro los estados y los objetivos, y además se decide emplear las
descripciones de estos estados como la base de datos del sistema de producción,
entonces se dice que el sistema de producción es con encadenamiento hacia
adelante. En este caso las reglas se aplican a la descripción de estados para
producir nuevas descripciones de estado. Estas reglas son llamadas F-reglas.
Si se decide usar las descripciones de los objetivos como base de datos, y las
reglas son aplicadas a las descripciones de los objetivos para producir descripciones
79
de subobjetivos, el sistema de producción es con encadenamiento hacia atrás y las
reglas se denominan B-reglas.
En este método las reglas son sólo aplicables si su parte condición es satisfecha
por la B.D. El siguiente procedimiento da la idea algorítmica de un módulo de
aplicación de reglas sencillo que está basado en este enfoque.
Procedimiento generar:
1) Identificar el conjunto S de reglas aplicables.
2) Mientras S no sea vacío,
a) Seleccionar una regla R de S.
b) Aplicar R, generando los nuevos estados y añadiéndolos a la B.D.
c) Si se generó el estado objetivo entonces TERMINAR y EXITO.
d) Si no, llamar nuevamente al procedimiento generar.
e) Eliminar R de S y anular el efecto de aplicar R.
80
Este procedimiento genera nuevos hechos a partir de la BD usando las reglas y
luego los añade.
Base de reglas
R1: Si X es divisible por 12, entonces X es divisible por 6.
R2: Si X es divisible por 20, entonces X es divisible por 10.
R3: Si X es divisible por 6, entonces X es divisible por 2.
R4: Si X es divisible por 10, entonces X es divisible por 5.
Supóngase que sabemos que algún número N es divisible por 12 y por 20 y que el
problema es determinar si N es divisible por 5. Comenzamos entrando esos datos a
la BD:
81
Se aplica R4 y se llega a la solución del problema.
Se obtiene otra solución: R1, R2, R4. El proceso continúa hasta que se hayan
establecido todas las maneras de poder conseguir la solución. El espacio de
búsqueda para este problema está representado en la figura 3.9. Note cómo en
este espacio cada operador de transición de estados es precisamente una regla de
producción.
Estado inicial
R1 R2
R2 R3 R1 R4
E → éxito
E
R3 R4 R2 R3 R4
E E
R4 R4 R4
E
E E
Fig. 3.9. Espacio de búsqueda del ejemplo del encadenamiento hacia delante.
En algunas aplicaciones el listado de las reglas podría utilizarse como plan para
conseguir un objetivo en un área de aplicación que fuera modelada por el sistema
de producción. En tal caso, podría ser útil identificar el camino más corto desde el
estado inicial al objetivo.
Desventajas
El comportamiento del sistema, al intentar solucionar un problema, puede ser
ineficaz y puede parecer también desatinado porque algunas de las reglas
ejecutadas podrían no estar relacionadas con el problema en cuestión. En el
ejemplo estudiado las reglas 1 y 3 no nos acercan a la solución del problema.
82
3.3.5.2. Búsqueda con encadenamiento hacia atrás (enfoque guiado por
objetivos).
En este enfoque el sistema centra su atención, únicamente, en las reglas que son
relevantes para el problema en cuestión. En él el usuario comienza especificando
un objetivo mediante la declaración de una expresión E cuyo valor de verdad hay
que determinar. La siguiente función da la idea algorítmica de un módulo simple
de aplicación de reglas que utiliza este enfoque.
Para ejecutar esta función, el usuario pregunta por el valor de verdad de validar
tomando como argumento la expresión E, donde E puede ser, por ejemplo, “N es
divisible por 5”. Lo primero que hace esta función es identificar todas las reglas
que tienen a E en el miembro derecho suponiendo que se hacen sustituciones
apropiadas. Si no existen tales reglas, se pide al usuario que proporcione alguna.
Si hay más de una regla, el sistema selecciona una, usando alguna estrategia de
resolución de conflictos. Cuando una regla es seleccionada, su parte condición C
es verificada con respecto a la B.D. Si C es verdadera en la B.D., entonces se
establece la verdad de E y el proceso puede terminar con éxito. Si C es falsa en la
B.D., entonces no se puede utilizar R para establecer la verdad de E y se
selecciona otra regla de S. Si C es desconocida (es decir no es verdadera ni falsa
en la B.D.), entonces se le considera como nuevo subobjetivo y se intenta
establecer su valor de verdad llamando recursivamente a validar con C como
argumento. Si validar(C) es verdadero, entonces la regla R es aplicable, se
establece la verdad de E y el proceso puede terminar con éxito. Si validar(C) es
falso, entonces se selecciona otra regla de S. Así, el proceso opera hacia atrás a
partir del objetivo, intentando alcanzar subobjetivos que puedan establecer dicho
objetivo por sí mismos.
83
Analicemos el ejemplo estudiado en la sección anterior, considerando las reglas y
la B.D. inicial utilizados en el ejemplo del tópico anterior. Supongamos
nuevamente que se quiere determinar si N es divisible por 5.
S1={R2}.
Los sistemas guiados por objetivos preguntan tanto al usuario como a la B.D. al
determinar la verdad de un subobjetivo. Así, el usuario no necesita entrar todos
los datos disponibles inicialmente, sino que puede esperar hasta que el sistema
pida datos.
El encadenamiento hacia atrás tiene como ventaja que no solicita datos ni aplica
reglas que no estén relacionadas con el problema en cuestión.
Nótese que en ambos métodos de búsqueda pueden usarse las mismas reglas,
tanto para razonar hacia delante desde el estado inicial como para razonar hacia
atrás desde el estado objetivo. Dependiendo de la topología del espacio del
problema, puede ser significativamente más eficiente la búsqueda en un sentido
que en otro. Tres factores influyen en esto:
- ¿Existen más estados iniciales posibles o más estados finales?. Preferiríamos
movernos desde un conjunto de estados lo más pequeño posible hacia el
conjunto de estados mayor, y por tanto, más fácil de encontrar. Un ejemplo
que ilustra esto es el siguiente: es más fácil conducir desde un lugar
desconocido a nuestra casa que desde ella a ese lugar desconocido. Existen
muchos más lugares que nos ayudan a llegar a nuestra casa de los que nos
84
pueden ayudar a llegar al lugar desconocido. Si podemos llegar a cualquiera
de ellos podemos llegar a casa fácilmente. Por tanto si nuestra posición de
partida es nuestra casa y nuestra meta el lugar desconocido, es mejor razo-
nar hacia atrás. Otro ejemplo es la integración simbólica, donde el estado
inicial es una fórmula que tiene el símbolo integral y el estado meta es un
conjunto de fórmulas que no tengan el símbolo integral. Luego empezamos
con un único estado inicial y un enorme número de estados metas. Es mejor
razonar hacia delante, usando las reglas de integración a partir de la
fórmula inicial, que empezar con una expresión arbitraria libre de integrales,
usando las reglas de diferenciación e intentar generar la integral inicial. En
los sistemas de diagnóstico hay pocas metas posibles, por lo que es mejor
usar el encadenamiento hacia atrás. Sin embargo, en el juego del ajedrez la
única alternativa posible es utilizar el encadenamiento hacia delante, pues el
número de hipótesis en este caso es virtualmente ilimitado.
85
desde el estado objetivo, hasta que ambas se encuentren en un estado común en
la frontera de ambas búsquedas. El camino a la solución se obtiene, entonces,
concatenando el camino desde el estado inicial con el inverso del camino desde el
estado objetivo. Para poder garantizar que ambas búsquedas se encuentren al
menos una de ellas debe seguir la estrategia de la búsqueda primero a lo ancho.
La utilización de este método exige, además, que los operadores del problema
sean invertibles.
Suponiendo que las comparaciones para identificar estados comunes pueden ser
hechas en un tiempo constante por nodo, la complejidad temporal es O(bd/2), ya
que cada búsqueda sólo necesita llegar hasta la mitad de la profundidad de la
solución. La complejidad espacial es también O(bd/2), pues una de las búsquedas
usa la estrategia de búsqueda primero a lo ancho. Recuerde que b es el máximo
número de hijos (o ramas) de los nodos y d, la profundidad de la solución.
Se han estudiado estrategias hacia delante y hacia atrás. A veces son útiles
estrategias mixtas. Con ellas se resuelven, en 1er lugar, las partes principales y
luego se vuelve atrás a resolver los “pequeños” problemas que surgen al “pegar” los
trozos grandes.
86
tenemos el segundo subproblema de llegar desde el estado producido por el
operador hasta el estado meta. Pero si la diferencia se ha escogido correctamente
y el operador es efectivo para reducirla, debería ser más fácil resolver los dos
subproblemas que el problema original. El proceso de reducción de diferencias
puede aplicárseles recursivamente. Para enfocar la atención del sistema en los
problemas mayores deben asignarse niveles de prioridad a las diferencias y
considerarse primero las de mayor prioridad.
Las diferencias son usadas para seleccionar F-rules relevantes accediendo a una
"tabla de diferencias" en la cual las F-rules están asociadas con las diferencias. Las
F-rules asociadas con una diferencia son aquellas F-rules que son relevantes para
reducir esa diferencia. Es necesario definir una tabla de diferencias para cada
dominio de aplicación.
87
Los análisis de reducción de diferencias se basan en un conjunto de reglas
STRIPS que pueden transformar un estado del problema en otro. Estas reglas
están formadas por las precondiciones (condiciones que deben cumplirse para
poder aplicarla) y los resultados. Analicemos el ejemplo de un dominio sencillo de
un robot. Supongamos que están disponibles los siguientes operadores STRIPS:
- EMPUJAR(obj,loc)
Precondición: EN(robot,obj) ∧ GRAN(obj) ∧ DESPEJAR(obj) ∧ BRAZOVACIO
Suprimir: EN(robot,locant) ∧ EN(obj,locant)
Añadir: EN(obj,loc) ∧ EN(robot,loc)
- LLEVAR(obj,loc)
Precondición: EN(robot,obj) ∧ PEQUEÑO(obj)
Suprimir: EN(robot,locant) ∧ EN(obj,locant)
Añadir: EN(obj,loc) ∧ EN(robot,loc)
- CAMINAR(loc)
Precondición: ninguna
Suprimir: EN(robot,locant)
Añadir: EN(robot,loc)
- COGER(obj)
Precondición: EN(robot,obj) ∧ BRAZOVACIO
Suprimir: BRAZOVACIO
Añadir: SOSTENER(obj)
- DEJAR(obj)
Precondición: SOSTENER(obj)
Suprimir: SOSTENER(obj)
Añadir: BRAZOVACIO
- COLOCAR(obj1,obj2)
Precondición: EN(robot,obj2) ∧ SOSTENER(obj1)
Suprimir: SOSTENER(obj1)
Añadir: ENCIMA(obj1,obj2) ∧ BRAZOVACIO
88
EMPUJAR LLEVAR CAMINAR COGER DEJAR COLOCAR
Mover objeto x x
Mover robot x
Despejar objeto x
Poner objeto sobre objeto x
Vaciar brazo x x
Sostener un objeto x
A B C D
----------------
Inicio EMPUJAR Meta
Hay que reducir las diferencias entre A y B y entre C y D. EMPUJAR tiene cuatro
precondiciones, que generan dos diferencias, pues ya el escritorio es grande y el
brazo se supone vacío. Podemos llevar al robot a la posición correcta usando
CAMINAR y la superficie del escritorio puede despejarse usando dos veces
COGER. Después del primer COGER, el intento de realizar el segundo produce
otra diferencia: el brazo debe estar vacío. Puede usarse DEJAR para reducir esta
diferencia. Después del segundo COGER, debemos nuevamente aplicar DEJAR
para que el brazo esté vacío. Una vez realizado EMPUJAR, el estado del problema
está cerca de la meta, pero no del todo. Para poner los objetos nuevamente en el
escritorio podemos usar COLOCAR. El progreso del resolutor de problemas en
este punto es:
Inicio Meta
A B C E D
89
Inicio
A B C
| | | | | | | ...
CAMINAR COGER DEJAR COGER DEJAR EMPUJAR
Meta
E D
... | | | | | | | | |
CAMINAR COGER LLEVAR COLOCAR CAMINAR COGER LLEVAR COLOCAR
90
3.4.1. Definición de heurística.
La palabra heurística viene del griego heuriskein que significa descubrir. Ella es
también el origen de eureka, que se deriva de la famosa exclamación de
Arquímedes eureka (“lo encontré”), que lanzó al descubrir un método para
determinar la pureza del oro. Otro libro dice que fue cuando Arquímedes salió
desnudo corriendo por la calle gritando eureka cuando descubrió el principio de
flotación mientras estaba en el baño. Feigenbaum y Feldman la definen así: “Una
heurística (regla heurística o método heurístico) es una regla para engañar,
simplificar o para cualquier otra clase de ardid, la cual limita drásticamente la
búsqueda de soluciones en grandes espacios de solución”.
NORTE
Vegetación verde
Movimiento de animales
OESTE
ESTE
Vegetación verde HOMBRE 91
Vegetación amarilla
SUR
Fig. 3.10. Panorama visto por el hombre desde la elevación.
Esto conduce a otra forma de definir la I.A., como el estudio de técnicas para
resolver problemas exponencialmente difíciles en un tiempo polinomial
explotando el conocimiento sobre el dominio del problema.
92
El papel exacto de las funciones heurísticas se estudiarán en cada uno de los
métodos de búsqueda heurística.
Ejemplo: Búsqueda de la ruta más corta entre las ciudades Santiago y Morón.
(Ver figura 3.11. ) Supongamos que h es la distancia en línea recta entre las dos
ciudades. La ruta sería: Stgo, Bayamo, Holguín, Morón.
93
Contramaestre
C. Hab. Mtzas
75 151 87
Stgo 140 Bayamo Holguín
99
92
118 80 211 142
97 Las Villas
138 Tunas 101 85
Palma 111 Ciego
Camagüey Morón
San Luis
Distancia en línea recta a Morón: Stgo( 366), Contramaestre(374), Palma(329),
Bayamo(253), Holguín(178), Tunas(193), Camagüey(101), C.Hab(224),
Mtzas(226), Las Villas(299), San Luis(160).
La búsqueda por el mejor nodo es una forma de combinar las ventajas de las
búsquedas en profundidad y de anchura en un único método. En cada paso del
proceso de búsqueda por el mejor nodo, seleccionamos el más prometedor de
aquellos nodos que se han generado hasta el momento. Esto se realiza aplicando
una función heurística apropiada a cada uno de ellos. Entonces expandimos el
nodo elegido usando las reglas para generar a sus sucesores. Si uno de ellos es
una solución podemos terminar. Si no, todos esos nodos se añaden al conjunto
de nodos generados hasta ahora. Se selecciona de nuevo el más prometedor y el
proceso continúa. Lo que sucede usualmente es que se realiza un proceso de
búsqueda en profundidad mientras se explora una rama prometedora. Como
ocasionalmente no se encuentra solución, se explora otra rama previamente
ignorada y que ahora parece más prometedora.
En este método de búsqueda la función heurística que estima los méritos de cada
nodo generado está definida como:
f(n) = g(n) + h(n),
donde g(n) es una medida del costo del camino desde el nodo inicial al nodo
actual n y h(n) es un estimado del costo adicional de llegar desde el nodo n al
nodo meta. g(n) no es, necesariamente, el costo del camino óptimo desde el nodo
inicial al nodo actual, pues puede haber caminos mejores no recorridos todavía.
g(n) simplemente se calcula como la suma de los costos de los arcos del camino
actual. La función h(n), sin embargo, es típicamente heurística y explota el
conocimiento sobre el domino del problema, ya que el “mundo” entre el nodo n y
el meta no ha sido explorado. Por supuesto, no existe un método general para
construir h(n), sino que depende del problema particular.
94
Se puede definir la función f*(n) que, en cualquier nodo n, calcule el costo real del
camino óptimo desde el nodo inicial al nodo n (g*(n)) más el costo del camino
óptimo desde el nodo n al nodo objetivo (h*(n)), es decir
f*(n) = g*(n) + h*(n),
donde h (n) es una función de evaluación heurística admisible, o sea, ∀n h*(n) es
*
menor o igual que la distancia real mínima a la meta. Es precisamente por esto
que el algoritmo que usa este estimador garantiza siempre encontrar, si existe, el
camino óptimo a la solución. A este algoritmo se le conoce con el nombre de
algoritmo A*.
A A A
(4) E (6) F
Paso 4 Paso 5
A A
B (5) C D B (5) C D
(2) I (1) J
Para implementar este algoritmo hay que mantener, además de la lista de nodos
visitados, una lista de nodos generados pero no visitados. Esta lista permite al
algoritmo retomar un camino que fue abandonado temporalmente por otro que
parecía más promisorio. Este método de búsqueda consiste en: el mejor nodo de
la lista de nodos generados y no visitados (inicialmente el nodo raíz) se expande
generando sus sucesores y se colocan en la lista de nodos visitados; la función de
evaluación heurística se aplica a todos los sucesores y ellos son insertados en la
lista de nodos no visitados en orden de su costo. En el ciclo siguiente se
selecciona el mejor nodo de esta lista para ser procesado.
95
Algoritmo:
Nodo:= Nodo Inicial
While not Objetivo(Nodo) do
Begin
Colocar Nodo en la lista de nodos visitados;
Para cada sucesor de Nodo do
Insertar en cola de prioridades según f a (Sucesor, f(sucesor)); -> Lista de
nodos no visitados
Nodo:= cabeza de la cola de prioridades;
End;
Por ejemplo, para el problema del rompecabezas de 8 piezas puede tomarse h*(n)
como el número de piezas que no están en su posición final. Otra variante, que
contiene más información heurística pero requiere más cálculos, es la suma de
las distancias desde la posición actual de cada pieza a su posición correcta.
Stgo
Bayamo Palma
118+329 Contramaestre
140+253 75+374
= 393 = 447
= 449
Stgo Holguín
280+366 239+178
= 646 Contram. Tunas = 417
291+374 220+193
= 665 = 413
Bayamo
San Luis Camagüey
300+253 Morón
358+160 317+101
= 553
= 518 = 418
96
Si el costo de los operadores varía, se refleja en cada nodo y se calcula el
camino de costo mínimo.
Para ver por qué el algoritmo A* no es adecuado para la búsqueda en árboles y/o,
consideremos la figura 3.14.
A
(7)
97
Los nodos de un árbol y/o pueden ser clasificados en:
- nodos primitivos: son los que se corresponden con problemas que se resuelven
directamente.
- nodos muertos: son los que se corresponden con problemas no descomponibles
y que no tienen solución.
- nodos intermedios.
Para cada uno de ellos el estimado heurístico h*(n) se puede definir como:
- Si n es un nodo primitivo, entonces h*(n) = 0
- Si n es un nodo muerto, entonces h*(n) = ∞
- Si n es un nodo intermedio con j conectores, entonces h*(n) es el mínimo de los
costos calculados para cada uno de los j conectores. Si el conector es Y,
entonces su costo es:
∑ (cos to(n, n
k
k ) + h * ( n k )),
En Rich 1era edición puede verse los pasos de este algoritmo expresados más
detalladamente. Bratko contiene una implementación del mismo en PROLOG.
La figura 3.15 muestra un ejemplo de una traza de este algoritmo. Los números
entre paréntesis indican el valor de h* en los nodos y los que no tienen paréntesis,
indican los costos de los arcos. Los nodos encerrados entre dos círculos son
nodos primitivos.
98
El algoritmo AO* no sirve cuando entre los subproblemas hay interacciones.
a a (2)
1 3
(1) b c (3)
Paso 3 Paso 4
a (4) a (6)
1 3 1 3
(1) h
Paso 5
a (8)
1 3
(9) b c (5)
1 1 2 1
99
1
2 3 4 nodo muerto
7 8 5 6
9 10
Algoritmo
1- Actual:= Estado inicial del problema
2- Siguiente:= sucesor de actual con mayor valor
3- Si valor(siguiente) < valor(actual) entonces
Devuelve actual y TERMINAR
sino
Actual:= siguiente
Ir al paso 2.
100
aleatorio, es decir, se ejecuta el algoritmo varias iteraciones comenzando desde
estados iniciales generados aleatoriamente y se guarda el mejor estado producido.
Desventajas:
- Máximos locales: Es una cima cuya altura es inferior a la cima más alta de todo
el espacio de estados. Una vez que ha alcanzado un máximo local, el algoritmo
para, aunque esta solución esté muy lejos de ser satisfactoria.
- Planicie: son áreas del espacio de estados en donde la función de evaluación
básicamente es plana. La búsqueda realizará un paseo al azar. En todos los
estados la función de evaluación da un valor muy similar y entonces se
escogerá cualquiera.
- Riscos: las laderas de algunos riscos tienen pendientes muy pronunciadas, por
lo que es fácil para una búsqueda llegar a la cima del risco; sin embargo puede
suceder que la pendiente de la cima se aproxime demasiado gradualmente a un
pico. A menos que existan operadores que se desplacen directamente por la
cima del risco, la búsqueda oscilará de un lado a otro obteniendo muy poco
avance.
3.5. Planificación.
101
extensa, pues debería incluir dónde está cada objeto en la casa junto con la
situación actual del robot. Una acción concreta por parte del robot cambiará sólo
una pequeña parte del estado total. Por ejemplo, si el robot empuja una mesa,
sólo cambiará la situación de la mesa y de los objetos que estaban sobre ella, pero
los restantes objetos no cambiarán. En lugar de escribir reglas que describan
transformaciones de un estado completo en otro, preferiríamos escribir reglas que
sólo describan las partes del estado afectadas y suponer que el resto permanece
constante.
102
DESAPILAR(x,y)
Precondición: ENCIMA(x,y) y DESPEJAR(x) y BRAZOVACIO
Suprimir: ENCIMA(x,y) y BRAZOVACIO
Añadir: SOSTENER(x) y DESPEJAR(y)
En este método, el resolutor de problemas usa una única pila que contiene tanto
las metas como los operadores que las satisfacen. El resolutor de problemas
dispone también de una B.D. que describe la situación actual y un conjunto de
operadores descritos en forma de STRIPS (listas precondición, añadir y suprimir).
Veamos un ejemplo del mundo de bloques: supongamos que se tienen los estados
inicial y meta mostrados en la figura 3.17.
103
B C B
A C D A D
Descompogamos este problema en cuatro subproblemas, uno por cada meta. Las
dos metas ENMESA ya están satisfechas en el estado inicial (le llamaremos para
abreviar EMAD), por lo que sólo trabajamos con las dos restantes.
Dependiendo del orden en que se escojan se pueden crear dos pilas de metas:
(1) (2)
ENCIMA(C,A) ENCIMA(B,D)
ENCIMA(B,D) ENCIMA(C,A)
ENCIMA(C,A) y ENCIMA(B,D) y EMAD ENCIMA(C,A) y ENCIMA(B,D) y EMAD
Para cada paso que haya tenido éxito debe proseguirse con la meta que está en la
cima de la pila. Cuando se halla una secuencia de operadores que la satisface, se
aplica dicha secuencia a la descripción del estado, produciendo una nueva
descripción. A continuación se explora la meta que está en la cima de la pila y se
intenta satisfacerla empezando en la situación producida como resultado de
satisfacer la primera meta. Este proceso continúa hasta que la pila de metas esté
vacía. Al comprobar la última meta, se compara la meta original con el estado
final derivado de la aplicación de los operadores escogidos. Si cualquiera de las
componentes de la meta no se satisface en ese estado, lo cual podría suceder si se
alcanzasen en cierto punto y se deshiciesen más tarde, se reinsertan en la pila las
partes de la meta aún no resueltas y se reanuda el proceso.
APILAR(C,A)
ENCIMA(B,D)
ENCIMA(C,A) y ENCIMA(B,D) y EMAD
104
la heurística de que si SOSTENER es una de las metas, se trate de satisfacer en
último lugar. Este tipo de información heurística podría incluirse en las mismas
listas precondición de los operadores, escribiendo las metas en el orden en que
deben satisfacerse. La pila de metas es ahora:
DESPEJAR(A)
SOSTENER(C)
DESPEJAR(A) ∧ SOSTENER(C)
APILAR(C,A)
ENCIMA(B,D)
ENCIMA(C,A) y ENCIMA(B,D) y EMAD
ENCIMA(B,A)
DESPEJAR(B)
BRAZOVACIO
ENCIMA(B,A) y DESPEJAR(B) y BRAZOVACIO
DESAPILAR(B,A)
SOSTENER(C)
DESPEJAR(A) y SOSTENER(C)
APILAR(C,A)
ENCIMA(B,D)
ENCIMA(C,A) y ENCIMA(B,D) y EMAD
SOSTENER(C)
DESPEJAR(A) y SOSTENER(C)
APILAR(C,A)
105
ENCIMA(B,D)
ENCIMA(C,A) y ENCIMA(B,D) y EMAD
(1) (2)
ENMESA(C) ENCIMA(C,x)
DESPEJAR(C) DESPEJAR(C)
BRAZOVACIO BRAZOVACIO
ENMESA(C) y DESPEJAR(C) y ENCIMA(C,x) y DESPEJAR(C) y
BRAZOVACIO BRAZOVACIO
COGER(C) DESAPILAR(C,x)
DESPEJAR(A) y SOSTENER(C) DESPEJAR(A) y SOSTENER(C)
APILAR(C,A) APILAR(C,A)
ENCIMA(B,D) ENCIMA(B,D)
ENCIMA(C,A) y ENCIMA(B,D) y EMAD ENCIMA(C,A) y ENCIMA(B,D) y EMAD
DESPEJAR(x)
SOSTENER(C)
DESPEJAR(X) y SOSTENER(C)
APILAR(C,x)
DESPEJAR(C)
BRAZOVACIO
ENCIMA(C,x) y DESPEJAR(C) y BRAZOVACIO
DESAPILAR(C,x)
DESPEJAR(A) y SOSTENER(C)
APILAR(C,A)
ENCIMA(B,D)
ENCIMA(C,A) y ENCIMA(B,D) y EMAD
106
poner B sobre D, luego lo más eficiente es hacerlo ahora. El programa podría
hacer esto comparando los operadores que están compitiendo con el resto de la
pila. Si uno hace alguna de estas metas se escoge éste. Luego aplicamos
APILAR(B,D) emparejando a D con x en APILAR. La pila de metas es ahora:
DESPEJAR(D)
SOSTENER(B)
DESPEJAR(D) y SOSTENER(B)
APILAR(B,D)
ENMESA(C) y DESPEJAR(C) y BRAZOVACIO
COGER(C)
DESPEJAR(A) y SOSTENER(C)
APILAR(C,A)
ENCIMA(B,D)
ENCIMA(C,A) y ENCIMA(B,D) y EMAD
C B
A B C
107
ENCIMA(A,B) ENCIMA(B,C)
ENCIMA(B,C) ENCIMA(A,B)
ENCIMA(A,B) y ENCIMA(B,C) ENCIMA(A,B) y ENCIMA(B,C)
DESPEJAR(C)
BRAZOVACIO
DESPEJAR(C) y BRAZOVACIO
DESAPILAR(C,A)
BRAZOVACIO
DESPEJAR(A) y BRAZOVACIO
COGER(A)
DESPEJAR(B) y SOSTENER(A)
APILAR(A,B)
ENCIMA(B,C)
ENCIMA(A,B) y ENCIMA(B,C)
Podemos eliminar de la pila las metas que ya han sido satisfechas y llegamos a
BRAZOVACIO de COGER(A). Para satisfacerla necesitamos DEJAR(C). Podemos
continuar quitando elementos hasta que la pila sea:
ENCIMA(B,C)
ENCIMA(A,B) y ENCIMA(B,C)
1- DESAPILAR(C,A) 6- DEJAR(A)
108
2- DEJAR(C) 7- COGER(B)
3- COGER(A) 8- APILAR(B,C)
4- APILAR(A,B) 9- COGER(A)
5- DESAPILAR(A,B) 10- APILAR(A,B)
109
ENCIMA(A ,B)
ENCIMA (B,C)
Fig. 3.19. Porción del árbol de búsqueda para el problema de la fig. 3.18.
110
precondiciones cada vez menos críticas hasta haber considerado todas las
precondiciones de las reglas originales.
Dando los valores críticos a las reglas STRIPS, el proceso básico funciona de
manera similar a como lo hacen los planificadores no jerárquicos.
111
3.6. Teoría de juegos.
Los juegos tienen para muchos una inexplicable fascinación, y la idea de que los
computadores pudieran jugar ha existido al menos desde que éstos existen. El
famoso arquitecto de computadoras Charles Babbage, antes de tiempo, pensó en
programar su Máquina Analítica para jugar al ajedrez, y más tarde pensó
construir una máquina para jugar al titafor. Dos de los pioneros de la ciencia de
la información y de la computación contribuyeron a la incipiente literatura de
juegos por computadora: Claude Shannon escribió un artículo en el que describía
mecanismos que podían usarse en un programa que jugase al ajedrez y unos
años después, Alan Turing describió un programa para este juego, aunque nunca
lo construyó. Al principio de los 60, Arthur Samuel tuvo éxito al construir el
primer programa importante y operacional para jugar. Su programa jugaba a las
damas y, además de jugar las partidas, podía aprender de sus errores y mejorar
su actuación.
Había dos razones para que los juegos pareciesen ser un buen dominio en el cual
explorar la inteligencia de la máquina:
- Proporcionan una tarea estructurada en la que es muy fácil medir el éxito o el
fracaso.
- No es obvio que requieran gran cantidad de conocimientos. Se pensó que se
podrían resolver por búsqueda directa a partir del estado inicial hasta la
posición ganadora.
Por lo tanto, es evidente que un programa que realice una simple búsqueda
directa del árbol de juego, no podrá seleccionar ni siquiera su primer movimiento
durante el período de vida de su oponente. Es necesaria alguna clase de
procedimiento de búsqueda heurística.
Una manera de ver todos los procedimientos de búsqueda estudiados es que son
de generar-y-comprobar. En un extremo, el generador propone soluciones
completas y el comprobador las evalúa. En el otro extremo, el generador genera
movimientos individuales del espacio de búsqueda, cada uno de los cuales se
evalúa por el comprobador, eligiendo el más prometedor de ellos. Para mejorar la
efectividad de un programa resolutor de problemas basado en la búsqueda
existen dos opciones:
112
En los programas de juegos es particularmente importante que se hagan ambas
cosas. Naturalmente en ellos, como en otros dominios de problemas, la búsqueda
no es la única técnica disponible. Por ejemplo, en el ajedrez tanto las aperturas
como los finales están casi siempre altamente estudiados, de manera que se juega
mucho mejor consultando una tabla en una B.D. que almacene modelos
comprobados. Así, para jugar un juego completo pueden combinarse ambas
técnicas.
113
3.6.1. Conceptos principales.
En esta sección sólo consideraremos los juegos entre dos personas con
información completa, o sea, los juegos en que los jugadores realizan jugadas
alternadamente y ambos conocen completamente lo que han hecho y pueden
hacer, pues cada movimiento conduce a un conjunto de estados completamente
predecible, como por ejemplo, el ajedrez, las damas, el titafor, etc. No tendremos
en cuenta los juegos de azar.
Imagínese que se quiere jugar una partida de ajedrez con las blancas pero no
podemos estar presentes personalmente durante el juego. Se tiene un sustituto
que debe desarrollar la partida y cumplir todas las indicaciones, pero él no sabe
jugar bien al ajedrez y no es capaz de tomar decisiones independientes. Para que
el sustituto pueda desarrollar toda la partida hasta el final, deben dársele tales
indicaciones que prevean cualesquiera posiciones posibles en el tablero y
determinen para cada posición la jugada que debe hacerse. El sistema completo
de estas indicaciones es lo que se conoce como estrategia. La estrategia del
jugador constituye la descripción unívoca de su elección en cada situación posible
en la que él debe hacer una jugada.
Y1 Y2 Y3 Y4 A(X)
X1 7 2 5 1 1
X2 2 2 3 4 2
X3 5 3 4 4 3*
X4 3 2 1 6 1
B(Y) 7 3* 5 6
114
L(X1,y)={7,2,5,1} representa la ganancia del primer jugador con la estrategia
X1.
A(Xk)=min L(Xk,y)
y
En la teoría de juegos se supone que los jugadores obran con suficiente cuidado
evitando el riesgo infundado. En este caso, el primer jugador debe elegir la
estrategia que maximice A(X). Designando la ganancia garantizada del primer
jugador por ALFA y llamándole precio puro inferior del juego, se obtiene:
En la tabla el valor ALFA está marcado en la columna A(x) por un asterisco (*).
B(Yk)=max L(x,Yk)
x
115
cuenta la bondad de los estados futuros. La otra variante es considerar, al
calcular el precio de un estado, sus consecuencias futuras. Obviamente, la
segunda vía resulta mejor. Esta última variante presupone generar, a partir de
una situación dada que se considerará el nodo inicial, los nodos sucesores de éste
hasta cierto nivel de profundidad, para lo cual se pueden usar los métodos de
búsqueda ya estudiados. El nivel de profundidad al que se realiza el corte puede
ser llegar a una posición final, pero esto sólo es posible en juegos muy simples. Si
los nodos hojas no corresponden a posiciones finales es necesario calcular el
precio de éstos y propagar los mismos hasta el nodo inicial para entonces aplicar
el criterio de los precios superior e inferior por cada jugador.
116
terminales y por eso ya evaluados usando la función de evaluación. Si esos nodos
corresponden a una situación en la cual le toca jugar a MAX lo llamaremos MAX-
nodo y se le asignará como valor el máximo de las evaluaciones de sus nodos
sucesores. Si, por el contrario, corresponden a una situación en la cual está MIN
en posición de jugar lo llamaremos MIN-nodo y el valor asignado será igual al
mínimo de la evaluación de los nodos sucesores. Se continúan propagando
valores nivel a nivel hasta que finalmente se evalúan los nodos sucesores del
nodo inicial. Estamos asumiendo que a MAX le toca jugar al inicio, de modo que
MAX debe seleccionar como su primer movimiento el que corresponde al sucesor
con mayor valor. Esta regla puede ser formalizada de la forma siguiente:
denotemos el valor estáti-co de una posición P por v(P) y el valor propagado por
V(P). Sean P1,..,Pn las posiciones sucesoras de P.
A A
B C D
B C D
(8) (3) (-2) E F G H I J K
(9) (-6) (0) (0) (-2) (-4) (-3)
117
A (-2)
Capa maximizante
E F G H I J K
(9) (-6) (0) (0) (-2) (-4) (-3)
118
en el árbol para calcular correctamente el valor minimax de la posición raíz. Esta
deficiencia puede ser reducida considerablemente si se ejecuta la evaluación de
los nodos terminales y el cálculo de los valores propagados simultáneamente con
la generación del árbol. Esta mejora se basa en la idea siguiente: supongamos
que hay dos movimientos alternativos y uno de ellos muestra que es claramente
inferior al otro, por lo que no es necesario, entonces, conocer cuán inferior es
para tomar la decisión correcta.
A (>3)
Capa maximizante
B C
(3) (>-5)
Capa minimizante
(3) D (5) E (-5) F G
A
Capa maximizante
Alfa=3
B C
Beta=5 Capa minimizante
D E F 7>5 G H
(3) (5) (4)
Capa maximizante
I J M N
(5)
K L (7) (8) Capa minimizante
(0) (7)
Fig. 3.24. Atajos alfa-beta.
119
Al realizar la búsqueda representada en la figura 3.24, se explora el árbol entero
encabezado por B, y descubrimos que en A podemos esperar un tanteo de 3 como
mínimo (ALFA=3). Cuando este valor ALFA se pasa a F nos permite podar L.
Veamos por qué. Después de examinar a K, vemos que I proporciona un tanteo
máximo de 0, lo que significa que F produce un mínimo de 0, pero esto es menor
que el valor ALFA de 3, por lo que no necesitamos explorar más ramas de I. El
jugador maximizante sabe que no debe elegir C e I a partir de C, pues ir por B es
mejor. Después se examina J que produce un valor de 5 y se le asigna a F, ya que
5 > 0. Este valor se convierte en el valor BETA del nodo C y nos garantiza que el
valor de C será 5 o menos. A continuación se expande G y se examina primero M
con un valor de 7. Pero ahora se compara 7 con el valor BETA. Como es mayor y
el jugador que tiene el turno del nodo C está tratando de minimizar, entonces ese
jugador no elegirá G, que conduce a un tanteo de 7 como mínimo, puesto que
puede irse por F. Por tanto, no es necesario explorar ninguna de las otras ramas
de G.
Debido a estas restricciones podemos enunciar las reglas siguientes para podar la
búsqueda:
a) Puede podarse debajo de cualquier nodo MIN que tenga un valor BETA
menor o igual al valor ALFA de sus nodos MAX padres. El valor final
propagado de este nodo MIN será entonces el valor BETA. Este valor puede
no ser el mismo que el obtenido por una búsqueda MINIMAX completa, pero
su uso trae por consecuencia que se seleccione el mismo mejor movimiento.
b) Puede podarse debajo de cualquier nodo MAX que tenga un valor ALFA
mayor o igual al valor BETA de cualquiera de sus nodos MIN padres. El
valor final propagado de este nodo MAX será entonces el valor ALFA.
Para ejecutar una poda ALFA-BETA, al menos alguna parte del árbol de búsqueda
tiene que ser generado a la profundidad máxima, porque los valores ALFA y BETA
se basan en los valores estáticos de los nodos terminales. Por eso, algún tipo de
búsqueda primero en profundidad se emplea usualmente al utilizar este
procedimiento.
Además, la cantidad de cortes que pueden ser hechos durante una búsqueda
depende del grado en que los valores ALFA y BETA iniciales aproximen los valores
120
propagados finalmente. El valor final propagado del nodo inicial es idéntico al
valor estático de alguno de los nodos terminales. Si este nodo terminal es el
primero que se alcanza en la búsqueda primero en profundidad, la cantidad de
cortes sería máxima, lo cual provoca que se generen y evalúen una cantidad
mínima de nodos hojas.
Profundización iterativa.
Se introdujo en CHESS 4.5 (Slate y Atkin 1977). En lugar de buscar en el árbol de
juego con una profundidad fija comienza buscando en una sola capa y luego aplica
la función de evolución estática. Entonces hace lo mismo para dos capas, tres, etc.
Se llama así porque en cada iteración la búsqueda se hace más profunda. A 1ra
vista parece un despilfarro pero tiene sus ventajas:
121
Debido a las restricciones de tiempo, cuando se considere fuera de tiempo,
puede cortarse la búsqueda en cualquier momento. En una profundidad fija no
puede estimarse el tiempo que se va a llevar.
Si se juzga que un movimiento es superior a sus hermanos en la iteración
previa, puede buscarse en él 1ro en la próxima iteración. Con este ordenamiento
la poda ALFA-BETA es más efectiva.
Esperando el reposo
A A
B C (-4) B C (0)
(6) (0)
(0) (-4)
E F
Fig. 3.25 Situación inicial.
Fig. 3.26 Situación después de expandir el nodo B.
122
A
Capa maximizante
(6) B (0) C
Capa minimizante
(6) E (7) F
Capa maximizante
G H I J
(5) (6) (7) (6)
Búsqueda secundaria
123
ayudarnos a evitar esto, aún es posible, dada la profundidad finita de cualquier
búsqueda, arrastar algo importante más allá del horizonte, donde nunca sea
notado.
- Se basa principalmente en el supuesto de que el oponente siempre elegirá el
movimiento óptimo. Supongamos que estamos perdiendo la partida y que
debemos elegir entre dos movimientos, uno de los cuales es ligeramente menos
malo que el otro. Si realizando el movimiento más malo es más probable que el
oponente cometa un error, nuestra jugada se convertiría en una muy buena.
En situaciones similares es mejor correr el riesgo de que el oponente cometa el
error. Sin embargo, en este caso el procedimiento MINIMAX no elegirá el
movimiento deseado por nosotros. Para tomar correctamente estas decisiones,
es importante tener acceso a un modelo del estilo de juego individual del
oponente, de forma que pueda estimarse la probabilidad de los diversos errores
que éste pudiera cometer. Pero esto es muy difícil de proporcionar.
EJERCICIOS PROPUESTOS
A B
C B C
2- Trazar la ejecución del procedimiento generar del enfoque guiado por datos
cuando se intenta determinar si N es divisible por 2 dada la siguiente base de
reglas y la B.D. inicial que contiene los hechos N es divisible por 10 y N es
divisible por 12.
Base de reglas
R1: Si X es divisible por 12, entonces X es divisible por 6.
R2: Si X es divisible por 20, entonces X es divisible por 10.
R3: Si X es divisible por 6, entonces X es divisible por 2.
R4: Si X es divisible por 10, entonces X es divisible por 5.
124
3- Trazar la ejecución del procedimiento validar del enfoque guiado por objetivos
cuando se intenta determinar si N es divisible por 2 dada la base de reglas del
ejercicio anterior y la B.D. inicial que contiene los hechos N es divisible por 10 y N
es divisible por 12.
Paso 1 Paso 2
A A
D
(2+4)
Paso 3
A
(1+4) B C (1+3)
(2+2) E D (2+4)
125
A
B C D
E F G H I J K
L M N O P Q R S T U V W X Y
7 6 8 5 2 3 0 2 6 2 5 8 9 2
7- Dos jugadores están frente a una pila de objetos. El primer jugador divide la
pila original en dos pilas que no pueden tener la misma cantidad de elementos.
Cada jugador alternadamente hace lo mismo. El juego continúa hasta que todas
la pilas tengan uno o dos objetos, pues en este punto se hace imposible
continuar. El jugador que primero no pueda jugar es el perdedor.
126
Bibliografía
[IPN88]
Resumen
127