SlideShare uma empresa Scribd logo
1 de 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*

Mais conteúdo relacionado

Mais procurados

Ciência de Dados: a revolução na tomada de decisões
Ciência de Dados: a revolução na tomada de decisõesCiência de Dados: a revolução na tomada de decisões
Ciência de Dados: a revolução na tomada de decisõesMarlesson Santana
 
Algoritmos de ordenação
Algoritmos de ordenaçãoAlgoritmos de ordenação
Algoritmos de ordenaçãoJonas Mendonça
 
Introdução à analise e complexidade de algoritmos
Introdução à analise e complexidade de algoritmosIntrodução à analise e complexidade de algoritmos
Introdução à analise e complexidade de algoritmosNécio de Lima Veras
 
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
 
Redes de Computadores
Redes de Computadores Redes de Computadores
Redes de Computadores claudioatx
 
Lógica de programação { para iniciantes }
Lógica de programação { para iniciantes }Lógica de programação { para iniciantes }
Lógica de programação { para iniciantes }Mariana Camargo
 
Introdução a Machine Learning
Introdução a Machine LearningIntrodução a Machine Learning
Introdução a Machine LearningMorvana Bonin
 
Análise estruturada de sistemas - Modelo de contexto
Análise estruturada de sistemas - Modelo de contextoAnálise estruturada de sistemas - Modelo de contexto
Análise estruturada de sistemas - Modelo de contextoLuciano Almeida
 
Aula 3 Introdução a Redes II
Aula 3   Introdução a Redes IIAula 3   Introdução a Redes II
Aula 3 Introdução a Redes IIwab030
 
Matemática Discreta - Introdução à Disciplina
Matemática Discreta - Introdução à DisciplinaMatemática Discreta - Introdução à Disciplina
Matemática Discreta - Introdução à DisciplinaRanilson Paiva
 
Lec 3 knowledge acquisition representation and inference
Lec 3  knowledge acquisition representation and inferenceLec 3  knowledge acquisition representation and inference
Lec 3 knowledge acquisition representation and inferenceEyob Sisay
 
Redes Neurais Artificiais
Redes Neurais ArtificiaisRedes Neurais Artificiais
Redes Neurais ArtificiaisMarcos Castro
 
Introdução à Aprendizagem de Máquina
Introdução à Aprendizagem de MáquinaIntrodução à Aprendizagem de Máquina
Introdução à Aprendizagem de MáquinaFernando Palma
 
Banco de dados exercícios resolvidos
Banco de dados exercícios resolvidosBanco de dados exercícios resolvidos
Banco de dados exercícios resolvidosGleydson Sousa
 
Ai 03 solving_problems_by_searching
Ai 03 solving_problems_by_searchingAi 03 solving_problems_by_searching
Ai 03 solving_problems_by_searchingMohammed Romi
 

Mais procurados (20)

Ciência de Dados: a revolução na tomada de decisões
Ciência de Dados: a revolução na tomada de decisõesCiência de Dados: a revolução na tomada de decisões
Ciência de Dados: a revolução na tomada de decisões
 
Algoritmos de ordenação
Algoritmos de ordenaçãoAlgoritmos de ordenação
Algoritmos de ordenação
 
Introdução à analise e complexidade de algoritmos
Introdução à analise e complexidade de algoritmosIntrodução à analise e complexidade de algoritmos
Introdução à analise e complexidade de algoritmos
 
Inteligência Artificial - Busca com informação
Inteligência Artificial - Busca com informaçãoInteligência Artificial - Busca com informação
Inteligência Artificial - Busca com informação
 
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
 
Alpha beta
Alpha betaAlpha beta
Alpha beta
 
Redes de Computadores
Redes de Computadores Redes de Computadores
Redes de Computadores
 
Game playing in AI
Game playing in AIGame playing in AI
Game playing in AI
 
Lógica de programação { para iniciantes }
Lógica de programação { para iniciantes }Lógica de programação { para iniciantes }
Lógica de programação { para iniciantes }
 
Introdução a Machine Learning
Introdução a Machine LearningIntrodução a Machine Learning
Introdução a Machine Learning
 
Análise estruturada de sistemas - Modelo de contexto
Análise estruturada de sistemas - Modelo de contextoAnálise estruturada de sistemas - Modelo de contexto
Análise estruturada de sistemas - Modelo de contexto
 
Aula 3 Introdução a Redes II
Aula 3   Introdução a Redes IIAula 3   Introdução a Redes II
Aula 3 Introdução a Redes II
 
Matemática Discreta - Introdução à Disciplina
Matemática Discreta - Introdução à DisciplinaMatemática Discreta - Introdução à Disciplina
Matemática Discreta - Introdução à Disciplina
 
Lec 3 knowledge acquisition representation and inference
Lec 3  knowledge acquisition representation and inferenceLec 3  knowledge acquisition representation and inference
Lec 3 knowledge acquisition representation and inference
 
Redes Neurais Artificiais
Redes Neurais ArtificiaisRedes Neurais Artificiais
Redes Neurais Artificiais
 
Ordenação
OrdenaçãoOrdenação
Ordenação
 
Estrutura de dados
Estrutura de dadosEstrutura de dados
Estrutura de dados
 
Introdução à Aprendizagem de Máquina
Introdução à Aprendizagem de MáquinaIntrodução à Aprendizagem de Máquina
Introdução à Aprendizagem de Máquina
 
Banco de dados exercícios resolvidos
Banco de dados exercícios resolvidosBanco de dados exercícios resolvidos
Banco de dados exercícios resolvidos
 
Ai 03 solving_problems_by_searching
Ai 03 solving_problems_by_searchingAi 03 solving_problems_by_searching
Ai 03 solving_problems_by_searching
 

Mais de 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
 

Mais de 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