x - Universidad de Las Palmas de Gran Canaria

Download Report

Transcript x - Universidad de Las Palmas de Gran Canaria

3. Búsqueda y
Planificación
Jorge Cabrera Gámez
Departamento de Informática y Sistemas
Universidad de Las Palmas de Gran Canaria
© Todos los derechos reservados
FIA-3
Contenidos
3.
Búsqueda y Planificación.
(10 horas)
3.1 El agente que planifica.
3.2 Técnicas de búsqueda no informada.
3.3 Técnicas de búsqueda informada.
3.4 Técnicas de búsqueda con adversario.
3.5 Planificación, acción y aprendizaje.
3.6 Bibliografía básica.
2
Objetivos:
• Un agente capaz necesita explorar.
• Igual Problema <--> Idéntica Solución o el porqué
de una representación formal basada en estados y
operadores.
• Conocer los métodos de exploración más comunes.
• La heurística permite una búsqueda más efectiva.
• Procedimientos de búsqueda para juegos.
• La actividad de un agente real es algo más que
exploración: el ciclo percibir-planificar-actuar.
3
El Agente que Planifica
El agente reactivo tiene sus posibles acciones “compiladas”
en memoria.
Esto supone que deben haberse anticipado todas y cada
una de las posibles situaciones a dilucidar por el agente.
En caso de que esto fuese posible fuera de entornos muy
restrictivos, la memoria necesaria podría llegar a ser
inmensa.
¿Es este enfoque suficiente para un agente que debe
evolucionar en un entorno real?.
4
El Agente que Planifica
Frente al agente reactivo, puede promocionarse otro tipo
de agente capaz de “calcular” qué acciones son adecuadas
a cada situación.
Este agente es en principio mucho más fácil de mantener
o modificar. Además es posible que sea capaz de
extrapolar su comportamiento a situaciones inicialmente
no previstas por el diseñador.
Debe ser capaz de predecir las consecuencias de sus
acciones, para lo que se requiere un modelo del mundo en
el que evoluciona.
5
A B C
((A)(B)(C))
A
B C
((AB)(C))
A
B C
((B)(AC))
C
A B
((A)(CB))
B
A C
((BA)(C))
B
A C
((A)(BC))
C
A B
((CA)(B))
6
B
A
C
A
B C
((BAC))
((B)(AC))
C
A
B
((CAB))
((BCA))
((CA)(B))
A B C
((AB)(C))
A
C
B
((ACB))
((A)(CB))
((A)(B)(C))
B
A C
((AB)(C))
((CAB))
A
C B
C
A B
A
B C
C
B
A
B
C
A
B
A C
((A)(BC))
A
B
C
((ABC))
7
Sistemas de resolución de problemas
• Datos o representación: describen las situaciones posibles
* Situación inicial
ESTADOS
* Situación final u objetivo
* Situaciones intermedias
• Operadores: transforman una situación del problema en otra
* cambiando/transformando la situación actual
* generando subproblemas más simples
• Estrategia de control: qué operadores escoger en función
de la situación actual
8
OP_C
estado2
OP_D
estado3
estado1
OP_A
OP_A
OP_E
estado4
estado5
OP_B
Solución al problema:
Encontrar la secuencia correcta de operadores que
permite alcanzar el estado objetivo desde el estado inicial.
9
Dos formulaciones:
A. Espacio de Estados
B. Reducción de Problemas
Problema inicial
And
OP_A
SubProblema #1
SubProblema #2
OP_C
Primitiva A
OP_B
Primitiva B
Or
Primitiva C
10
Un ejemplo:
pq
Sean p,q,r,s,t,y u proposiciones
lógicas relacionadas según:
rsp
tuq
ru
r
El problema:
demostrar el teorema
u
q
p
tu
rs
t
r
?
s
qp
r
11
Ejemplo.
El problema de las jarras de agua. Nos dan dos
jarras con una capacidad de 4 y 3 litros
respectivamente. Ninguna tiene marca alguna de
medida. El problema consiste en obtener
exactamente 2 litros de agua en la jarra de 4
litros. Se supone que podemos obtener toda el
agua que sea necesaria de un depósito en el que
también podemos verter agua si esto fuese
necesario.
12
El problema de las jarras de agua:
El espacio de estados:
El conjunto de pares ordenados (x,y), tal que
x = 0,1,2,3,4 e y = 0,1,2,3, donde x e y representan
respectivamente el volumen de agua contenido en la
jarra de 4 y de 3 litros.
Estado inicial: (0,0)
Estado final: (2, n), para cualquier valor posible de n.
13
El conjunto de operadores:
1. (x,y), si x < 4  (4,y) ; Llena la jarra de 4 litros
2. (x,y), si y < 3  (x,3) ; Llena la jarra de 3 litros
3. (x,y), si x > 0  (0,y) ; Vacía la jarra de 4 litros
4. (x,y), si y > 0  (x,0) ; Vacía la jarra de 3 litros
5. (x,y), si (x+y)  4 e y > 0  (4,y-(4-x)) ; Llena la
jarra de 4 litros con el contenido de la jarra de 3 litros
6. (x,y), si (x+y)  3 e y > 0  (x-(3-y),3) ; Llena la
jarra de 3 litros con el contenido de la jarra de 4 litros
7. (x,y), si (x+y)  4 e y > 0  (x+y,0) ; Vacía el
contenido de la jarra de 3 litros en la de 4 litros
8. (x,y), si (x+y)  3 e x > 0  (0,x+y) ; Vacía el
contenido de la jarra de 4 litros en la de 3 litros
14
Una solución al problema:
Agua en la jarra Agua en la jarra
de 4 litros
de 3 litros
Operador
0
0
Llena la de 3
0
3
Vacía la de 3 en la de 4
3
0
Llena la de 3
3
3
Llena la de 4 con parte la de 3
4
2
Vacía la de 4
0
2
Vacía la de 3 en la de 4
2
0
Estado objetivo
15
El problema de los misioneros y los caníbales.
En el problema de los misioneros y los caníbales se
tienen 3 misioneros en una orilla de un río y 3
caníbales en la orilla opuesta. Para cruzar el río se
dispone de un bote que puede transportar a la otra
orilla a una o dos personas. El objetivo es encontrar
la sucesión de cruces que logre llevar a todos a la
otra orilla. El problema radica en que si en algún
instante los misioneros quedan en inferioridad
numérica en cualquier orilla serán devorados por los
caníbales.
16
La explosión combinatoria
Principal problema en la resolución de problemas por
exploración de alternativas
Complejidad: recursos en tiempo y memoria de una máquina
Nº de estados en el ajedrez ~ 10120
Edad del Universo ~ 1017 segundos
Máquina con velocidad de exploración de 1 estado/picosegundo,
es decir, 1012 estados/sg
Desde el comienzo del Universo habría explorado sólo 1029 estados
17
Factor de Ramificación
(exploración en árboles)
Exploración ordenada
Ordenar la exploración de los
estados por expectativas de éxito
Explosión
combinatoria
Se eliminan las ramas del árbol
que no se consideran adecuadas
Exploración con poda
Conocimiento específico al problema
(Heurística)
18
La exploración en árboles
Procedimiento de búsqueda no informados
Procedimiento de búsqueda informados
Procedimiento de búsqueda con adversario
19
Ejemplo que se empleará para ilustrar los diferentes
métodos de exploración no informados e informados.
A
B
C
S
G
D
E
F
20
A
B
C
S
G
D
E
S
F
A
D
B
C
E
D
El árbol expandido del
grafo anterior
(evitando la repetición
de nodos en un camino)
D
A
E
B
F
B
F
G
C
G
C
E
B
E
A
F
C
G
F
G
21
Esqueleto de función que es capaz de recoger numerosas
estrategias de exploración
function GENERAL-SEARCH(problema, estrategia) {
"Devuelve una solución o fallo"
Inicializar el árbol de búsqueda usando el estado inicial de “problema”
loop do
if no hay nodos para expandir then return fallo
elegir un nodo-hoja para expandir de acuerdo con “estrategia”
if el nodo contiene el nodo meta then return la solución
expandir el nodo y añadir los nodos resultantes al árbol
end
}
22
Estructura de datos y funciones asociadas para
exploración en árboles.
En lo que sigue asumiremos que un nodo se definirá como
una estructura de datos con los siguientes componentes:
• El estado en el espacio de estados al que este nodo
representa.
• El nodo que lo generó o nodo padre de este nodo.
• El operador que se aplicó para generar este nodo.
• El número de nodos desde este nodo al nodo raiz,
v.g la profundidad del nodo.
• El coste acumulado en el trayecto desde el nodo raiz a
este nodo.
23
La diferencia entre nodos y estados
Es importante destacar aquí la diferencia entre nodos y
estados.
Un nodo es simplemente una estructura de datos
auxiliar que resulta adecuada para representar el
proceso de búsqueda en un determinado problema y
en un instante dado, de acuerdo con un cierto
procedimiento de búsqueda.
Un estado representa por contra una cierta
configuración del mundo o entorno donde se desarrolla
el problema. Así los nodos tienen antecesores o nodospadre, profundidad, etc, mientras los estados no.
24
Esqueleto de función que es capaz de recoger numerosas
estrategias de exploración
function GENERAL-SEARCH(problem, QUEUING-FN) {
"Devuelve una solución o fallo"
nodes <-- MAKE-QUEUE(MAKE-NODE(INITIAL-STATE[problem]))
loop do
if EMPTY?(nodes) then return failure
node <-- REMOVE-FRONT(nodes)
if GOAL-TEST(problem, state(node)) then return node
nodes <-- QUEUING-FN(nodes, EXPAND(node,problem))
end
}
25
Representación de la colección de nodos susceptibles de
expansión en el proceso de exploración.
Asumiremos que esta colección de nodos se implementará
como una cola, con los siguientes métodos u operadores:
MAKE-QUEUE(Elements) crea una cola con los elementos
dados.
EMPTY?(Queue) devuelve true sólo si la cola no contiene
elementos.
REMOVE-FRONT(Queue) extrae el elemento situado en la
cabeza de la cola y lo devuelve.
QUEUING-FN(Elements,Queue) define la función que se
emplea para insertar los elementos en la cola. Veremos que
diferentes métodos de búsqueda sólo difieren en la
definición de esta función.
26
Esqueleto de función que es capaz de recoger numerosas
estrategias de exploración
function GENERAL-SEARCH(problem, QUEUING-FN) {
"Devuelve una solución o fallo"
nodes <-- MAKE-QUEUE(MAKE-NODE(INITIAL-STATE[problem]))
loop do
if EMPTY?(nodes) then return failure
node <-- REMOVE-FRONT(nodes)
if GOAL-TEST(problem, state(node)) then return node
nodes <-- QUEUING-FN(nodes, EXPAND(node,problem))
end
}
27
Métodos de búsqueda no informados
•
Búsqueda en amplitud
•
Búsqueda en profundidad
•
Búsqueda limitada en profundidad
•
Búsqueda progresiva en profundidad
28
Búsqueda en amplitud
(Breadth-First search)
29
S
A
D
B
C
E
D
D
A
E
B
F
B
F
G
C
G
Búsqueda en amplitud
C
E
B
E
A
F
C
G
F
G
30
Búsqueda en amplitud
• La estrategia de control:
--> visitar todos los nodos de un nivel antes de
explorar los nodos hijos (siguiente nivel)
• Los últimos nodos expandidos se insertan en el
final de la cola
function BREADTH-FIRST-SEARCH(problem) {
return GENERAL-SEARCH(problem, ENQUEUE-AT-END)
}
31
Búsqueda en amplitud
Propiedades
Completitud
Garantiza el encontrar una solución si existe;
y si existen varias devuelve la de menor profundidad
Optimalidad
El método de exploración es óptimo: Devuelve la
solución de menor coste siempre que el coste no
sea una función decreciente con la profundidad
32
Búsqueda en amplitud
Complejidad
Propiedades
Supongamos un árbol cuya solución se encuentra a
profundidad d y cuyo factor de ramificación es b.
Entonces el nº de nodos a expandir antes de
alcanzar la solución será:
1+b+b2+b3+ ... +bd
Dado que es necesario expandir cada uno de los
nodos (en el peor de los casos) y, además,
conservarlos en memoria, los requerimientos en
tiempo y en espacio (memoria) son ambos O(bd).
33
Búsqueda en amplitud
Ejemplo
Propiedades
Supongamos una máquina capaz de explorar 1000 nodos/sg y que
cada nodo requiere 100 bytes de memoria, si el factor de ramificación
es 10:
Profundidad
Nodos
Tiempo
Memoria
0
2
4
6
8
10
12
14
1
111
11.111
106
108
1010
1012
1014
1 msg
0,1 sg
11 sg
18 minutos
31 horas
128 días
35 años
3500 años
100 bytes
11 Kb
1 Mb
111 Mb
11 Gb
1 Terabyte
111 Tb
11.111 Tb
34
Búsqueda en profundidad
(Depth-First search)
35
S
A
D
B
C
E
D
D
A
E
B
F
B
F
G
C
G
Búsqueda en profundidad
C
E
B
E
A
F
C
G
F
G
36
Búsqueda en profundidad
• La estrategia de control:
--> visitar primeramente los nodos hijos hacia los
niveles de mayor profundidad
• Los últimos nodos expandidos se insertan por la
cabeza de la cola
function DEPTH-FIRST-SEARCH(problem) {
return GENERAL-SEARCH(problem, ENQUEUE-AT-FRONT)
}
37
Búsqueda en profundidad
Propiedades
Completitud
Garantiza el encontrar una solución si existe y el árbol
es finito;
Optimalidad
El método de exploración no es óptimo: No
garantiza la solución de menor coste
38
Búsqueda en profundidad
Complejidad
Propiedades
Los requerimientos en memoria son muy modestos,
sólo es necesario guardar una única trayectoria
desde el nodo raiz. Así para un árbol con
profundidad máxima m y factor de ramificación b,
sólo es necesario almacenar b*m nodos.
Los requerimientos en tiempo son O(bm).
39
Búsqueda en profundidad
Propiedades
Suele funcionar mejor que el de búsqueda en
amplitud en problemas con muchas soluciones,
siempre que no se requiera la optimalidad de la
solución, pues encuentar la solución tras explorar
sólo una pequeña porción del árbol.
Debe evtarse en árboles infinitos o de gran
profundidad.
40
Búsqueda limitada en profundidad
(Depth-limited search)
41
S
A
D
B
C
E
D
D
A
E
B
F
B
F
G
C
G
C
Búsqueda limitada en profundidad
E
B
E
A
F
C
G
F
G
42
Búsqueda limitada en profundidad
• La estrategia de control:
--> visitar primeramente los nodos hijos hacia los
niveles de mayor profundidad hasta una
profundidad máxima preestablecida.
• Los últimos nodos expandidos se insertan por la
cabeza de la cola
function DEPTH-LIMITED-SEARCH(problem, depth) {
return GENERAL-SEARCH(problem,
ENQUEUE-AT-FRONT
depth)
}
43
Esqueleto de función que es capaz de recoger numerosas
estrategias de exploración
function GENERAL-SEARCH(problem, QUEUING-FN,[depth]) {
"Devuelve una solución o fallo"
nodes <-- MAKE-QUEUE(MAKE-NODE(INITIAL-STATE[problem]))
loop do
if EMPTY?(nodes) then return failure
node <-- REMOVE-FRONT(nodes)
if GOAL-TEST(problem, state(node)) then return node
nodes <-- QUEUING-FN(nodes, EXPAND(node,problem,[depth]))
end
}
44
Búsqueda limitada en profundidad
Propiedades
Al fijar un límite en la profundidad de búsqueda se
pueden controlar las dos características más
problemáticas de la búsqueda en profundidad:
las soluciones que se puedan encontrar nunca
estarán más allá de la profundidad límite y se evita
el que la búsqueda pueda quedar “atrapada” en una
rama si el árbol es infinito o muy profundo.
45
Búsqueda progresiva en
profundidad
(Iterative Deepening search)
46
S
A
D
B
C
E
D
D
A
E
B
F
B
F
G
C
G
Búsqueda progresiva en
profundidad (profundidad = 1)
C
E
B
E
A
F
C
G
F
G
47
S
A
D
B
C
E
D
D
A
E
B
F
B
F
G
C
G
Búsqueda progresiva en
profundidad (profundidad = 2)
C
E
B
E
A
F
C
G
F
G
48
S
A
D
B
C
E
D
D
A
E
B
F
B
F
G
C
G
Búsqueda progresiva en
profundidad (profundidad = 3)
C
E
B
E
A
F
C
G
F
G
49
S
A
D
B
C
E
D
D
A
E
B
F
B
F
G
C
G
Búsqueda progresiva en
profundidad (profundidad = 4)
C
E
B
E
A
F
C
G
F
G
50
Búsqueda progresiva en profundidad
• La estrategia de control:
--> realizar una exploración limitada en profundidad
donde el límite se va incrementando si la búsqueda
con el límite anterior no tiene éxito.
function ITERATIVE-DEEPENING-SEARCH(problem) {
for depth <-- 0 to infinity do
if DEPTH-LIMITED-SEARCH(problem,depth)succeeds
then return its results
end
return failure
}
51
Búsqueda progresiva en profundidad
Propiedades
Completitud
Garantiza el encontrar una solución si existe, sea o no
el árbol finito.
Optimalidad
El método de exploración es óptimo: garantiza la
solución de menor coste.
52
Búsqueda progresiva en profundidad
Complejidad
Propiedades
La gran ventaja de este método frente a los vistos
hasta ahora es que combina los mejores ventajas de
la búsqueda en amplitud: es óptimo y completo;
y la búsqueda en profundidad: los requerimientos
en memoria son muy modestos, sólo es necesario
guardar una única trayectoria desde el nodo raiz. Así
para un árbol con profundidad máxima m y factor
de ramificación b, sólo es necesario almacenar b*m
nodos.
Los requerimientos en tiempo son O(bm).
53
Métodos de búsqueda informados
•
Búsqueda en escalada
•
Búsqueda por haces
•
Búsqueda “el mejor primero”
•
A*
54
Ejemplo que se empleará para ilustrar los diferentes
métodos de exploración informados.
3
A
4
B
5
S
4
D
4
C
5
2
E
G
4
F
3
55
Búsqueda en Escalada
(Hill-Climbing search)
56
Búsqueda en Escalada
La eficacia de la exploración en profundidad puede
aumentarse si se dispone de alguna medida que nos
permita ordenar los nodos hijos, de tal forma que se
exploren primero aquellos que presenten una mayor
expectativa de éxito.
La selección ordenada de los nodos puede realizarse en
función de algún parámetro que resulte de un
conocimiento específico del problema
57
Ejemplo que se empleará para ilustrar los diferentes
métodos de exploración informados.
3
A
4
B
5
S
4
h(A,G) = 10.4
h(E,G) = 6.9
h(C,G) = 4.0
D
4
C
5
2
E
h(D,G) = 8.9
h(B,G) = 6.7
h(F,G) = 3.0
G
4
F
3
“Cuanto mayor más alejado”
58
S
A
10.4
B
8.9
D
D
A
10.4
E
6.9
3.0
C
E
D
E
6.7
B
F
B
F
G
C
G
Búsqueda en escalada
C
E
A
B
F
C
G
F
G
h(A,G) = 10.4 h(D,G) = 8.9
h(E,G) = 6.9 h(B,G) = 6.7
h(C,G) = 4.0 h(F,G)59= 3.0
Búsqueda en Escalada
• La estrategia de control:
--> realizar una exploración en profundidad
donde los sucesores se van insertando
ordenadamente (por la cabeza) en la cola.
function HILL-CLIMBING-SEARCH(problem) {
return GENERAL-SEARCH(Problem,
ENQUEUE-AT-FRONT-SORTED)
}
60
Búsqueda en Escalada
Propiedades
Este procedimiento es equivalente a realizar un
movimiento en el espacio de la medida heurística que
guía la búsqueda.
Se trata de tomar en cada paso la dirección de
máxima pendiente los que asegura que se asciende lo
más rápidamente posible y que se alcanza la cima o
meta en el menor tiempo posible.
61
Búsqueda en Escalada
Problemas
1. Existencia de máximos locales. Sólo se asegura una
optimización local y no global.
2. La existencia de “mesetas” o zonas planas, en las que
la búsqueda procede a “ciegas”.
3. Existencia de aristas o discontinuidades en la
pendiente, que limitan la optimización a una de tipo
local.
62
Búsqueda por Haces
(Beam search)
63
Búsqueda por Haces
Se trata de una variante del método de exploración en
amplitud. No se desciende por todas las ramas, sino por un
conjunto seleccionado o “haz”, ignorándose el resto.
La selección de las ramas adecuadas se realiza en base a
criterios heurísticos específicos al problema. Las ramas no
seleccionadas simplemente no se exploran, produciéndose
una “poda” de las ramas menos prometedoras.
Criterios de poda
• Por umbral en el número de ramas
• Por umbral del trayecto acumulado
según una cierta función heurística
64
Ejemplo que se empleará para ilustrar los diferentes
métodos de exploración informados.
3
A
4
B
5
S
4
D
4
C
5
2
E
G
4
F
3
65
S
A
6.7
B
4.0
C
X
E
10.4
D
X
D
8.9
A
X
10.4
8.9
E
6.9
6.7
XB
6.9
3.0
F
G
Búsqueda por haces
limitando a 2 el nº de ramas que no se podan
h(A,G) = 10.4 h(D,G) = 8.9
h(E,G) = 6.9 h(B,G) = 6.7
h(C,G) = 4.0 h(F,G)66= 3.0
Búsqueda por Haces
• La estrategia de control:
--> realizar una exploración en amplitud donde los
sucesores se van insertando ordenadamente
(por el final) en la cola que se poda.
function BEAM-SEARCH(problem) {
return GENERAL-SEARCH(Problem,
ENQUEUE-AT-END-PRUNNING)
}
Este procedimiento no garantiza el encontrar la solución
(no es completo).
67
Búsqueda “el mejor primero”
(Best-First search)
68
Búsqueda “el mejor primero”
En cada ciclo se selecciona para expansión el nodo más
prometedor de todos los generados hasta ese momento.
En la práctica es una mezcla de búsqueda en profundidad
y, eventualmente, en amplitud debido a un cambio de
rama. Por este motivo a esta técnica de búsqueda se la
denomina también de “ramificación y salto” (Branch-andbound).
Supongamos que tomamos como nodo más prometedor
aquel de menor coste acumulado en la trayectoria. Con
esta elección de la función de coste a este método se le
denomina también de “coste uniforme”.
69
Ejemplo que se empleará para ilustrar los diferentes
métodos de exploración informados.
3
A
4
B
5
S
4
D
4
C
5
2
E
G
4
F
3
70
S
4
3
A
D
7
8
B
11
C
E
14
D
12
18
F
G
10
15
9
D
E
6
A
B
E
13
14
B
F
C
G
Búsqueda “el mejor primero”
C
E
11
15
A
B
15
F
C
G
F
G
71
10
13
Búsqueda “el mejor primero”
• La estrategia de control:
--> realizar una exploración donde los sucesores
se van insertando ordenadamente
(de mejor a peor) por la cabeza de la cola.
function BEST-FIRST-SEARCH(problem, EVAL-FN)
{
QUEUEING-FN  a function that orders nodes by EVAL-FN
return GENERAL-SEARCH(Problem, QUEUEING-FN )
}
72
Búsqueda “el mejor primero”
Propiedades
Completitud y Optimalidad
El método de búsqueda es óptimo y completo
Complejidad
Puede demostrarse que la complejidad espacial y
temporal de este método de búsqueda son ambas
O(bd), siendo b el factor de ramificación y d la
profundidad máxima del árbol.
73
IDEA
Los métodos de búsqueda que utilizan una función de
coste pueden mejorarse de forma notable utilizando una
estimación del coste o distancia total al nodo objetivo en
la trayectoria en estudio.
Así para un cierto nodo n, el coste total puede
formularse de la siguiente forma:
f *(n) = g(n) + h*(n)
donde,
g(n): coste acumulado (conocido) a lo largo de la
trayectoria hasta el nodo n.
h*(n): estimación del coste restante desde el nodo n
hasta el nodo objetivo.
f *(n): estimación del coste total (desde el nodo inicial al
nodo objetivo).
74
Si se le asigna a un nodo un coste estimado, h*(n),
superior al que realmente, puede ocurrir que la búsqueda
no se realice en el orden correcto y la trayectoria
resultante no sea óptima.
Se puede demostrar que si h*(n) es una subestimación
del coste restante, entonces la obtención de la trayectoria
óptima está garantizada.
75
8-Puzzle
1
2
8
7
6
3
1
3
7
4
8
1
4
5
2
6
5
Estado objetivo
(xio, yio)
Estado actual
(xia, yia)
Heurísticas
• Nº de piezas mal colocadas (1,2,3,7): 4
• Distancia Manhattan=
 (|xia-xio|+|yia-yio|)
