Vous êtes sur la page 1sur 11

Formulacin de un Problema de Bsqueda

estado inicial

Algoritmos de Bsqueda
Consideraciones de Diseo e Implementacin

conjunto de acciones
Se usa el trmino operador para denotar
la descripcin de una accin en trminos
de qu estado se alcanzar al llevar a
cabo la accin en un estado particular.

Juntos
definen el
espacio de
estados

test de meta (goal test)

Permite determinar si un dado


estado es meta.

Inteligencia Artificial
2 cuatrimestre de 2009

funcin de costo de camino


Asigna un costo a un camino. En gral.
se define como la suma de los costos
de las acciones a lo largo del camino

Departamento de Ciencias e Ingeniera de la Computacin


Universidad Nacional del Sur

Problema: Hallar un camino desde el

F
grafo de estados

Ejemplo
estado inicial:

8-puzzle

241
736
75
88
5

2 4 8
7 3 5
1 6

conjunto de operadores:
intercambiar el lugar vaco con una
de las posiciones adyacentes.

test de meta:

la cantidad de movimientos
(acciones) efectuadas a lo largo del
camino.

todas las posibles


configuraciones.
248
735
16

248
7 3
165

248
735
1 6
248
7 5
136

248
735
16

(parte del) grafo de estados

Matriz de adyacencia

A
A

Solucin:

Algoritmo de
Bsqueda

24
738
165

248
73
165

Representacin de grafos
B

test de meta

espacio de estados:

2 3 4
1
5
8 7 6

funcin de costo de camino:

Algoritmos de Bsqueda

conj. de acciones

Ejemplo

estado inicial

estado inicial hasta una meta.

Formulacin
del Problema
de Bsqueda:

un camino
desde el estado
inicial a
una meta
t

C
D

1
1

fc. de costo de
camino

A
El valor asociado a la solucin
por la funcin de costo
determina la calidad de la misma.

Cuanto MENOR el
costo, MEJOR la
solucin
5

Listas de adyacencia
(incidencia)
6

Una posible representacin en PROLOG


El grafo es una coleccin de hechos que modelan
explcitamente cada uno de sus arcos.
arc(a,b).
arc(b,c).
arc(b,d).
arc(b,e).
arc(c,a).
arc(d,c).

Algoritmos de Bsqueda
Un algoritmo de bsqueda va generando y explorando
los nodos (estados) del espacio de estados.
Podra pensarse en el proceso de bsqueda como
construyendo un rbol de bsqueda.

As la consulta por un arco en


particular se resuelve en forma
directa.

El estado inicial es la raz del rbol y los nodos hoja


corresponden a estados que no tienen sucesores en el
espacio/grafo de estados o no fueron expandidos an.
7

Arbol asociado a una Bsqueda

Arbol asociado a una Bsqueda

Grafo de Estados

Grafo de Estados

Arbol de Bsqueda

generados pero
an no explorados
(Frontera de la
Bsqueda)

Arbol asociado a una Bsqueda

Arbol asociado a una Bsqueda

F
E

Grafo de Estados

Arbol de Bsqueda

F
E

11

10

Arbol de Bsqueda

Grafo de Estados

Arbol de Bsqueda

12

Arbol asociado a una Bsqueda

Arbol asociado a una Bsqueda

13

Grafo de Estados

Arbol de Bsqueda

B
Grafo de Estados

Selecciona un nodo meta,


por lo tanto,
encuentra una solucin

Arbol de Bsqueda

14

Representacin de la Frontera

Algoritmos de Bsqueda

El algoritmo de bsqueda mantiene en todo momento


una lista representando la Frontera de la bsqueda, es
decir, aquellos nodos generados pero an no explorados.
Utilizaremos nodo(Estado, Camino) para representar
un nodo de la frontera de la bsqueda (hoja del rbol de
bsqueda) etiquetado con Estado, y donde Camino es
el camino desde el estado inicial hasta dicho nodo en el
rbol.

rbol de Bsqueda
en un instante dado
de la ejecucin del
algoritmo.

C
Representacin mantenida
por el algoritmo (lista Front).

