18/08/15
Inteligência Artificial
Problemas e Algoritmos de Busca
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)
18/08/15
O que é?
● Um algoritmo de busca é projetado para
encontrar um item com propriedades
especificadas em uma coleção de itens
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.
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.
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.
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.
18/08/15
Mundo dos Blocos
Problema: encontrar um plano para rearranjar
os blocos.
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.
18/08/15
Mundo dos Blocos
● Para encontrar um plano, devemos encontrar
uma sequência de movimentos que nos levem
ao objetivo.
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.
18/08/15
Mundo dos Blocos
18/08/15
Mundo dos Blocos
18/08/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
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)
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/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.
18/08/15
Busca Não Informada
18/08/15
Busca em Profundidade
18/08/15
Busca em Profundidade
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
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
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)
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)
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
18/08/15
Busca em Largura
18/08/15
Busca em Largura
18/08/15
Busca em Largura
18/08/15
Busca em Largura
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
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
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)
18/08/15
Busca de Custo Uniforme (UCS)
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
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
18/08/15
Busca Informada
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
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
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
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á
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
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
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)
18/08/15
Busca Gulosa (Greedy Search)
Custo: 450
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
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
18/08/15
A*
Custo: 418
18/08/15
18/08/15
A*
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
18/08/15
A*
18/08/15
A*

Inteligência Artificial - Aula2 - Busca em Grafos

  • 1.
  • 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 umProblema 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 umProblema 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 umProblema 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 umProblema 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.
  • 8.
    18/08/15 Mundo dos Blocos Problema:encontrar um plano para rearranjar os blocos.
  • 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 Comoesse 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.
  • 12.
  • 13.
  • 14.
  • 15.
    18/08/15 Descrição Formal doProblema ● 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 doProblema ● 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 doProblema 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.
  • 19.
  • 20.
  • 21.
  • 22.
    18/08/15 Busca em Profundidade DFS(G,v,f): sev = 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 ProfundidadeLimitada (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 ProfundidadeLimitada (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 AprofundamentoIterativo (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
  • 27.
  • 28.
  • 29.
  • 30.
  • 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)
  • 34.
  • 35.
    18/08/15 Busca de CustoUniforme (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 CustoUniforme ● 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
  • 37.
  • 38.
    18/08/15 Busca Informada ● Osalgoritmos 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 ● Agoraveremos 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 ● Ouseja, 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 ● Observeas 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 (GreedySearch) ● 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 (GreedySearch) ● 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)
  • 45.
  • 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 algoritmoA* é 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
  • 48.
  • 49.
  • 50.
  • 51.
    18/08/15 Outras Heurísticas ● Osalgoritmos 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
  • 52.
  • 53.