O documento discute problemas e algoritmos de busca em inteligência artificial. Aborda o que são problemas e algoritmos de busca, definindo características de um problema de busca e tipos de algoritmos como busca em profundidade, largura e informada. Explica conceitos como estado inicial, ações possíveis, modelo de transição e objetivo para definir formalmente um problema de busca.
2. 18/08/15
O que é?
● Um problema de busca é uma tarefa que pode
ser resolvida através de uma sequência de
passos começando em um estado inicial e
tendo um objetivo (ou estado final)
3. 18/08/15
O que é?
● Um algoritmo de busca é projetado para
encontrar um item com propriedades
especificadas em uma coleção de itens
4. 18/08/15
Definição de um Problema de Busca
Um problema pode ser resolvido por um algoritmo de busca se ele tiver as seguintes características:
● Estado Inicial: uma descrição da situação inicial do agente (por exemplo, o vértice inicial em um grafo)
● Ações Possíveis: o conjunto de ações possíveis (por exemplo, movimentos do xadrez) disponíveis para
o agente em cada estado
● Modelo de Transição: descrição dos efeitos de cada ação em cada estado (no caso de um grafo, é uma
função que retorna os vizinhos de um dado vértice)
● Objetivo: uma forma de verificar se o agente atingiu seu estado objetivo (em um grafo, pode ser uma
função que recebe um estado e retorna verdadeiro ou falso)
● Custos: uma função que calcula o custo de um caminho (uma sequência de ações). Por exemplo, o
custo de um caminho entre 2 cidades pode ser a soma dos tempos de cada trecho entre elas.
5. 18/08/15
Definição de um Problema de Busca
● Muitos problemas podem ser vistos como “alcançar um
estado final (meta) a partir de um ponto inicial”:
● Existe um espaço de estados que define o problema e
suas possíveis soluções de uma maneira formal;
● O espaço pode ser percorrido aplicando operadores para
mudar de um estado para o próximo.
6. 18/08/15
Definição de um Problema de Busca
● um espaço de estados possíveis, incluindo um
estado inicial e um estado final (objetivo):
● dirigir de Foz do Iguaçu a Cascavel;
● jogo de 8-números.
7. 18/08/15
Definição de um Problema de Busca
● Indo de casa para a aula:
● estado inicial: casa;
● objetivo: IFRS;
● operadores: dar um passo, virar (para quem mora bem perto).
● Carregando um caminhão de mudança:
● estado inicial: apartamento cheio de móveis e outros
objetos;
● objetivo: apartamento vazio, caixas e mobília dentro do caminhão;
● operadores: selecionar item, levar até o caminhão, carregar no
caminhão.
9. 18/08/15
Mundo dos Blocos
Condições:
● Um bloco pode ser movido apenas se seu topo
está vazio;
● Apenas um bloco pode ser movido de cada vez;
● Um bloco pode ser colocado sobre a mesa ou
sobre outro bloco.
10. 18/08/15
Mundo dos Blocos
● Para encontrar um plano, devemos encontrar
uma sequência de movimentos que nos levem
ao objetivo.
11. 18/08/15
Mundo dos Blocos
Como esse exemplo ilustra, existem dois tipos
de conceitos envolvidos nesse problema:
● Situações do problema;
● Movimentos ou ações permitidos, os quais
transformam as situações de problema em
outras situações.
15. 18/08/15
Descrição Formal do Problema
● Definir o espaço de estados;
● Especificar:
● estado(s) inicial(ais) e
● estado(s) final(ais);
● Especificar:
● o conjunto de operadores
16. 18/08/15
Descrição Formal do Problema
● Espaço de estados: conjunto de todos os estados
alcançáveis a partir do estado inicial por qualquer
sequência de ações;
● Definição do objetivo:
● Propriedade abstrata: condição de xeque-mate no Xadrez;
● Conjunto de estados finais do mundo: estar na cidade-destino.
● Solução: caminho (sequência de ações ou
operadores) que leva do estado inicial a um
estado final (objetivo)
17. 18/08/15
Descrição Formal do Problema
Um grafo pode ser usado para representar um espaço de estados onde:
● 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 é definido 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.
18. 18/08/15
Solucionando o Problema
● Formulação do problema e do objetivo: quais são os
estados e as ações a considerar? qual é (e como
representar) o objetivo?
● Busca (solução do problema): processo que gera/analisa
sequências de ações para alcançar um objetivo solução =
caminho entre estado inicial e estado final;
● Execução: Executar (passo a passo) a solução completa
encontrada.
22. 18/08/15
Busca em Profundidade
DFS(G,v,f):
se v = f, retorne [f] //uma lista contendo apenas f
marque v //coloque um 'true' em uma lista global de visitados
Para cada vizinho de v faça
se vizinho não marcado então
p = DFS(G,vizinho,f) //p é um caminho / lista
se p contém f, retorne [v p] //v adicionado ao array p
retorne [] //caminho vazio
23. 18/08/15
Busca em Profundidade
● Problema: pode ficar presa em grafos infinitos
e jamais achar o objetivo (algoritmo
incompleto)
● Solução: Busca em Profundidade Limitada
(LDFS)
● Defina uma profundidade máxima
● Faça a chamada recursiva apenas se não chegou no limite
24. 18/08/15
Busca em Profundidade Limitada (LDFS)
LDFS(G,v,f,l):
se l = 0, retorne []
se v = f, retorne f
marque v
Para cada vizinho de v faça
se vizinho não marcado então
p = LDFS(G,vizinho,f,l-1)
se p contém f, retorne [v p]
retorne [] (caminho vazio)
25. 18/08/15
Busca em Profundidade Limitada (LDFS)
● Problema: a busca pode encerrar antes de
chegar no objetivo (algoritmo incompleto)
● Solução: Busca com Aprofundamento Iterativo
(IDDFS)
● Chame a busca em profundidade limitada várias vezes com
limites cada vez maiores
● Não fica preso e sempre acha a solução (algoritmo
completo)
26. 18/08/15
Busca com Aprofundamento Iterativo (IDDFS)
IDDFS(G,v,f)
caminho = [] //Lista vazia
l = 1
enquanto caminho não contém f
caminho = ldfs(G,v,f,l)
l = l + 1
31. 18/08/15
Busca em Largura (BFS)
BuscaEmLargura(G,s,f)
marque s
insira s em F (F é uma fila)
origem = [] //Lista vazia
enquanto F não está vazia faça e não contém f
seja v o primeiro vértice de F
para cada vizinho de v faça
se vizinho não está marcado então
marque vizinho
insira vizinho em F
origem[vizinho] = v
fim se
fim para
retira v de F
fim enquanto
caminho = []
se fila contém f
caminho = [f] //Lista contendo f
v = f
enquanto v != s
v = origem[v]
caminho = [v caminho] //Adiciona v
fim enquanto
fim se
32. 18/08/15
Busca em Largura (BFS)
● Nunca fica presa, sempre acha uma solução
(algoritmo completo)
● Sempre acha o caminho com a menor
quantidade de ações (não necessariamente o
melhor) (algoritmo não-ótimo)
● Se o grafo não tiver custos diferentes nas
arestas, o BFS encontra a melhor solução
33. 18/08/15
Grafos com Pesos
● Os algoritmos DFS e BFS são apropriados apenas
para grafos sem pesos nas arestas
● Grafos podem conter pesos que indicam o custo de
percorrer uma aresta, como uma distância ou
dificuldade
● Para trabalhar com este tipo de grafo, precisaremos
de outros algoritmos (mas que são muito similares
ao BFS)
35. 18/08/15
Busca de Custo Uniforme (UCS)
BuscaUniforme(G,s,f)
marque s com custo 0
insira s em F (F é uma fila de prioridade)
origem = []
enquanto F não está vazia e não contém f no início da fila faça
seja v o primeiro vértice de F
para cada vizinho de v faça
se custo até vizinho vindo por v < custo marcado no vizinho então
marque vizinho com custo vindo por v
insira vizinho em F
origem[vizinho] = v
fim se
fim para
retira v de F
fim enquanto
caminho = []
se fila contém f
caminho = [f]
v = f
enquanto v != s
v = origem[v]
caminho = [v caminho]
fim enquanto
fim se
36. 18/08/15
Busca de Custo Uniforme
● Nunca fica presa (algoritmo completo)
● Sempre acha a melhor solução (algoritmo
ótimo)
● Fila de prioridades pronta em Java:
http://docs.oracle.com/javase/7/docs/api/java
/util/PriorityQueue.html
38. 18/08/15
Busca Informada
● Os algoritmos vistos até o momento são considerados de
busca não-informada
● Isto significa que eles só sabem onde está o objetivo (estado
final) quando chegam nele
● Enquanto isso não acontece, o melhor que pode ser feito é
vasculhar tudo em todas as direções
● É como estar em um labirinto sem ideia de onde fica a saída
39. 18/08/15
Busca Informada
● Agora veremos algoritmos de busca informada
● Estes algoritmos são usados quando podemos
fornecer informação de proximidade ao objetivo
● Se sabemos onde está o estado final, podemos
direcionar a busca nesta direção
● É como estar em um labirinto onde podemos ver uma
torre no local da saída
40. 18/08/15
Busca Informada
● Ou seja, por mais que o UCS seja ótimo, no sentido
de que ele sempre encontra o melhor caminho, ele
não é o mais eficiente possível
● Algoritmos de busca informada são muito mais
rápidos e eficientes, explorando menos nós no grafo
● Mas para podermos usar um destes algoritmos,
precisamos de uma forma de informar a
proximidade até o alvo em cada nó do grafo
41. 18/08/15
Heurísticas
● Uma heurística é uma estimativa
● No contexto de algoritmos de busca informada, usaremos heurísticas
para estimar a distância que falta de um vértice até o objetivo
● Na busca não informada usávamos apenas o custo percorrido
● Se usarmos apenas a heurística, teremos a Busca Gulosa (ela sempre explora o vértice
aparentemente mais próximo do objetivo)
● Se somarmos o custo percorrido a uma estimativa de quanto falta até o objetivo, temos o
algoritmo A*
● Dizemos que esses algoritmos são de busca informada pois eles
conhecem a localização do objetivo e podem usar esta informação para
estimar quanto falta para chegar lá
42. 18/08/15
Busca Informada
● Observe as diferentes formas de calcular o
custo até um vértice:
● UCS → Custo Percorrido
● Busca Gulosa → Custo Restante Estimado
● A* → Custo Percorrido + Custo Restante
Estimado
43. 18/08/15
Busca Gulosa (Greedy Search)
● A única diferença da Busca Gulosa para a UCS é
que a ordem da fila não é dada pelo custo
percorrido até cada vértice, mas sim pela
estimativa da distância restante até o objetivo
44. 18/08/15
Busca Gulosa (Greedy Search)
● A Busca Gulosa é completa desde que não se
visite vértices repetidos
● A Busca Gulosa não é ótima
● Em geral é mais rápida que a UCS (expande
menos vértices)
46. 18/08/15
A* (A-Estrela / A-Star)
● O algoritmo A* também é idêntico à UCS e à
Busca Gulosa
● Porém a ordenação da fila de prioridades é
pela soma do custo percorrido com a
estimativa da distância restante
custo total = percorrido + estimado
47. 18/08/15
A*
● O algoritmo A* é completo e ótimo
● Desde que a heurística usada seja admissível
● Uma heurística é dita admissível se ela não superestima o custo real
● Ou seja, podemos errar as estimativas para baixo, mas nunca para cima
– Se a estimativa for sempre 0, caímos no UCS
● Por isso, em problemas de mapas em geral, a distância em linha reta é uma
boa heurística: é impossível fazer um trajeto menor que a linha reta,
portanto a estimativa nunca fica acima do valor real
51. 18/08/15
Outras Heurísticas
● Os algoritmos de busca informada não são
limitados a grafos de mapas
● Assim como qualquer algoritmo de busca em
grafos, eles também são genéricos
● Mas precisamos definir heurísticas adequadas
para cada tipo de problema