Distancia Manhattan: 2(1)+3(2)+1(3)+4(7) = 10
76
S
13.4
A
B
D
A
19.4
E
17.7
3
4
A
S
B
5
4
D
4
2
G
4
B
12.9
13.0
F
13.0
G
C
5
E
12.9
D
F
3
Búsqueda “el mejor primero”
(con subestimación del coste total)
f *(n) = g(n) + h*(n)
h(A,G) = 10.4 h(D,G) = 8.9
h(E,G) = 6.9 h(B,G) = 6.7
h(C,G) = 4.0 h(F,G) 77
= 3.0
Búsqueda A*
78
A*
Este procedimiento es una combinación de la estrategia
“el mejor primero” empleando una función de coste con
subestimación y la idea que se presenta en la siguiente
diapositiva.
Está especialmente diseñado para la búsqueda en grafos,
es decir, controla que no se exploren trayectorias
duplicadas.
Veremos que garantiza el encontrar la trayectoria
(solución) óptima si esta existe.
79
D
S
A
C
G
B
IDEA
IDEA
Si la trayectoria óptima entre A y G es S-A-B-C-G, y en la
Si en la lista de trayecorias recorridas existen varias
lista de trayectorias recorridas existen varias trayectorias
trayectorias “similares”, es decir, que terminan en el mismo
“similares”, es decir, que terminan en el mismo nodo final,
nodo final, sólo la óptima (la de menor coste) podrá
sólo la óptima (la de menor coste) podrá formar parte de
formar parte de la trayectoria óptima.
la trayectoria óptima, pudiéndose eliminar las otras.
Este procedimiento de “poda” no compromete la
Este procedimiento de “poda” no compromete la
completitud.
completitud.
80
Algoritmo del procedimiento A*
81
1. Formar una lista de trayectorias parciales, ABIERTA con una trayectoria
inicial que comienza en el nodo raiz. Formar otra lista, CERRADA, que
contendrá las trayectorias desechadas mínimas, e iniciarlizarla a vacía.
2. Hasta que ABIERTA esté vacía o se encuentre el objetivo,
2.1 Analizar la primera trayectoria de ABIERTA.
2.2 Si la trayectoria termina en el nodo objetivo, terminar.
2.3 En otro caso:
2.3.1 Eliminar la primera trayectoria de ABIERTA, incluyéndola en
CERRADA. Si es de coste menor que otra similar, ya contenida en
CERRADA, se elimina esta última.
2.3.2 Formar nuevas trayectorias a partir de la trayectoria extraída
de ABIERTA mediante la expansión del último nodo de la misma.
2.3.3 Añadir nuevas trayectorias a ABIERTA, si existen.
2.3.4 Ordenar ABIERTA de menor a mayor coste.
2.3.5 Si dos o más trayectorias de ABIERTA terminan en un nodo
común, eliminarlas excepto la de mínimo coste. Eliminar esta última
también si existe otra similar con menor coste en CERRADA. Las
trayectorias eliminadas de ABIERTA deben insertarse en CERRADA
salvo que ésta ya contenga trayectorias similares de menor coste.
3. Si se alcanza el nodo objetivo, el problema tiene solución y se determina
la trayectoria óptima, en caso contrario no tiene solución.
82
La función de coste estimado
Este método emplea una función de coste total
estimado f *(n). Así para un cierto nodo n, el coste total
estimado puede formularse de la siguiente forma:
f *(n) = g(n) + h*(n)
donde,
g(n): coste acumulado (conocido) a lo largo de la
trayectoria hasta el nodo n.
h*(n): estimación del coste restante h(n) desde el nodo
n hasta el nodo objetivo.
f *(n): estimación del coste total (desde el nodo inicial al
nodo objetivo).
83
La función de coste estimado
La función h*(n) está ligada a un conocimiento
heurístico del problema y debe ser positiva y
representar una subestimación del coste restante h(n).
0  h*(n)  h(n)
Se dice que la búsqueda es más informada cuanto
mayor sea el valor de h*(n), siempre que h*(n)  h(n).
84
Propiedad de Admisibilidad
Si en un procedimiento A* todos los costes son positivos y
h*(n) es una subestimación de h(n), entonces se garantiza
el encontrar la trayectoria de mínimo coste, si existe, y el
procedimiento se dice admisible.
Propiedad de Optimalidad
Si el procedimiento A1 (con heurística h1*(n)) está más
informado que otro A2 (con heurística h2*(n)) y siendo
ambos admisibles (esto es h(n)  h1*(n)  h2*(n)  0)
entonces A1 nunca expande un nodo que no haya sido
expandido por A2 (A1 expande menos nodos que A2)
85
8-Puzzle
1
2
8
7
6
3
1
3
7
4
8
1
4
5
2
6
5
Estado objetivo
(xio, yio)
¿Son admisibles?
¿Cuál es más
informada?
Estado actual
(xia, yia)
Heurísticas
• Nº de piezas mal colocadas (1,2,3,7): 4
• Distancia Manhattan=
 (|xia-xio|+|yia-yio|)
