SlideShare a Scribd company logo
1 of 53
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*

More Related Content

What's hot

Estrutura de Dados - Aula 06 - Pilhas Estáticas
Estrutura de Dados - Aula 06 - Pilhas EstáticasEstrutura de Dados - Aula 06 - Pilhas Estáticas
Estrutura de Dados - Aula 06 - Pilhas EstáticasLeinylson Fontinele
 
Aula 02 - Agentes e problemas de busca
Aula 02 - Agentes e problemas de buscaAula 02 - Agentes e problemas de busca
Aula 02 - Agentes e problemas de buscaLeinylson Fontinele
 
Pseudocódigo - Estrutura de Repetição (Lógica de Programação)
Pseudocódigo - Estrutura de Repetição (Lógica de Programação)Pseudocódigo - Estrutura de Repetição (Lógica de Programação)
Pseudocódigo - Estrutura de Repetição (Lógica de Programação)Gercélia Ramos
 
Teoria dos Grafos - História e COnceitos Iniciais
Teoria dos Grafos - História e COnceitos IniciaisTeoria dos Grafos - História e COnceitos Iniciais
Teoria dos Grafos - História e COnceitos IniciaisVictor Hazin da Rocha
 
Variaveis locais e globais
Variaveis locais e globaisVariaveis locais e globais
Variaveis locais e globais111111119
 
Caminho Mínimo em Grafos - Algoritmo de Bellman-Ford
Caminho Mínimo em Grafos - Algoritmo de Bellman-FordCaminho Mínimo em Grafos - Algoritmo de Bellman-Ford
Caminho Mínimo em Grafos - Algoritmo de Bellman-FordGabriel Albuquerque
 
Exercicios resolvidos visuAlg
Exercicios resolvidos visuAlgExercicios resolvidos visuAlg
Exercicios resolvidos visuAlgWillians Miyabara
 
Matemática Discreta - Introdução
Matemática Discreta - IntroduçãoMatemática Discreta - Introdução
Matemática Discreta - IntroduçãoUlrich Schiel
 
Java orientação a objetos (associacao, composicao, agregacao)
Java   orientação a objetos (associacao, composicao, agregacao)Java   orientação a objetos (associacao, composicao, agregacao)
Java orientação a objetos (associacao, composicao, agregacao)Armando Daniel
 
Algoritmos - Formas de Representação de Algoritmos
Algoritmos - Formas de Representação de AlgoritmosAlgoritmos - Formas de Representação de Algoritmos
Algoritmos - Formas de Representação de AlgoritmosElaine Cecília Gatto
 
Aula 8 inducao matematica
Aula 8   inducao matematicaAula 8   inducao matematica
Aula 8 inducao matematicawab030
 
Lógica de Programação e Algoritmos
Lógica de Programação e AlgoritmosLógica de Programação e Algoritmos
Lógica de Programação e AlgoritmosMario Jorge Pereira
 
Fluxograma (Lógica de Programação)
Fluxograma (Lógica de Programação)Fluxograma (Lógica de Programação)
Fluxograma (Lógica de Programação)Gercélia Ramos
 
Sistemas de Numeracao
Sistemas de NumeracaoSistemas de Numeracao
Sistemas de NumeracaoMauro Pereira
 

What's hot (20)

Estrutura de Dados - Aula 06 - Pilhas Estáticas
Estrutura de Dados - Aula 06 - Pilhas EstáticasEstrutura de Dados - Aula 06 - Pilhas Estáticas
Estrutura de Dados - Aula 06 - Pilhas Estáticas
 
Visualg
VisualgVisualg
Visualg
 
Aula 02 - Agentes e problemas de busca
Aula 02 - Agentes e problemas de buscaAula 02 - Agentes e problemas de busca
Aula 02 - Agentes e problemas de busca
 
Pseudocódigo - Estrutura de Repetição (Lógica de Programação)
Pseudocódigo - Estrutura de Repetição (Lógica de Programação)Pseudocódigo - Estrutura de Repetição (Lógica de Programação)
Pseudocódigo - Estrutura de Repetição (Lógica de Programação)
 
Teoria dos Grafos - História e COnceitos Iniciais
Teoria dos Grafos - História e COnceitos IniciaisTeoria dos Grafos - História e COnceitos Iniciais
Teoria dos Grafos - História e COnceitos Iniciais
 
Algoritmos em portugol
Algoritmos em portugolAlgoritmos em portugol
Algoritmos em portugol
 
Variaveis locais e globais
Variaveis locais e globaisVariaveis locais e globais
Variaveis locais e globais
 
Caminho Mínimo em Grafos - Algoritmo de Bellman-Ford
Caminho Mínimo em Grafos - Algoritmo de Bellman-FordCaminho Mínimo em Grafos - Algoritmo de Bellman-Ford
Caminho Mínimo em Grafos - Algoritmo de Bellman-Ford
 
Exercicios resolvidos visuAlg
Exercicios resolvidos visuAlgExercicios resolvidos visuAlg
Exercicios resolvidos visuAlg
 
Matemática Discreta - Introdução
Matemática Discreta - IntroduçãoMatemática Discreta - Introdução
Matemática Discreta - Introdução
 
Java orientação a objetos (associacao, composicao, agregacao)
Java   orientação a objetos (associacao, composicao, agregacao)Java   orientação a objetos (associacao, composicao, agregacao)
Java orientação a objetos (associacao, composicao, agregacao)
 