[nodo(C, [A]), nodo(D, [B,A]),

nodo(C, [B,A])

15

16

Generacin de Vecinos

Algoritmo general de bsqueda


% buscar(+Front, -Solucion)
buscar(Front, [Estado|Camino] ):seleccionar(Nodo, Front, _FrontSinNodo),
Nodo = nodo(Estado, Camino),
test de meta
es_meta(Estado).
buscar(Front, Solucion):-

% vecinos(+Nodo, -Vecinos)

Determinan
la estrategia
de bsqueda

seleccionar(Nodo, Front, FrontSinNodo),


vecinos(Nodo, Vecinos),
agregar_frontera(Vecinos, FrontSinNodo, NewFront),
buscar(NewFront, Solucion).
?- buscar( [ nodo(EstadoInic,[]) ], Solucin)

17

vecinos(Nodo,
i
(N d
V
Vecinos):i
)
Nodo = nodo(N, Camino),
findall(nodo(V,[N|Camino]),
arc(N,V),
Vecinos).
18

Control de Visitados

Control de Visitados
% buscarV(+Front, +Vis, -Solucion)

Visitados

buscarV(Front, _Vis, [Estado|Camino]):seleccionar(Nodo, Front, _FrontSinNodo),


Nodo = nodo(Estado, Camino),
es_meta(Estado).
No genera nodos

Front

buscarV(Front, Vis, Solucion):-

seleccionar(Nodo, Front, FrontSinNodo),


vecinosV(Nodo, Front, Vis, Vecinos),
agregar_frontera(Vecinos, FrontSinNodo, NewFront),
Nodo = nodo(Estado, _Camino),
buscarV(NewFront, [Estado|Vis], Solucion).

rbol de Bsqueda en un instante dado de la ejecucin


del algoritmo.

que ya fueron
generados antes

?- buscarV([NodoInicial],[], Solucin)
19

20

Generacin de Vecinos
Cmo chequear que un nodo V no est en Vis ni
en Front?

not member(V, Vis),


not member(node(V,_), Front)

B
Bsqueda
d Ci
Ciega

% vecinosV(+Nodo,
i
V(+N d
+F
+Front,
t +Vi
+Vis -Vecinos)
V i
)
vecinos(Nodo, Front, Vis, Vecinos):Nodo = nodo(N, Camino),
findall(nodo(V,[N|Camino]),
(arc(N, V),
not member (V, Vis),
not member (nodo(V,_), Front)),
Vecinos).

21

Depth--first search (DFS)


Depth

Depth--first search (DFS)


Depth

DFS siempre selecciona para expandir el nodo de la frontera


ms profundo.

Sobre grafos sin ciclos no tiene ninguna complicacin.

De esta manera:
la bsqueda se extiende en profundidad sobre uno de los
caminos del grafo.

Sobre grafos con ciclos debe evitar la exploracin


repetida de nodos.

cuando este camino no puede extenderse ms, la


bsqueda contina desde el nodo no explorado (ie, en la
frontera) que se encuentre a mayor profundidad.

Por esta razn utilizaremos la versin de buscar que


controla visitados para implementar DFS.

Es decir, DFS toma de la Frontera el nodo que ha sido


agregado ltimo.
Esto sugiere la manipulacin de la Frontera como una pila. 23

24

DFS: Traza

Implementacin de DFS
La implementacin de DFS (con control de ciclos) se obtiene

a partir de buscarV/3 implementando seleccionar/3 y


agregar/3 como se muestra a continuacin:

La seleccin de un nodo a explorar consiste en tomar el


primero de la Frontera:

C
E

% seleccionar(-Nodo, +Front, -FrontSinNodo)

seleccionar(Nodo, [Nodo|RestoFront], RestoFront).


Front

Los vecinos se agregan al comienzo de la frontera:

Vis

A - []

% agregar(+Vecinos, +FrontSinNodo, -NewFront)


agregar(Vecinos, FrontSinNodo, NewFront):append(Vecinos, FrontSinNodo, NewFront).

25

26

DFS: Traza
A

A
B

DFS: Traza

D
F

B
E

C [A]

Front

Vis

B [A]

H
Front

Vis

D [B,A]

E [B,A]

C [A]
27

28

DFS: Traza
A

A
B

H
Front

C
D

DFS: Traza

H
Front

Vis

F [D,B,A]

E [B,A]

C [A]

29

I
G
Vis

F [D,B,A]

E [B,A]

C [A]
D
D es vecino de F, pero no volvemos a considerarlo debido a que D ya
fue generado antes (Recordar que, de acuerdo al alg. de bsqueda
30
con control de Visitados, si un nodo ya est en Front o en Vis no
debemos volver a considerarlo)

DFS: Traza
A

Front

B
B

DFS: Traza

Vis

H
Front

E [B,A]

C [A]

I
G
Vis

H [E,B,A]

G [E,B,A]

C [A]

D
F

F
E

31

DFS: Traza

B
B

BFS explora el grafo por niveles. Esto evita que la


exploracin entre en ciclos y garantiza encontrar el camino
ms corto en cantidad de arcos a una meta (optimalidad).

C
E

D
E

H
Front

Breadth--first search (BFS)


Breadth

Es decir
decir, BFS toma de la Frontera el nodo que hace ms
tiempo se encuentra en ella, lo que sugiere la implementacin
de la Frontera como una cola.

G
Vis

G [E,B,A]

C [A]

Aunque BFS no puede entrar en ciclos, podra resultar til


controlar visitados por cuestiones de eficiencia.

D
SOLUCIN

G es meta!!! DFS termina

32

F
E
H

33

34

BFS: Traza

Implementacin de BFS
La implementacin de BFS se obtiene a partir de buscar/2
(o buscarV/3) implementando seleccionar/3 y
agregar/3 como se muestra a continuacin:

La seleccin de un nodo a explorar consiste en tomar el


primero de la Frontera:

% seleccionar(-Nodo, +Front, -FrontSinNodo)

C
E

seleccionar(Nodo, [Nodo|RestoFront], RestoFront).


Front

Los vecinos se agregan al final de la frontera:

Vis

A - []

% agregar(+Vecinos, +FrontSinNodo, -NewFront)


agregar(Vecinos, FrontSinNodo, NewFront):append(FrontSinNodo, Vecinos, NewFront). 35

36

BFS: Traza
A

A
B

BFS: Traza

D
F

B
E

C [A]

Front

Vis

B [A]

H
Front

Vis

C [A]

D [B,A]

E [B,A]
37

38

BFS: Traza
A

A
B

Front

BFS: Traza

H
Front

Vis

D [B,A]

E [B,A]

I [C,A]

I
G
Vis

E [B,A]

I [C,A]

F [D,B,A]

C
D

39

40

BFS: Traza
A

A
B

B
C

I es meta!!! BFS termina

G
SOLUCIN

BFS garantiza encontrar el camino ms corto en cantidad


de arcos a una meta.

En consecuencia, BFS es optimal para aquellos problemas


de bsqueda donde todos los opedores (arcos) tienen el
mismo costo, ya que ms corto significa menor costo.

Si los operadores tienen diferente


costo, entonces BFS no es
optimal:

H
Front

C
E

D
D

Limitaciones de BFS

G
Vis

I [C,A]

F [D,B,A]

H [E,B,A]

G [E,B,A]

D
E

41

1
4

42

UCS: Traza

Uniform Cost Search (UCS)

UCS es una adaptacin de la estrategia de bsqueda BFS


para problemas con operadores de diferentes costos.

BFS selecciona para visitar (expandir) el nodo de la


frontera de menor profundidad. En consecuencia, los
caminos mantenidos en la frontera se van expandiendo de
manera uniforme (justa) en trminos de profundidad.

2
8

De esta forma, los caminos mantenidos en la frontera se


van expandiendo de manera uniforme (justa) de acuerdo
a sus costos.

La solucin encontrada por UCS ser siempre la de menor


43
costo de camino, es decir, optimal.

C
1

UCS: Traza

44

UCS: Traza
A

1
4

UCS selecciona para visitar el nodo de la frontera con


menor costo de camino asociado.

10

1
4

45

46

UCS: Traza
A

D
4

10

F
7

7
47

10

C
G

4
3

UCS: Traza

10

C
G
5

G es meta!!! UCS termina

1
4

G
Solucin:
[A, B, E, G]
(costo 5)
48

Bsqueda Informada o Heurstica


Desventaja de bsqueda ciega: se explora
sistemticamente el espacio de bsqueda sin
ninguna gua. Por lo tanto, en la mayora de los
casos, es extremadamente ineficiente.

B
Bsqueda
d H
Heurstica
ti

En
E b
bsqueda
d informada
i f
d o heurstica
h ti consideramos
id
informacin especfica acerca del problema para
guiar la exploracin hacia una (buena) solucin.
Una heurstica es una funcin h/1 que, aplicada a
un estado E, provee una estimacin del costo de
alcanzar una meta a partir de E.

Algoritmo A*

Algoritmo A*

Al momento de seleccionar un nodo a expandir, A* elige


aquel que promete arribar a una mejor solucin.
Para cada nodo N en la frontera, A* conoce:

el costo del camino usado para alcanzar N: g(N)


la estimac. del costo del camino desde N hasta una meta: h(N).
(ya explorado)
Nodo
inicial

(sin explorar)

Al efectuar bsqueda A* puede efectuarse control de


ciclos por razones de eficiencia, podando aquellas ramas
del rbol correspondientes a estados ya generados
previamente.
No obstante, un mismo estado E puede pertenecer a
distintos caminos, con distintos costos.

Meta

g(N)

h(N)

Entonces f(N)= g(N)+h(N) es una estimacin del costo total


de un camino a la meta (i.e., de una solucin) que pasa por N.

Por lo tanto si un estado es generado nuevamente


pero sobre un mejor camino, vale la pena volver a
considerarlo.

A* selecciona el nodo que tenga menor valor asociado por f.

51

A*:
A:5

52

A*:

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


A:5
5 km

A:5
3 km

E:1
D:0

2 km

Front

Vis

3 km

C:2

1 km

3 km

2 km

5 km

5 km

C:2

1 km

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


A:5

3 km

B:1

50

C:2
B:1

B:1

3 km

2 km

E:1
D:0

2 km

Front

Vis

A-[]-5 A-[]-5
B - [A] - 6
C - [A] - 5

A-[]-5

53

54

A*:

A*:

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


A:5

A:5

5 km

3 km

2 km

E:1

Como B es alzanzado por un mejor


camino, (con valor f igual a 5) entonces
DESCARTO B - [A] 6 y pongo el nodo
recin generado: B - [C,A] 5.

A*:

2 km

Front

Vis

55

3 km

2 km

E:1

2 km

A*:

Front

Vis

A:5

C:2

B:1

3 km

2 km

E:1

SOLUCIN

3 km

C:2
3 km

2 km

E:1

3 km

E:1

D:0

2 km

Front

Vis

A-[]-5 A-[]-5
B - [A] - 6 C - [A] - 5
C - [A] - 5 B - [C,A] - 5
B - [C,A] - 5
E - [C,A] - 7
D - [B,C,A] - 6

58

D:0

2 km

Front

Vis

A-[]-5 A-[]-5
B - [A] - 6 C - [A] - 5
C - [A] - 5 B - [C,A] - 5
B - [C,A] - 5
E - [C,A] - 7
D - [B,C,A] - 6

Si existe en Front un nodo N etiquetado con un estado


E, y generamos E por un mejor camino que el
representado por N, entonces reemplazamos N en Front
por un nodo N para E con este nuevo camino.
Si existe
i t en Vis
Vi un nodo
d N etiquetado
ti
t d con un estado
t d E
E,
y generamos E por un mejor camino, entonces N es
eliminado de Vis y se agrega a Front un nuevo nodo N
para E con este nuevo camino.

E:1

3 km

2 km

D:0

D:0
57

C:2

1 km

B:1

1 km

2 km

3 km

5 km

B:1

1 km

56

Generacin repetida de un nodo

5 km

3 km

C:2

B:1

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

A:5

5 km

B:1
B:1

A-[]-5 A-[]-5
B - [A] - 6 C - [A] - 5
C - [A] - 5
B - [C,A] - 5
E - [C,A] - 7

Vis

1 km

E:1
D:0

Front

A-[]-5 A-[]-5
B - [A] - 6 C - [A] - 5
C - [A] - 5
B - [C,A] - 5
E - [C,A] - 7

5 km

3 km

3 km

B:1

A:5

C:2

1 km

2 km

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

3 km

B:1
C:2

E:1

D:0

A:5

3 km

5 km

E:1

3 km

A*:

5 km

3 km

2 km

Descartamos B - [A]- 6 para quedarnos con B - [C,A] 5 ya que si para llegar a la meta hay que pasar por B,
conviene tomar por el camino que pasa por C. Notar
que llegar a B por el camino A,C,B cuesta menos (en
trminos de g) que llegar a B por el camino A, B!!!

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

A:5

1 km

1 km

B:1

A-[]-5 A-[]-5
B - [A] - 6 C - [A] - 5
C - [A] - 5

A:5

B:1

C:2
B:1

B ya est en
Front!!!
que hago?

C:2

1 km

E:1
D:0

3 km

B:1

3 km

3 km

B:1

5 km

5 km

C:2

1 km

1 km

A:5
3 km

B:1
B:1

A:5

3 km

5 km

C:2

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

De esta forma, E podr ser ser reconsiderado en el


futuro.
59

60

10

A*: f(n) = g(n) + h(n)


A:25

A:25

15 km

20 km
4 km

C:12

B:5
20 km

10 km

Queda
como
ejercicio

D:0
Front

FIN

Vis

A-[]25

61

11

Vous aimerez peut-être aussi