Distancia Manhattan: 2(1)+3(2)+1(3)+4(7) = 10
86
Nº de nodos expandidos
D
2
4
6
8
10
12
14
16
18
20
22
24
IDS
10
112
680
6384
47127
364404
3473941
-
Factor de ramificación efectivo
A*(h1)
A*(h2)
IDS
A*(h1)
A*(h2)
6
13
20
39
93
227
539
1301
3056
7276
18094
39135
6
12
18
25
39
73
113
211
363
676
1219
1641
2.45
2.87
2.73
2.80
2.79
2.78
2.83
-
1.79
1.48
1.34
1.33
1.38
1.42
1.44
1.45
1.46
1.47
1.48
1.48
1.79
1.45
1.30
1.24
1.22
1.24
1.23
1.25
1.26
1.27
1.28
1.28
Datos promedios para 100 casos del 8-puzzle, comparativa entre búsqueda
progresiva en profundidad y el A* con h1 = nº de piezas mal colocadas y h2
87
distancia Manhattan.
Factor de ramificación efectivo
Si el número de nodos expandidos por el
procedimiento A* es N para un cierto problema y
dicho problema se encuentra a profundidad d,
entonces el factor de ramificación efectivo b* sería el
factor de ramificación de un árbol uniforme de
profundidad d que contuviera un número N de
nodos.
Esto es,
N = 1 + b* + (b*)2 + (b*)3 + ... + (b*)d
¿Cuál sería el factor de ramificación efectivo si h*  h?
88
Prueba de la optimalidad del procedimiento A*
Sea G la trayectoria óptima al estado objetivo de coste f* y
sea G2 otra trayectoria subóptima al mismo objetivo, de
coste g(G2) > f*.
Supongamos que A* ha seleccionado G2 antes que G, por
lo que la búsqueda terminaría con una solución subóptima.
***
Vamos a demostrar que esta situación es imposible.
89
Prueba de la optimalidad del procedimiento A*
Sea n un nodo hoja para una cierta etapa de
la exploración en una trayectoria óptima hacia
el estado objetivo. Dado que la heurística h se
considera admisible, tenemos que:
f*  f(n)
Más aún, si n no fue elegido para expansión
frente a G2 fue porque:
f(n)  f(G2)
Combinando estas dos desigualdades :
f*  f(G2)
Pero G2 termina en el estado objetivo, por lo
que:
h(G2) = 0
de lo cual se deduce que f(G2) = g(G2) de lo
que resultaría que:
f*  g(G2)
resultado que contradice la suposición inicial
de suboptimalidad para G2.
90
Sobre la completitud del procedimiento A*
Dado que el procedimiento A* expande nodos en orden
creciente de f, debe eventualmente expandir el nodo que
le permita alcanzar el nodo objetivo.
Esto será cierto a menos que existan infinitos nodos con
f(n) < f*. Esta circunstancia sólo puede darse cuando
algún nodo tenga un factor de ramificación infinito o una
trayectoria de coste finito incluya un número infinito de
nodos.
Es decir, el A* es completo en grafos (árboles) localmente
finitos siempre que el coste de transitar entre dos nodos
cualesquiera sea  , siendo  una constante positiva.
91
Complejidad del procedimiento A*
Puede demostrarse que para la mayoría de los problemas,
el número de nodos contenidos en la trayectoria óptima
sigue siendo exponencial, A MENOS QUE:
el error en la función heurística no crezca más
rápidamente que el logaritmo del coste del camino
actual.
|h(n) -h*(n)|  O(log h*(n))
En la mayoría de los casos el error es al menos proporcional
al coste de la trayectoria restante, por lo que el coste
temporal del algoritmo es típicamente exponencial. Debido
a que deben conservarse los nodos expandidos en memoria,
la complejidad espacial es también exponencial.
92
Ejemplo del A*: 8-Puzzle
2
8
3
1
6
4
7
Heurística: número de piezas mal colocadas
5
Estado actual
(xia, yia)
1
2
8
7
3
4
6
5
Estado objetivo
(xio, yio)
93
1. Formar una lista de trayectorias parciales, ABIERTA con una trayectoria
inicial que comienza en el nodo raiz. Formar otra lista, CERRADA, que
contendrá las trayectorias desechadas mínimas, e iniciarlizarla a vacía.
2. Hasta que ABIERTA esté vacía o se encuentre el objetivo,
2.1 Analizar la primera trayectoria de ABIERTA.
2.2 Si la trayectoria termina en el nodo objetivo, terminar.
2.3 En otro caso:
2.3.1 Eliminar la primera trayectoria de ABIERTA, incluyéndola en
CERRADA. Si es de coste menor que otra similar, ya contenida en
CERRADA, se elimina esta última.
2.3.2 Formar nuevas trayectorias a partir de la trayectoria extraída
de ABIERTA mediante la expansión del último nodo de la misma.
2.3.3 Añadir nuevas trayectorias a ABIERTA, si existen.
2.3.4 Ordenar ABIERTA de menor a mayor coste.
2.3.5 Si dos o más trayectorias de ABIERTA terminan en un nodo
común, eliminarlas excepto la de mínimo coste. Eliminar esta última
también si existe otra similar con menor coste en CERRADA. Las
trayectorias eliminadas de ABIERTA deben insertarse en CERRADA
salvo que ésta ya contenga trayectorias similares de menor coste.
3. Si se alcanza el nodo objetivo, el problema tiene solución y se determina
la trayectoria óptima, en caso contrario no tiene solución.
94
A
g =0
h*= 4
B
g =1
h*= 5
E
g =2
h*= 3
H
g =3
h*= 3
8
3
2
1
4
7
6
5
2
8
3
1
6
4
7
5
8
3
1
4
7
6
5
2
8
3
1
4
6
5
2
I
g =3 7
h*= 4
C
g =1
h*= 3
1
2
8
7
3
4
6
5
8
3
1
6
4
7
2
7
N
g =5
h*= 2
8
3
4
6
5
3
8
4
6
5
2
3
1
8
4
7
6
5
1
2
3
8
4
7
6
5
1
2
3
7
8
4
6
5
7
J
g =3
h*= 2
5
1
2
F
g =2 1
h*= 3
L
g =4
h*= 1
M
g =5
h*= 0
2
2
8
3
1
6
4
7
5
2
G
g =2 1
h*= 4
8
7
6
2
3
1
8
4
7
6
5
D
g =1
h*= 5
K
g =3
h*= 4
3
4
5
LA = {A}
LC = { }
LA = {C, B, D}
LC = {A}
LA = {E, F, B, D, G}
LC = {A, C}
LA = {F, B, D, G, H, I}
LC = {A, C, E}
LA = {J, B, D, G, H, I, K}
LC = {A, C, E, F}
LA = {L, B, D, G, H, I, K}
LC = {A, C, E, F, J}
LA = {M, B, D, G, H, I, K, N}
LC = {A, C, E, F, J, L}
95
Búsqueda por satisfacción de restricciones
Constraint satisfaction Search (CSP)
96
Búsqueda por satisfacción de restricciones
En un problema de satisfacción de restricciones
(CSP) los estados posibles están definidos por los
valores asignados al conjunto de variables que
especifican el problema.
La solución a un problema de este tipo se alcanza
cuando un estado dado (estado objetivo) verifica
un conjunto de restricciones, expresadas sobre el
conjunto de variables.
97
Ejemplo 1: Puzzles criptoaritméticos
SEND
+ MORE
MONEY
FORTY
TEN
+
TEN
SIXTY
El objetivo: asignar a cada letra un
dígito de manera que se verifiquen el
conjunto de restricciones contenidas
en la operación de adición.
• Dos letras no pueden tomar el
mismo valor
98
Q
Ejemplo 2: Las n-Reinas
Q
Q
Q
Q
Q
Q
¿De qué forma se pueden
disponer n reinas sobre un
tablero de nxn de manera
que no se amenacen entre
ellas?
Q
99
Búsqueda por satisfacción de restricciones
Una solución a un CSP especifica los valores de todas y
cada una de las variables de manera que el conjunto de
restricciones se verifica.
Muchos problemas de planificación y de asignación de
recursos se pueden expresar como CSP’s por lo que
este tipo de problemas conforma un grupo importante
de problemas de exploración.
100
Tipos de restricciones
Unarias: condición sobre el valor de una única
variable. P.e. El primer dígito por la izda de
cualquier fila en el problema criptoaritmético
no puede tomar el valor 0.
Binarias: condiciones sobre pares de variables, como en
el problema de las n-reinas.
De orden superior: sobre 3 o más variables.
101
Cada variable Vi de un CSP tiene un dominio Di, que
contiene el conjunto de posibles valores que la variable
puede tomar. Este dominio puede ser continuo o discreto.
P.e. En el problema de las 8-reinas, si Vi es la fila que
ocupa la reina de la i-ésima columna, el dominio de Vi es
{1,2,3,4,5,6,7,8}
La restricción de no-ataque entre las reinas determina el
subespacio permitido para las soluciones en el producto
cartesiano de los dominios. Así el conjunto de pares de
soluciones para las reinas de las dos primeras columnas
sería:
{<1,3>,<1,4>,<1,5>, ..., <2,4>,<2,5>, ...}
102
Elementos básicos para diseñar un método de exploración
para CSPs
Estado inicial: Todas las variables sin asignar.
Operadores: Transforma un estado en otro
mediante la asignación de un valor permitido a
UNA variable.
Estado objetivo: Todas las variables tienen
asignados valores compatibles con las
restricciones del problema.
103
Debe notarse que:
Todas las soluciones se encontrará a la misma
profundidad n, igual al nº de variables. Por
tanto, se puede emplear con seguridad un
método de exploración en profundidad.
Los operadores pueden seleccionar los valores
a asignar de manera “ciega”, lo que resulta en
un método de búsqueda ineficiente, o por el
contrario, pueden verificar en cada asignación
la no violación de ninguna restricción.
104
Debe notarse que:
Otro refinamiento es permitir la modificación de los
dominios de asignación a medida que se profundiza
en el árbol de exploración. Los dominios se
modificarían para eliminar aquellos valores que
violarían restricciones teniendo en cuenta los
valores ya asignados a las variables
Grandes mejoras en la eficiencia de este tipo
de métodos de exploración pueden obtenerse
mediante el uso mediante el uso inteligente de
conocimiento específico al problema, que
expresado en forma de heurística puede - por
ejemplo - determinar qué variable es más
conveniente asignar en cada momento y con
qué valor.
105
Reparación heurística.
Q
2
Q
Supongamos un cierto estado en
el problema de las 8-Reinas.
2
Q
1
Q
2
Q
Heurística para orientar la
exploración:
3
Q
Q
1
2
Q
Para una columna dada,
contabilizar el número de
conflictos de cada casilla
Seleccionamos la casilla de menor índice
(los empates se resuelven al aleatoriamente)
106
Reparación heurística.
Q
Q
3
3
Q
Q
Q
Q
Se selecciona la columna
donde se encuentra el
origen del conflicto.
2
3
2
Q
Q
3
0
Q
107
Ejemplo: Sudoku
smallsudoku(L) :L = [C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16],
domain(L, 1,4),
C2 #= 1, C4 #= 2, C5 #= 2, C11 #= 1, C16 #= 3,
all_different([C1,C2,C3,C4]),
all_different([C5,C6,C7,C8]),
all_different([C9,C10,C11,C12]),
C1
1
C3
2
all_different([C13,C14,C15,C16]),
2
C6
C7
C8
all_different([C1,C5,C9,C13]),
all_different([C2,C6,C10,C14]),
C9 C10
1
C12
all_different([C3,C7,C11,C15]),
all_different([C4,C8,C12,C16]).
C13 C14 C15
3
108
Algoritmos genéticos
109
Algoritmos genéticos
Idea:
Buscar (optimizar) simulando los mecanismos
naturales que articulan la evolución de las especies
• Los individuos de una especie compiten por
reproducirse. Tienen más oportunidades los
mejor adaptados.
• Se crean nuevos individuos mediante el
intercambio genético de sus progenitores.
• Ocasionalmente, se introducen nuevos individuos
mediante mutaciones.
110
Un poco de terminología
Generación:
Cromosomas:
Genotipo:
El conjunto de individuos que
conforman la población de una
especie para un instante dado.
Adaptación:
La información genética de la
especie se codifica en
cromosomas.
Reproducción:
Cruzamiento:
Mutación:
El código genético de un
individuo concreto es su
genotipo.
111
Un poco de terminología
Generación:
Cromosomas:
Genotipo:
Adaptación:
Reproducción:
Cruzamiento:
Mutación:
Una medida de la idoneidad del
diseño de un individuo a su
entorno vital.
112
Un poco de terminología
Generación:
Cromosomas:
Genotipo:
Algunos individuos de una
generación son seleccionados
para la siguiente generación.
Adaptación:
Nuevos individuos aparecen por
el intercambio de partes del
código genético de sus
progenitores.
Reproducción:
Cruzamiento:
Mutación:
A veces el genotipo de un
individuo cambia debido a una
mutación.
113
Un ejemplo:
En la siguiente diapositiva se representan las tres
operaciones básicas que intervienen en la creación de la
siguiente generación.
• Las líneas en rojo indican copia del genotipo.
• Las líneas moradas denotan las partes del genotipo que
intercambian los progenitores en una operación de
cruzamiento.
• Las líneas en rojo discontinuas alertan de una mutación.
• Los números encerrados en círculos indican la
adaptación de cada individuo.
114
Generación
n-ésima
11
13
2
9
1101
1011
0100
1001
1101
1011
1011
1001
1111
1001
1001
1011
1111
0001
1000
1011
8
1
13
reproducción
cruzamiento
mutación
Generación
n+1
15
115
Técnicas de búsqueda con adversario
116
Características del problema tipo.
• Dos adversarios.
• Total conocimiento del estado del problema para
ambos contricantes. Esto es:
- no existe impredeciblidad (azar).
- no hay variables ocultas.
• Movimientos alternativos
• ¿Estrategia ganadora?
• Ajedrez, damas, cuatro-en-raya, ...
117
Juego de Grundy
(7, B)
(6, 1, A)
(5, 1, 1, B)
(5, 2, A)
(4, 2, 1, B)
(4, 1, 1, 1, A)
(3, 1, 1, 1, 1, B)
(2, 1, 1, 1, 1, 1, A)
(4, 3, A)
(3, 2, 2, B)
(3, 2, 1, 1, A)
(3, 3, 1, B)
(2, 2, 2, 1, A)
(2, 2, 1, 1, 1, B)
118
Juego de Grundy
(7, B)
(6, 1, A)
(5, 1, 1, B)
(5, 2, A)
(4, 2, 1, B)
(4, 1, 1, 1, A)
(3, 1, 1, 1, 1, B)
(2, 1, 1, 1, 1, 1, A)
(4, 3, A)
(3, 2, 2, B)
(3, 2, 1, 1, A)
(3, 3, 1, B)
(2, 2, 2, 1, A)
(2, 2, 1, 1, 1, B)
119
IDEAS:
1. En este tipo de problemas, la representación
mediante estados sigue siendo válida.
2. El estado recoge una descripción completa del juego
en un instante dado (p.e. la disposición de las piezas
sobre el tablero y a qué jugador toca mover)
3. La evolución del juego es equivalente al recorrido de
un árbol.
4. Debido al movimiento alternativo, la decisión de qué
rama escoger en cada momento se alterna entre los
jugadores.
120
Ejemplo
1
Juega A
2
Juega B
3
4
5
6
7
8
9
g g
p g
p p
t t
g t
p t
g = gana A
p = pierde A (gana B)
t = tablas
Juega A
El problema:
¿Qué movimiento debería
escoger el agente A?
121
Ejemplo
1
Juega A
2
Juega B
3
4
5
6
7
8
9
g g
p g
p p
t t
g t
p t
g = gana A
p = pierde A (gana B)
t = tablas
Juega A
Si A escoge 2,
B escogerá 6 y A perderá
Si A escoge 3,
B elegirá 9 y A podrá hacer
tablas
122
Dificultades con este tipo de problemas de exploración
Esencialmente la explosión combinatoria.
Normalmente es impracticable una exploración
exhaustiva.
Ajedrez ~ 10120 estados
Damas ~ 1040 estados
Además, en muchos juegos el tiempo disponible para
realizar un movimiento, o el total de ellos, está limitado.
• Estrategia Minimax
• Poda Alfa-beta
123
Estrategia Minimax
Ideas básicas:
A. Se explora hasta un límite de profundidad.
B. Se emplea una evaluación estática de las expectativas
futuras de éxito en el límite de profundidad de la
búsqueda.
C. Operativamente, se realiza una simulación del juego
empleando un modelo de adversario que jugase de forma
que:
- Sigue la misma estrategia que el jugador problema,
intentando maximizar sus expectativas de victoria.
- Posee la misma función de evaluación estática que el
jugador problema.
124
Función de Evaluación.
Para los nodos en el límite, se define una función
de evaluación que en general será del tipo:
e(n) = f1(n) - f2(n)
donde f1(n) y f2(n) son funcionalmente idénticas y
representan, respectivamente, las expectativas de
éxito del jugador problema y de su adversario.
125
Algoritmo Minimax
Denominaremos jugador MAX al jugador problema y
también a los nodos en los que el decide.
Recíprocamente, llamaremos jugador MIN al adversario
y también denominaremos como nodos MIN a los
nodos en los que este jugador decide.
V(n): valor devuelto por la función MINIMAX para un
nodo n con N sucesores.
Vp: representa un valor intermedio.
126
Algoritmo Minimax
(definición recursiva)
Function Minimax(n, prof, prof_limite) {
1. Si se alcanza el límite de exploración, V(n) = e(n)
En otro caso {
2. Para los descendientes de n, i= 1, 2, ..., N {
2.a Generar el nodo ni, descendiente de n
2.b V(ni) = Minimax(ni, prof+1, prof_limite)
2.c Si i = 1, hacer Vp = V(n1)
En otro caso {
2.c.1 Si n es MAX: Vp = max(Vp, V(ni))
En otro caso: Vp = min(Vp, V(ni))
}
}
3. Devolver V(n) = Vp
}
}
127
Ejemplo
0
1
max A
Juega
0
-2
2
4
3
2
4
4
Juega
min B
3
-2
5
6
-5 2
-3 -2
1
0
7
0
0
8
0
1
9
0
max A
Juega
-3 0
128
Observaciones
La calidad de la decisión proporcionado por la estrategia
MINIMAX dependerá:
• de la profundidad alcanzada en la exploración
• de la calidad de la función de evaluación estática
El proceso de evaluación del MINIMAX es similar a un
recorrido en profundidad.
129
Una función de evaluación para el juego del tres en raya
o
x
e(n) = 6 - 4 = 2
g(A) = nº de filas, columnas y diagonales todavía
abiertas para el jugador A
e(n) = g(MAX) - g(MIN)
130
6-4=2
o x
1
o
x
x
5-4=1
x
o
-2
6-6=0
x
o
x
o
1
5 - 6 = -1
x
4-5=-1
o
x
5-5=0
o
o
Nodo inicial
4-6=-2
x
5-5=0
5 - 6 = -1
x
o
-1
o x
6-5=1
x
x
5-5=0
x
o
6-5=1
x o
131
o x x
0
o x x
3-3=0
o
o x x
o x
o
x
o x x
o x
4-3=1
4-3=1
o
o x
x
o x
x
132
o x x
0
o
o x
4-2=2
x
1
o x
o
o x
4-2=2
x
x
o
3-2=1
o x
x
o x
o x o
o x
x
5-2=3
x
4-2=2
o x
o x
o x
x
4-2=2
o x
o
x
133
o x x
0
o
o x
4-3=1
x
1
o x
o
o x
4-3=1
x
x
o
o x
3-3=0
x
o x
0
o x
x
o x o
5-3=2
x
o x
3-3=0
x o
o x
x
o x
4-3=1
o x
134
o x x
0
o
o x
3-2=1
x
1
1
o x
o
o x
4-2=2
x
x
o
3-2=1
o x
x
o x
0
o x
x
o x o
x
3-2=1
o x
1
o x
x
5-2=3
x
o x
o
4-2=2
x o
135
o x
-
o x
x
o
x
o x o
x
o x
x
o x
o x
o
o
o x
o x
2-1=1
o x
o
2-1=1
x
x
x
x
o x
2-1=1
o x
o x
o
o x
x
x
o x
o x
o
o
x
-
o x
x
x
136
o x
-
o x
x
x -
o
o o x
x
o x
x
o
o
o x
o x
3-1=2
o x
o
x
o x
o
3-1=2
x
x
x
x
o
x
2-1=1
o x
o x
o
o x
x
x
o
o x
o
o
x
x
-
o x
x
x
137
o x
-
o x
x
o o
x -
o
o x x
x
o x
x
o
o
o x
x
-
o
o
o x
o x
x
x
x
3-2=1
2-2=0
x
o
o x x
2-2=0
o x
o
o x
x
x
o
o
o x
x
o
x
-
o x
x
x
138
o x
-
o x
x
o o
x -
o
x x
o x
x
3-2=1
o x
o
o
2-2=0
o x
-
o
o
o x
o x
x
x
x x
o
x
o x
o x
x
x
o
o x
o x x
o
3-2=1
x x
-
o
o
-
o x
x
x
139
o x
-
o x
x
o o
x -
o
o x
x
1
3-1=2
o x
x
x
o
o
2-1=1
o x
-
o
o
o x
o x
x
x
-
o x
x
x
o
x
o
x
o x
o
x
x
3-1=2
o
x
o x
x o x
o
2-1=1
o x
x
x
1
140
Estrategia ALFA-BETA.
Supongamos una versión de la estrategia MINIMAX para
jugar al ajedrez, operando sobre una máquina capaz de
explorar 1000 posiciones/sg.
¿Cuál sería el nivel de juego de este programa?
En torneo se dispone aproximadamente de 150 sg por
movimiento, lo que implica que se podrían explorar unas
150.000 posiciones. PERO si el factor de ramificación del
ajedrez es  35, SÓLO habremos podido explorar 3 0 4
niveles y nuestro programa sería un PERFECTO NOVATO,
ya que el jugador promedio es capaz de planificar con
antelación entre 6 y 8 movimientos.
141
Estrategia ALFA-BETA.
La solución a este problema es intentar modificar el
procedimiento MINIMAX al objeto de reducir el coste de
la exploración, evitando la exploración de ciertos nodos
cuando se sabe que no podrán ofrecer un máximo o un
mínimo (esto dependiendo de si el nivel en cuestión es
MAX o MIN)
142
Ejemplo
7
1
max A
Juega
<= 3
7
2
Juega
min B
3
3
4
x x
5
6
Juega
max A
Poda alfa (max)
max(a, min(b, x))
el resultado no depende de x si a>b
143
Ejemplo
-3
1
min A
Juega
>= 7
-3
2
Juega
max B
3
7
4
x x
5
6
Juega
min A
Poda beta (min)
min(a, max(b, x))
el resultado no depende de x si a<b
144
Algoritmo Alfa-Beta
(definición recursiva)
Function AB(n; , , prof, prof_limite) {
Valores iniciales
=-
 = +
1. Si se alcanza el límite de exploración, V(n) = e(n)
En otro caso {
2. Si el nivel es MAX {
2.a Para los descendientes de n, i= 1, 2, ..., N {
2.a.1 Generar el nodo ni, descendiente de n
2.a.2  = max(, AB(ni; , , prof+1, prof_limite)
2.a.3 Si   , devolver 
}
2.b return 
}
3. Si el nivel es MIN { (Siguiente página) }
}
145
Algoritmo Alfa-Beta
(continuación)
Function AB(n; , , prof, prof_limite) {
1. Si se alcanza el límite de exploración, V(n) = e(n)
En otro caso {
2. Si el nivel es MAX { ... }
3. En otro caso (el nivel es MIN) {
3.a Para los descendientes de n, i= 1, 2, ..., N {
3.a.1 Generar el nodo ni, descendiente de n
3.a.2  = min(, AB(ni; , , prof+1, prof_limite)
3.a.3 Si   , devolver 
}
3.b return 
}
}
146
A
E
L
2
B
3
F
8
G
7
H
01
M N O
3 8 5
P
7
Q
6
R
0
S
1
2
3
C
3
8
D
1
I
T
5
5
U
2
8
J
V
8
8
K
10
W X Y
4 10 2
147
=3
=-
=8
= A
=-
=-
=-
=3
=
=3
B
=-
=8
=3
=3
=-
=3
=2
=
=
E
L
2
=3
=
=3
C
3
=-
=7
=3
=3
=3
=3
=
=8
=8
D
1
=3
=
8
=3
=8
=8
=
=
=
8
G
7
H
1
M N O
3 8 5
P
7
Q
6
R
0
S
1
3
F
8
I
T
5
5
U
2
J
V
8
=3
=10
=8
=8
8
K
10
W X Y
4 10 2
148
Efectividad de la poda Alfa-Beta
La efectividad de la poda depende del orden en el que se
examinan los nodos descendientes. Así en cada nivel la
mejor estrategia consiste en examinar primero aquellos
descendientes que ofrezcan las mejores expectativas.
El coste de la exploración es inferior al del MINIMAX, pero
aún así es proporcional al anterior, por lo que si el coste
del MINIMAX es exponencial, el coste del ALFA-BETA
tendrá un comportamiento similar.
FormasNd
de=ordenar
2bd/2 -los
1 nodos
si d es par
Nd = b(d+1)/2 + b(d-1)/2 - 1
si d es impar
• Aplicar
el criterio
de evaluación
a todos
nodos y
En el
mejor caso,
el mismo
número de
nodoslos
terminales
la expansión
de mejor
a peor evaluación
queordenar
si se emplease
la estrategia
MINIMAX
con profundidad
149
d/2• Búsqueda progresiva en profundidad
=-
=8
=
= A
=-
=8
=
D
=8
=8
=
=8
B
8
=8
=-
=
J
V
8
8
=-
=10
=
= 88
8
K
=8
=8
=
=8
C
3
=8
=
10
W X Y
4 10 2
E
L
2
1
=8
=
8
G
7
H
1
M N O
3 8 5
P
7
Q
6
R
0
S
1
3
F
I
5
T
5
150
U
2
Problemas con MINIMAX y ALFA-BETA
Juegos con tiempo límite por turno o por partida.
La solución: Profundización iterativa
Situaciones quiescentes o como evitar el terminar la
búsqueda justo antes de la detección de una situación
importante que puede provocar un “vuelco” en la partida.
La solución: la evaluación no debe cambiar de manera
importante si se mira uno o dos movimientos adelante.
No se busca a la misma profundidad en todas las
ramas.
MINIMAX y ALFA-BETA son estrategias que asumen que el
oponente juega sin cometer errores.
151
El problema del “horizonte”:
R
Una serie de “jaques” mueve el
movimiento del peón que
promociona a reina más allá
del horizonte de búsqueda
P
P
P
P
Las negras tiene un ligera
ventaja material
P
P
P
P
T
R
Las negras pueden interpretar
esta situación como ventajosa
cuando realmente es inevitable
su derrota
152
La función de evaluación
La calidad del juego depende de manera muy importante
de la función de evaluación que se emplee.
Una función de evaluación lineal:
gi : características
wi: pesos o importancia relativa de la característica gi
f(n) =
 w * g (n)
i
i
Existen procedimientos automáticos para obtener la mejor
combinación de pesos wi (Ver el libro de Nilsson).
PROBLEMA: Qué características seleccionar
153
Refinamientos
No es necesario realizar operaciones MAX y MIN, tan
sólo MAX, si la función de evaluación es simétrica
para los dos jugadores.
Cada juego puede añadir heurísticas que permitan
añadir otros criterios de poda.
La forma de jugar cuando se detecta una situación
irremisible, tanto de victoria como de derrota.
154
Ejemplo: Suma 100
9
3
6
3
1
8
2
3
6
4
2
4
3
6
1
3
3
8
3
5
3
9
6
2
3
4
1
A
3
3
2
3
5
5
2
5
B
1
3
4
7
9
7
3
2
2
1
5
3
8
1
3
6
7
8
6
1
2
1
2
4
1
7
5
Se juega por movimientos
alternativos a las casillas
4-conectadas
Cuando un jugador se
traslada a una celda suma
acumula la puntuación de
la celda a su puntuación
Gana el primer jugador
que consiga sumar 100
puntos
155
Algoritmo
Minimax
Alfa-beta
Alfa-beta
iterativo
Alfa-beta
iterativo & NSFP
Total de Nodos
Nodos examinados
generados durante
a la máxima
la búsqueda
profundidad
1.628.692
45.963
1.411.345
34.010
6.278
4.416
2.278
916
156
Ejemplo del Maxn
3,2,3
1
3,2,3
1,3,1
2,4,3
2
0,1,2
3
3,2,3
5
Juega A
2,4,3
3,1,3
6
7
Juega B
4
1,3,1
8
9
10
11
12
13
14
15
16
17
18
19
1
1
0
0
1
2
3
2
3
2
2
2
3
1
3
2
3
1
0
1
0
1
3
2
2
4
3
1
3
1
Juega C
20 Juega A
2
1
0
157
Planificación, acción y aprendizaje
El mundo real
Los procesos perceptivos no siempre proveen la información necesaria acerca
del estado del entorno (Aliasing perceptual).
Las acciones no siempre surten el efecto esperado.
Pueden existir otros procesos o actores en el mundo, de forma que en gran
medida la evolución del entorno puede no ajustarse a lo esperado por el
agente.
Mientras el agente elabora un plan, el mundo puede cambiar. Nuestro agente
debe planificar rápidamente. Incluso el agente puede verse forzado a actuar
incluso antes de haber completado la búsqueda.
Por otra parte, incluso disponiendo del tiempo necesario, puede ser
computacionalmente intratable que nuestro agente realice una búsqueda
completa.
158
Dos aproximaciones para tratar estos problemas
Métodos probabilísticos: Se modelan las
incertidumbres de los sensores, actuadores y procesos
activos en el entorno
Adaptar los procesos de búsqueda y toma de
decisiones con el ciclo básico del agente, es decir,
Percibir/Planificar/Actuar. La idea es que si bien el
agente puede cometer errores, al recibir una
realimentación constante del mundo el agente puede
“reaccionar” ante lo inesperado y buscar una nueva
solución.
159
Métodos de búsqueda aproximados
Los métodos de búsqueda de un agente reactivo deben:
• responder en un tiempo mínimo conocido
• el proceso de búsqueda podrá ser interrumpido en
cualquier momento, pero el agente deberá en cualquier
caso responder con una solución. La solución puede ser
mejorada si el agente dispone de más tiempo
• posiblemente relajar los requisitos de optimalidad
160
Métodos “Aproximados” de resolución de problemas
Algoritmos Anytime
Búsqueda estructurada
Búsqueda Localizada (Island-Driven Search)
Búsqueda jerárquica
161
Una realimentación frecuente desde el entorno, es una
manera de reducir incertidumbres y compensar la falta
de conocimiento del agente acerca del mundo y de los
efectos de sus acciones.
Otra forma de aumentar las capacidades del agente es
extraer información relevante del propio proceso de
busqueda. Mediante esta información el agente puede
aprender a planificar y actuar de forma más efectiva.
162
Aprendizaje de funciones heurísticas
Supongamos un problema genérico en el que el agente carece de
una heurística que oriente la búsqueda.
Consideraremos primero el caso más sencillo: aquel en el que es
posible almacenar en una tabla todos los posibles nodos (estados)
que pueden presentarse durante la búsqueda.
Asumimos también que el agente dispone de un buen modelo de
los efectos de sus acciones y conoce el coste de desplazarse de un
nodo a cualquiera de sus descendientes.
Inicializamos la función heurística h* a cero en todos los nodos e
iniciamos una búsqueda A*. Tras expandir el nodo ni para producir
sus sucesores S(ni), modificamos h*(ni) como sigue:
163
Inicializamos la función heurística h* a cero en todos los nodos e
iniciamos una búsqueda A*. Tras expandir el nodo ni para producir sus
sucesores S(ni), modificamos h*(ni) como sigue:
h*(n )
i












min h*(n )  c(n , n )
j
i j
n S (n )
j
i
Donde c(ni,nj) es el coste de alcanzar nj desde ni. Los valores de h* se
guardan en una tabla para ser actualizados en sucesivas búsquedas.
Se asume también que podemos “reconocer” el nodo objetivo ng, de
manera que siempre tendremos h*(ng)=0.
En la primera iteración, la búsqueda será equivalente a una búsqueda
de coste uniforme, pero la estimación de h* irá mejorando
gradualmente haciendo la búsqueda cada vez más informada.
164
Si el agente no dispone de un modelo acerca de las consecuencias de sus
acciones, puede aprenderlo al tiempo que configura una estimación de
h*. Asumimos que el agente puede distinguir entre dos estados diferentes
y que puede nombrarlos a medida que los va descubriendo. Asumimos
también que el agente no conoce el coste de sus acciones y, por tanto,
necesita descubrirlo a medida que las ejecuta en el mundo real.
El proceso comienza con un único nodo conocido y eligiendo una acción,
posiblemente al azar, y transitando a un nuevo estado. Así a medida que
se visitan estados se descubre el coste de la transición, se nombra el
nuevo estado y se le asocia un valor h*:
h*(n )
i






h*(n )  c(n , n )
j
i j 
Donde ni es el nodo desde el que se ejecuta la acción, nj es el nodo
resultante, c(ni,nj) es el coste de alcanzar nj desde ni. h*(nj) será nulo
si el nodo nj no ha sido visitado nunca.
165
Siempre que el agente debe elegir una acción en un nodo dado n que
tiene nodos sucesores almacenados en la tabla, elegirá la acción que
resulte de:
a


argmin h*( (n,a)  c(n , (n,a))
i

a 
Donde (n,a) es la descripción del estado alcanzable desde el nodo ni
después de ejecutarse la acción a.
Este proceso de aprendizaje comienza con una búsqueda errática, al
azar, del estado objetivo. Si eventualmente se tropieza con él, el
agente podrá mejorar progresivamente sus capacidades a lo largo de
sucesivos intentos. Evidentemente , esta técnica no garantiza la
optimalidad de las soluciones que se puedan ir descubriendo.
A medida que se dispone de un modelo más completo, es posible
combinar el “aprendizaje en el mundo” con el “aprendizaje y
planificación en el modelo”.
166
Consideremos ahora el caso en el que no es factible el conservar una
tabla con todos los estados (nodos) posibles y sus transiciones. La
aproximación es entonces intentar construir una función heurística que
pueda ser aplicada a todos los nodos. Podría, por ejemplo, construirse
como una combinación lineal de subfunciones que pensamos pueden
ser buenos estimadores en ciertas ocasiones:
h*(n )  w W (n) W P(n) 
i
1
2
Para ajustar los pesos caben varias aproximaciones:
A. Asignamos inicialmente a los pesos los valores inciales que
consideramos más aproximados a los valores “reales” y realizamos una
búsqueda con esos valores. Cuando alcanzamos un nodo objetivo, ng,
empleamos el valor final conocido, h*(ng)=0, para propagar los valores
de h* a todos los nodos de la trayectoria. Empleando estos valores
como “muestras” se ajustan los valores de los pesos de forma que se
minimice el error cuadrático entre las muestras y la función h*
resultante de la combinación de pesos.
167
Para ajustar los pesos caben varias aproximaciones:
B. También puede emplearse un método similar al anterior, ajustando
h* en cada expansión de nodo. Así después de expandir el nodo ni
para producir los sucesores S(ni), se ajustan los pesos de manera que:
h*(n )
i


h*(n )
i
h*(n )  
i










*
 *

min h (n j )  c(ni , n j )  h (ni )

n S (n ) 
j
i
(1  )h*(n )  
i


















 
 



 *
min h (n j )  c(ni , n j )
n S (n ) 
j
i
Donde 0<<1 es el parámetro de aprendizaje. Valores pequeños de 
provocan un ritmo de aprendizaje muy lento; valores grandes
ocasionan un aprendizaje errático y no-convergente.
168
Aprendizaje por refuerzo: Iteración de valores
Existen problemas en los que es posible “aconsejar” a un agente a
medida que desarrolla su actividad, premiándole si progresa en su
misión y castigándole en otro caso.
En este tipo de entornos, el objetivo es lograr una estrategia de acción
que maximice el refuerzo positivo (premio) alcanzado por el agente.
La dificultad esencial está en que es necesario premiar al agente a
medida que este desarrolla la tarea y no sólo al final, por lo que el gran
problema reside está en trasladar a cada acción parte del premio que
podría obtenerse en el futuro al alcanzar el objetivo.
169
Sea n un nodo en el grafo de espacio de estado del agente, y sea  una
estrategia de acción que para cada nodo indica la acción más
conveniente. Sea también, r(ni, a) el premio que el agente recibe
cuando desde el nodo ni se ejecuta la acción a. Si esta acción conduce
al agente al nodo nj, entonces normalmente r(ni, a) = - c(ni, nj) + (nj),
donde (nj) es el valor del premio obtenido al alcanzar el nodo nj.
El objetivo es lograr una estrategia óptima * que traslade a cada nodo
la máxima porción posible del premio que se pueda obtener en el
futuro. Supongamos que aplicando un cierta estrategia o política, ,
podemos asignar a cada nodo n en el espacio de estados un valor V(n)
que corresponde con la parte de premio que el agente recibiría por
comenzar en el nodo n y seguir la estrategia .
Supongamos que en el nodo ni se elige la acción prescrita por (ni) que
resulta en el nodo nj
Vπ (n )  r n , (n ) γ Vπ (n )
i
i
j
 i
170
Donde 0<<1 es el factor de descuento empleado para calcular el valor
en el instante ti de un posible premio que se alcanzaría en ti+1. Para una
estrategia óptima * :


*
*
 




V (n )  max r  n , a   γ V (n ) 
i
j 
a   i 


El valor de ni es la cantidad que es el agente recibe por seleccionar en ni
aquella acción que maximiza la suma del premio inmediato, r(ni,a), más
la parte descontada del premio que se obtendría en nj siguiendo una
estrategia óptima.
Si se dispusiese de los valores de los nodos para una estrategia óptima
(valores óptimos) la estrategia óptima podría escribirse como:


*
 



*
 (n )  argmax  r  n , a   γ V (n ) 

i
j 
a   i 

171
El problema es que normalmente no conocemos estos valores. Sin
embargo existe un procedimiento de aprendizaje denominado “Iteración
de valores” que bajo determinadas condiciones converge a los valores
óptimos.
Iteración de valores:
1. Asignar valores V*(n) a cada nodo. P.e. V*(n) = 0 para todo n.
2. En algún momento del proceso y para algún nodo ni, el valor
estimado del nodo es V*(ni). Se selecciona entonces la acción ‘a’ que
maximiza la suma del premio inmediato más el valor estimado del nodo
sucesor nj y se actualiza el valor del nodo ni como sigue
V *(n )
i




(1  )V *(n )    r  n , a   γ V *(n ) 
i
j 

  i
Este ajuste aproxima el valor de V*(ni) a [r(ni,a)+ V*(nj) ], en la
medida en que V*(nj) sea una buena estimación de V*(nj), este ajuste
hará que V*(ni) sea una mejor aproximación a V*(ni).
172
Sumario.
• La representación en el espacio de estados es una metodología
potente de resolución de problemas
• Los métodos de búsqueda se pueden caracterizar por su
complejidad, y propiedades de optimalidad y completitud.
• Los métodos de búsqueda informada son más eficaces, pero
requieren de funciones heurísticas (subestimación).
• En búsqueda con adversario, el procedimiento alfa-beta es
preferible al procedimiento minimax.
• En la mayoría de los juegos es vital disponer de una buena
función de evaluación.
• Existen técnicas para “aprender” heurísticas.
173
Bibliografía.
[Mend-92]
J. Méndez
Apuntes del Curso de I.A.
U.L.P.G.C.
[Russ-95]
S. Russel, P. Norvig
Artificial Intelligence: A Modern Approach
Prentice-Hall, 1995.
[Nils-98 ]
N. J. Nilsson
Artificial Intelligence
Morgan Kaufmann, 1998.
174