Buscar

Busca não informada (Slide)

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 72 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 72 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 72 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

1
Estratégias	de	Busca
Esta	aula	descreve	algumas	estratégias	
de	busca	em	espaço	de	estados
Busca	não	informada
2
Busca	em	IA
• Objetivo:	Transformar	um	problema	do	
mundo	real	em	um	problema	de	busca	
->	Modelar	o	problema	como	espaço	
de	estados
• Usar	uma	estratégia	de	busca	para	
encontrar	a	solução	
->	Busca	no	espaço	de	estados
3
Busca	em	Espaço	de	Estados
• Um	grafo	pode	ser	usado	para	representar	um	
espaço	de	estados em	que:
– Os nós	correspondem	a	situações	de	um	problema
– As	arestas correspondem	a	movimentos	permitidos	ou	ações	ou	passos	
da	solução	
– Um	dado	problema	é	solucionado	encontrando-se	um	caminho	no	grafo
• Um	problema	é	representado	por:
– Um	espaço	de	estados	(um	grafo)
– Um	estado (nó)	inicial
– Uma	condição	de	término	ou	critério	de	parada;	estados	(nós)	terminais	
são	aqueles	que	satisfazem	a	condição	de	término
• Custos
– Se	não	houver	custos,	há	interesse	em	soluções	de	caminho	mínimo
– No	caso	em	que	custos	são	adicionados	aos	movimentos	normalmente	
há	interesse	em	soluções	de	custo	mínimo
– O	custo	de	uma	solução	é	o	custo	das	arestas	ao	longo	do	caminho	da	
solução
4
Exemplo:	Quebra-Cabeça-8
• Estados?
• Operadores?
• Estado	Final:	=	estado	fornecido
• Custo	do	caminho?
5 4
6 1 8
7 3 2
1 2
8
3
4
7 6 5
Estado Inicial Estado Final
5
Exemplo:	Quebra-Cabeça-8
• Estados:	posições	inteiras	dos	quadrados
• Operadores:		mover	espaço	vazio	à	esquerda,	direita,	em	cima,	em	baixo
• Estado	Final:		estado	fornecido
• Custo	do	caminho:	1	por	movimento
5 4
6 1 8
7 3 2
1 2
8
3
4
7 6 5
Estado Inicial Estado Final
6
Exemplo:	8	Rainhas
• Estados?
• Operadores?
• Estado	Final?
• Custo	do	caminho?
7
Exemplo:	8	Rainhas
• Estados:	qualquer	arranjo	de	0	a	8	rainhas	no	tabuleiro
• Operadores:	adicionar	uma	rainha	a	qualquer	posição
• Estado	Final:	8	rainhas	no	tabuleiro,	sem	ataque
• Custo	do	caminho:	zero	(apenas	o	estado	final	é	
interessante...)	mas	não	confundir	com	complexidade	da	
busca....
8
Solução	PROLOG	- 8	RAINHAS
[pos(1,Y1),pos(2,Y2),....pos(8,Y8)]
/*i)		Lista	vazia	não	há	ataque
ii)		[pos(X,Y)|Outras]	 é		solução	se:
– Outras	é	solução	e
– pos(X,Y)	tal	que	(X,Y)	no	intervalo	0	ate	8	e
– pos(X,Y)	nao	ataca	qualquer	 rainha	em	Outras					*/
solucao([]).
solucao([pos(X,Y)|Outras])	:-
solucao(Outras),
pertence(Y,[1,2,3,4,5,6,7,8]),
nao_ataca(pos(X,Y),Outras).
nao_ataca(_,[]).
nao_ataca(pos(X,Y),[pos(X1,Y1)|Outras]):-
Y	=\=	Y1,
Y1-Y	=\=	X1-X,
Y1-Y	=\=	X-X1,
nao_ataca(pos(X,Y),Outras).
%	PARA	EXECUTAR				?- teste(+Numero_teste,?X).
teste(N,X)	:- t(N,X),solucao(X).
t(1,[pos(1,Y1),pos(2,Y2),pos(3,Y3),pos(4,Y4),pos(5,Y5),pos(6,Y6),pos(7,Y7),pos(8,Y8)]).
9
Exemplo:	Missionários	e	Canibais
q Estados?
q Operadores?
q Estado Final?
q Custo do caminho?
Três	missionários	e	três	canibais	encontram-se	na	
margem	esquerda	de	um	rio	e	devem	passar	
para	a	direita	utilizando	um	bote	de	2	lugares.
Em	nenhuma	hipótese	podemos	ter	mais	canibais	
do	que	missionários	quer	no	bote,	quer	em	
qualquer	uma	das	margens.
A	solução	é	representada	por	[M,C,L]	em	que	:
M	=	número	de	missionários	na	margem	esquerda
C	=	número	de	canibais	na	margem	esquerda			e	
L	=	margem	onde	esta	o	bote:	0	– direita;	1	- esquerda																														
10
Exemplo:	Missionários	e	Canibais
• Estados
– um	estado	é	uma	sequência	ordenada	de	três	números	representando	
o	número	de	missionários,	canibais	e	botes	na	margem	do	rio	na	qual	
eles	iniciam
– Assim	o	estado	inicial	é	[3,3,1]
• Operadores
– a	partir	de	cada	estado	os	operadores	possíveis	são	tomar	um	
missionário	e	um	canibal,	dois	missionários	ou	dois	canibais
– Há	no	máximo	5	operadores,	embora	alguns	estados	tenham	menos	
operadores	uma	vez	que	deve-se	evitar	estados	inválidos	(mais	
canibais	que	missionários)
– Se	for	necessário	distinguir	os	indivíduos,	haveria	27	operadores	ao	
invés	de	apenas	5
• Estado	Final:	[0,0,0]
• Custo	do	caminho:	número	de	travessias
11
Exemplo:	Mundo	do	Aspirador
12
Exemplo:	Mundo	do	Aspirador
13
Exemplo:	Mundo	do	Aspirador
• Estados?
• Operadores?
• Estado	Final?
• Custo	do	caminho?
14
Exemplo:	Mundo	do	Aspirador
• Estados:	um	dos	estados	mostrados	na	figura
• Operadores:	L	(esquerda),	R	(direita),	S	(sucção)
• Estado	Final:	nenhuma	sujeira	em	todos	os	ambientes
• Custo	do	caminho:	cada	ação	tem	custo	unitário
15
Exemplo:	Montagem	com	Robô
• Estados:
– coordenadas	de	valor	real	de	ângulos	das	junções	do	 robô
– partes	do	objeto	a	ser	montado
• Operadores:	movimentos	contínuos	das	junções	do	robô
• Estado	Final:	montagem	completa
• Custo	do	caminho:	tempo	para	montagem
16
Exemplo:	Pilha	de	Blocos
• Considere	o	problema	de	encontrar	um	
plano	(estratégia)	para	rearranjar	uma	pilha	
de	blocos	como	na	figura
– Somente	é	permitido	um	movimento	por	vez
– Um	bloco	somente	pode	ser	movido	se	não	há	nada	em	seu	topo
– Um	bloco	pode	ser	colocado	na	mesa	ou	acima	de	outro	bloco
B
A
C
C
B
A?
17
Exemplo:	Pilha	de	Blocos
• Na	situação	inicial	do	problema,	há	apenas	
um	movimento	possível:	colocar	bloco	C	na	
mesa
• Depois	que	C	foi	colocado	na	mesa,	há	três	
alternativas
– Colocar	A	na	mesa	ou
– Colocar	A	acima	de	C	ou
– Colocar	C	acima	de	A	(movimento	que	não	deve	ser	considerado	
pois	retorna	a	uma	situação	anterior	do	problema)
B
A
C C
B
A
?
18
Exemplo:	Pilha	de	Blocos
ABC CAB
B
C
A
C
B
A
B
AC
A
BC
A
BC
C
AB
B
AC
C
A
B
A
C
B
B
A
C
A
B
C
estado inicial
19
Busca	em	Espaço	de	Estados
• EstratégiasBásicas	de	Busca	
(Busca	não	informada	ou	Cega)
— não utiliza informações	sobre	o	problema	para	guiar	a	
busca
— estratégia	de	busca	exaustiva	aplicada	até	uma	solução	ser	
encontrada	(ou	falhar)	
¢Profundidade	(Depth-first)
¢Largura	(Breadth-first)
— Estratégias	Heurísticas	de	Busca
(Busca	Informada)
— utiliza informações	específicas	do	domínio	para	ajudar	na	
decisão
¢Hill-Climbing
¢Best-First
¢A*
20
Busca	em	Espaço	de	Estados
• Um	espaço	de	estados	pode	ser	representado	pela	
relações
— pode_ir(X,Y) que	é	verdadeira	se	há	um	movimento	permitido	
no	espaço	de	estados	do	nó	X	para	o	nó	Y;	neste	caso,	Y	é	um	
sucessor de	X
— final(X) que	é	verdadeira	se	X	é	um	estado	final
• Se	houver	custos	envolvidos,	um	terceiro	argumento	
pode	ser	adicionado,	o	custo	do	movimento
— pode_ir(X,Y,Custo)
• A	relação	pode_ir pode	ser	representada	explicitamente	
por	um	conjunto	de	fatos
• Entretanto,	para	espaços	de	estado	complexos	a	relação	
pode_ir é	usualmente	definida	implicitamente	por	meio	
de	regras que	permitam	calcular	o	sucessor	de	um	dado	
nó
21
Busca	em	Profundidade
d fe
a
b c
g
h i j k
Inserir na frente, remover da frente: a
22
Busca	em	Profundidade
d fe
a
b c
g
h i j k
Inserir na frente, remover da frente: b, c
23
Busca	em	Profundidade
d fe
a
b c
g
h i j k
Inserir na frente, remover da frente: d, e, c
24
Busca	em	Profundidade
d fe
a
b c
g
h i j k
Inserir na frente, remover da frente: h, e, c
25
Busca	em	Profundidade
d fe
a
b c
g
h i j k
Inserir na frente, remover da frente: e, c
26
Busca	em	Profundidade
d fe
a
b c
g
h i j k
Inserir na frente, remover da frente: i, j, c
27
Busca	em	Profundidade
d fe
a
b c
g
h i j k
Inserir na frente, remover da frente: j, c
28
Busca	em	Profundidade
d fe
a
b c
g
h i j k
Inserir na frente, remover da frente: c
29
Busca	em	Profundidade
d fe
a
b c
g
h i j k
Inserir na frente, remover da frente: f, g
30
Busca	em	Profundidaded fe
a
b c
g
h i j k
Inserir na frente, remover da frente: k, g
31
Busca	em	Profundidade
d fe
a
b c
g
h i j k
Inserir na frente, remover da frente: g
32
Busca	em	Profundidade
• Estado	inicial:	a
• Estados	finais:	j,f
• Nós	visitados	na	ordem:	
a,b,d,h,e,i,j
• Solução:	[a,b,e,j]
• Após	backtracking,	
a	outra	solução	é
encontrada:	[a,c,f] d fe
a
b c
g
h i j k
33
Busca	em	Profundidade
• Algoritmo	para	busca	em	profundidade:para	encontrar	
uma	solução (Caminho	da	solução)	de	um	estado	inicial	I		
para	um	estado		final	F	(busca	forward)
• Se	F	foi	alcançado	(o	estado	atual	é	F)	o	Caminho	é	
uma	solução
• Se	o	estado	atual	tem	um	sucessor,	e	esse	sucessor	
não	faz	parte	do	caminho	até	agora	(detecção	de	
loops)	insira	no	caminho	até	agora	e	continue
• A	busca	em	profundidade é	o	recurso	mais	
simples	em	programação	recursiva e,	por	
isso,	Prolog	quando	executa	metas	explora	
alternativas	utilizando-a
34
Busca	em	Profundidade	Backward
caminho_cegoBPBackward(I,F,Cam):-
caminho_b(I,[F],Cam).
caminho_b(I,[I|Caminho],[I|Caminho]).
caminho_b(I,[Ult_Estado|Caminho_ate_agora],Cam):-
pode_ir(Est,Ult_Estado),
not( pertence1(Est,Caminho_ate_agora)),
caminho_b(I,[Est,Ult_Estado|Caminho_ate_agora],Cam). 
pertence1(E,[E|_]):- !.
pertence1(E,[_|T]):-
pertence1(E,T).
35
Busca	em	Profundidade	Forward
caminho_cegoBPForward(EI,EF,Cam):-
caminho_f(EF,[EI],Cam).
caminho_f(EF,[EF|Cam],[EF|Cam]).
caminho_f(EF,[Eint|Caminho_ate_agora],Cam):-
pode_ir(Eint,E),
not(pertence1(E,Caminho_ate_agora)),
caminho_f(EF,[E,Eint|Caminho_ate_agora], Cam).
36
Algoritmo	Busca	em	Profundidade
1)Empilhe um nó v origem na pilha P e 
marque-o como alcançado
2) Enquanto a pilha P não vazia faça
v ← elemento do topo da pilha
//(desempilhe)
se existe w a partir de v, // (v,w)
e w ainda não foi alcançado
• marque w como alcançado 
• insira w na pilha P // empilhe(w)
• Um	algoritmo	de	Busca	em	Profundidade	pode	ser:
37
Considerações:	Busca	em	Profundidade
• Um	problema	com	a	busca	em	profundidade	é	que	
pode	existir	espaços	de	estado	nos	quais	o	algoritmo	
se	perde
• Muitos	espaços	de	estado	são	infinitos	e,	nesse	caso,	
o	algoritmo	de	busca	em	profundidade	pode	perder	
um	nó	final,	prosseguindo	por	um	caminho	infinito	no	
grafo
• O	algoritmo	então	explora	esta	parte	infinita	do	
espaço,	nunca	chegando	perto	de	um	nó	final.
• Para	n nós	e	a arestas,	a	complexidade	de	tempo	é	
O(a+n)
• Para	não	prosseguir		por	um	caminho	infinito	no	grafo	
e	perder	uma	eventual	solução,	uma	proposta	é	
limitar	a	busca.
38
Exercício	- Busca	em	Profundidade
• Considere	a	busca	no	espaço	abaixo,	em	que	“a” é	o	
estado	inicial	e	“k” é	o	estado	final.
• 1.Modele	o	espaço	de	busca	com	os	fatos	pode_ir(X,Y).
39
Exercício	– Busca	em	Profundidade	
(continuação)• 2.	Execute	o	algoritmo	em	prolog de	busca	em	
profundidade	para	encontrar	a	solução	do	problema.	
Mostre	o	passo	a	passo	da	execução,	os	nós	visitados	e	o	
caminho	encontrado.
caminho_cegoBPBackward(I,F,Cam):-
caminho_b(I,[F],Cam).
caminho_b(I,[I|Caminho],[I|Caminho]).
caminho_b(I,[Ult_Estado|Caminho_ate_agora],Cam):-
pode_ir(Est,Ult_Estado),
not( pertence1(Est,Caminho_ate_agora)),
caminho_b(I,[Est,Ult_Estado|Caminho_ate_agora],Cam). 
pertence1(E,[E|_]):- !.
pertence1(E,[_|T]):-
pertence1(E,T).
40
Busca	em	Profundidade	Limitada	(L=0)
d fe
a
b c
g
h i j k
Inserir na frente, remover da frente: a
41
Busca	em	Profundidade	Limitada	(L=1)
d fe
a
b c
g
h i j k
Inserir na frente, remover da frente: a
42
Busca	em	Profundidade	Limitada	(L=1)
d fe
a
b c
g
h i j k
Inserir na frente, remover da frente: b, c
43
Busca	em	Profundidade	Limitada	(L=1)
d fe
a
b c
g
h i j k
Inserir na frente, remover da frente: c
44
Busca	em	Profundidade	Limitada	(L=2)
d fe
a
b c
g
h i j k
Inserir na frente, remover da frente: a
45
Busca	em	Profundidade	Limitada	(L=2)
d fe
a
b c
g
h i j k
Inserir na frente, remover da frente: b, c
46
Busca	em	Profundidade	Limitada	(L=2)
d fe
a
b c
g
h i j k
Inserir na frente, remover da frente: d, e, c
47
Busca	em	Profundidade	Limitada	(L=2)
d fe
a
b c
g
h i j k
Inserir na frente, remover da frente: e, c
48
Busca	em	Profundidade	Limitada	(L=2)
d fe
a
b c
g
h i j k
Inserir na frente, remover da frente: c
49
Busca	em	Profundidade	Limitada	(L=2)
d fe
a
b c
g
h i j k
Inserir na frente, remover da frente: f, g
50
Busca	em	Profundidade	Limitada	(L=2)
d fe
a
b c
g
h i j k
Inserir na frente, remover da frente: g
51
Busca	em	Profundidade	Limitada
• Um	problema	com	a	busca	em	profundidade	limitada	
é	que	não	se	tem	previamente	um	limite	razoável
• Se	o	limite	for	muito	pequeno	(menor	que	qualquer	
caminho	até	uma	solução)	então	a	busca	falha
• Se	o	limite	for	muito	grande,	a	busca	se	torna	muito	
complexa
• Para	resolver	este	problema	a	busca	em	
profundidade	limitada	pode	ser	executada	de	forma	
iterativa,	variando	o	limite	durante	a	execução	do	
procedimento:	comece	com	um	limite	de	
profundidade	pequeno	e	aumente	gradualmente	o	
limite	até	que	uma	solução	seja	encontrada
• Esta	busca	é	denominada	busca	em	profundidade	
iterativa
52
Busca	em	Largura
• Em	contraste	com	a	busca	em	profundidade,	a	
busca	em	largura escolhe primeiro	visitar	aqueles	
nós	mais	próximos	do	nó	inicial
• O	algoritmo	não	é	tão	simples,	pois	é	necessário	
manter	um	conjunto de	nós	candidatos	
alternativos	e	não	apenas	um	único,	como	na	
busca	em	profundidade
• O	conjunto de	nós	candidatos é	todo	o	nível	
inferior	da	árvore	de	busca
• Além	disso,	só	o	conjunto	é	insuficiente	se	o	
caminho	da	solução	também	for	necessário
• Assim,	ao	invés	de	manter	um	conjunto	de	nós	
candidatos,	é	necessário	manter	um	conjunto	de	
caminhos	candidatos
53
Busca	em	Largura
d fe
a
b c
g
h i j k
Inserir no final, remover da frente: a
54
Busca	em	Largura
d fe
a
b c
g
h i j k
Inserir no final, remover da frente: b, c
55
Busca	em	Largura
d fe
a
b c
g
h i j k
Inserir no final, remover da frente: c, d, e
56
Busca	em	Largura
d fe
a
b c
g
h i j k
Inserir no final, remover da frente: d, e, f, g
57
Busca	em	Largura
d fe
a
b c
g
h i j k
Inserir no final, remover da frente: e, f, g, h
58
Busca	em	Largura
d fe
a
b c
g
h i j k
Inserir no final, remover da frente: f, g, h, i, j
59
Busca	em	Largura
d fe
a
b c
g
h i j k
Inserir no final, remover da frente: g, h, i, j, k
60
Busca	em	Largura
d fe
a
b c
g
h i j k
Inserir no final, remover da frente: h, i, j, k
61
Busca	em	Largura
d fe
a
b c
g
h i j k
Inserir no final, remover da frente: i, j, k
62
Busca	em	Largura
d fe
a
b c
g
h i j k
Inserir no final, remover da frente: j, k
63
Busca	em	Largura
d fe
a
b c
g
h i j k
Inserir no final, remover da frente: k
64
Busca	em	Largura
• Estado	inicial:	a
• Estados	finais:	j,f
• Nós	visitados	na	ordem:	
a,b,c,d,e,f
• A	solução	mais	curta	[a,c,f]	
é	encontrada	antes	da	mais	
longa	[a,b,e,j]
d fe
a
b c
g
h i j k
s(a,b). s(c,f).		 s(e,i).
s(a,c). s(c,g).		 s(e,j).
s(b,d). s(d,h).		 s(f,k).
s(b,e). s(h,d).	
final(f).
final(j).
65
Busca	em	Largura
• O	conjunto	de	caminhos	candidatos	será	
representado	como	uma	lista	de	caminhos	e	cada	
caminho	será	uma	lista	de	nós	naordem	reversa
• A	busca	inicia	com	um	conjunto	de	um	único	
candidato:
– [	[Início]	]
• Um	algoritmo	de	busca	em	largura:
– Se	a	cabeça do	primeiro	caminho	é	um	nó	final então	
este	caminho	é	uma	solução;	caso	contrário
– Remova	o	primeiro	caminho	do	conjunto	de	candidatos	
e	gere	o	conjunto	de	todas	as	extensões	em	um	passo	a	
partir	deste	caminho;	adicione	este	conjunto	de	
extensões	ao	final	do	conjunto	de	candidatos	e	execute	
busca	em	largura	para	atualizar	este	conjunto
66
Busca	em	Largura
• Comece	com	o	conjunto	de	candidatos	inicial
• [	[a]	]
• Gere	extensões	de	[a]	(note	que	estão	em	ordem	reversa):
• [	[b,a],	[c,a]	]
• Remova	o	primeiro	candidato	[b,a]	do	conjunto	de	candidatos	e	gere	
extensões	deste	caminho
• [d,b,a],	[e,b,a]	
• Adicione	as	extensões	ao	final	do	conjunto	de	candidatos
• [	[c,a],	[d,b,a],	[e,b,a]	]
• Remova	[c,a]	e	adicione	as	extensões	ao	final
• [	[d,b,a],	[e,b,a],	[f,c,a],	[g,c,a]	]
• Estendendo	[d,b,a]	
• [	[e,b,a],	[f,c,a],	[g,c,a],	[h,d,b,a]	]
• Estendendo	[e,b,a]
• [	[f,c,a],	[g,c,a],	[h,d,b,a],	[i,e,b,a],	[j,e,b,a]	]
• A	busca	encontra	a	lista	[f,c,a]	que	contém	um	nó	final,	portanto	o	
caminho	é	retornado	como	uma	solução
d fe
a
b c
g
h i j k
67
Implementação	Prolog	Busca	em	Largura
buscaLargura([[No|_]|_],[No|_]):- final(No).
buscaLargura([Caminho|OutrosCaminhos],Sol):-
estender(Caminho,NovosCaminhos),
concatenar(OutrosCaminhos,NovosCaminhos, 
Caminhos1),
buscaLargura(Caminhos1,Sol).
68
Implementação	Prolog	Busca	em	Largura
% resolva(No,Solucao) Solucao é um caminho 
acíclico (na ordem reversa) entre nó inicial No 
e uma solução.
resolva(No,Solucao) :-
buscaLargura([[No]],[Solucao]).
estender([No|Caminho],NovosCaminhos):-
findall([NovoNo,No|Caminho],(s(No,NovoNo),
not(pertence(NovoNo,[No|Caminho]))),
NovosCaminhos).
concatena([],L,L). 
concatena([X|Y],L,[X|Lista]):-
concatena(Y,L,Lista).
69
1)Insere na fila F o nó u e marque-o como 
alcançado
2) Enquanto fila F não vazia faça
v ← elemento da frente da fila
(retire v da fila)
para todo w que partir de v,
e w ainda não foi alcançado
• marque w como alcançado 
• insira w na fila F
Algoritmo	Busca	em	Largura
• Um	algoritmo	de	Busca		em	Largura	pode	ser	definida	da	
seguinte	forma:
70
Exercício	– Busca	em	Largura
• Considere	a	busca	no	espaço	abaixo,	em	que	“a” é	o	
estado	inicial	e	“k” é	o	estado	final.
• Considerando	a	modelagem	do	espaço	de	busca	feita	
no	exercício	do	slide	38,	execute	o	algoritmo	em	prolog
de	busca	em	largura para	encontrar	a	solução	do	
problema.	Mostre	o	passo	a	passo	da	execução,	os	nós	
visitados	e	o	caminho	encontrado.
71
Complexidade	dos	Algoritmos	de	Busca
• b	=	número	de	caminhos	alternativos/
fator	de	bifurcação/ramificação	(branching	factor)
• d	=	profundidade	da	solução
• m	=	profundidade	máxima	da	árvore	de	busca
• l	=		limite	de	profundidade
Tempo Espaço
Solução menor 
altura
garantida
Completa?
(encontra uma solução 
quando ela existe)
Profundidade O(bm) O(bm) Não
Sim (espaços finitos)
Não (espaços infinitos)
Profundidade limitada O(bl) O(bl) Não Sim se l ≥ d
Profundidade iterativa O(bd) O(bd) Sim Sim
Largura O(bd) O(bd) Sim Sim
72
Modele	um	problema	como	uma	
árvore	de	busca
• Use	aplicativos	para	facilitar	o	entendimento	dos	
algoritmos	de	busca	
http://www.aispace.org/search/search.jnlp

Outros materiais

Materiais recentes

Perguntas Recentes