Algoritmos - Formas de Representação de Algoritmos
Algoritmos - Formas de Representação de AlgoritmosAlgoritmos - Formas de Representação de Algoritmos
Algoritmos - Formas de Representação de Algoritmos
 
Python - Introdução
Python - IntroduçãoPython - Introdução
Python - Introdução
 
Aula 8 inducao matematica
Aula 8   inducao matematicaAula 8   inducao matematica
Aula 8 inducao matematica
 
Lógica de Programação e Algoritmos
Lógica de Programação e AlgoritmosLógica de Programação e Algoritmos
Lógica de Programação e Algoritmos
 
Aula sobre Tabela Hash
Aula sobre Tabela HashAula sobre Tabela Hash
Aula sobre Tabela Hash
 
Matrizes e determinantes
Matrizes e determinantesMatrizes e determinantes
Matrizes e determinantes
 
Linguagem C - Strings
Linguagem C - StringsLinguagem C - Strings
Linguagem C - Strings
 
Fluxograma (Lógica de Programação)
Fluxograma (Lógica de Programação)Fluxograma (Lógica de Programação)
Fluxograma (Lógica de Programação)
 
Sistemas de Numeracao
Sistemas de NumeracaoSistemas de Numeracao
Sistemas de Numeracao
 

More from Rafael Pinto

Inteligência Artificial - Aula15 - Algoritmos Genéticos
Inteligência Artificial - Aula15 - Algoritmos GenéticosInteligência Artificial - Aula15 - Algoritmos Genéticos
Inteligência Artificial - Aula15 - Algoritmos GenéticosRafael Pinto
 
Inteligência Artificial - Aula5 - PageRank
Inteligência Artificial - Aula5  - PageRankInteligência Artificial - Aula5  - PageRank
Inteligência Artificial - Aula5 - PageRankRafael Pinto
 
Inteligência Artificial - Aula1 intro
Inteligência Artificial - Aula1 introInteligência Artificial - Aula1 intro
Inteligência Artificial - Aula1 introRafael Pinto
 
Slow Feature Analysis
Slow Feature AnalysisSlow Feature Analysis
Slow Feature AnalysisRafael Pinto
 
Online Incremental One-Shot Learning of Temporal Sequences (Portuguese)
Online Incremental One-Shot Learning of Temporal Sequences (Portuguese)Online Incremental One-Shot Learning of Temporal Sequences (Portuguese)
Online Incremental One-Shot Learning of Temporal Sequences (Portuguese)Rafael Pinto
 
Neuroevolução com o algoritmo NEAT e suas Extensões
Neuroevolução com o algoritmo NEAT e suas ExtensõesNeuroevolução com o algoritmo NEAT e suas Extensões
Neuroevolução com o algoritmo NEAT e suas ExtensõesRafael Pinto
 
Um Reconhecedor de Padrões Espaço-Temporais Inspirado no Neocórtex
Um Reconhecedor de Padrões Espaço-Temporais Inspirado no NeocórtexUm Reconhecedor de Padrões Espaço-Temporais Inspirado no Neocórtex
Um Reconhecedor de Padrões Espaço-Temporais Inspirado no NeocórtexRafael Pinto
 

More from Rafael Pinto (10)

Deep Learning
Deep LearningDeep Learning
Deep Learning
 
Inteligência Artificial - Aula15 - Algoritmos Genéticos
Inteligência Artificial - Aula15 - Algoritmos GenéticosInteligência Artificial - Aula15 - Algoritmos Genéticos
Inteligência Artificial - Aula15 - Algoritmos Genéticos
 
Inteligência Artificial - Aula5 - PageRank
Inteligência Artificial - Aula5  - PageRankInteligência Artificial - Aula5  - PageRank
Inteligência Artificial - Aula5 - PageRank
 
Inteligência Artificial - Aula1 intro
Inteligência Artificial - Aula1 introInteligência Artificial - Aula1 intro
Inteligência Artificial - Aula1 intro
 
Slow Feature Analysis
Slow Feature AnalysisSlow Feature Analysis
Slow Feature Analysis
 
Ratslam
RatslamRatslam
Ratslam
 
Online Incremental One-Shot Learning of Temporal Sequences (Portuguese)
Online Incremental One-Shot Learning of Temporal Sequences (Portuguese)Online Incremental One-Shot Learning of Temporal Sequences (Portuguese)
Online Incremental One-Shot Learning of Temporal Sequences (Portuguese)
 
Neuroevolução com o algoritmo NEAT e suas Extensões
Neuroevolução com o algoritmo NEAT e suas ExtensõesNeuroevolução com o algoritmo NEAT e suas Extensões
Neuroevolução com o algoritmo NEAT e suas Extensões
 
LoopSOM
LoopSOMLoopSOM
LoopSOM
 
Um Reconhecedor de Padrões Espaço-Temporais Inspirado no Neocórtex
Um Reconhecedor de Padrões Espaço-Temporais Inspirado no NeocórtexUm Reconhecedor de Padrões Espaço-Temporais Inspirado no Neocórtex
Um Reconhecedor de Padrões Espaço-Temporais Inspirado no Neocórtex
 

IA Algoritmos Busca Problemas

  • 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.
  • 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 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)
  • 34. 18/08/15 Busca de Custo Uniforme (UCS)
  • 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)
  • 45. 18/08/15 Busca Gulosa (Greedy Search) Custo: 450
  • 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