Busca em Espaço de Estados Parte2 Algoritmos de Busca Cega Disciplina: Inteligência Artificial Universidade de Itaúna César Augusto Oliveira cesaroliveira18@hotmail.com
Estratégias de busca cega Uma estratégia de busca é dita “cega” se ela não leva em conta informações específicas sobre o problema a ser resolvido. Estratégias de busca sem informação usam apenas a informação disponível na definição do problema. Apenas geram sucessores e verificam se o estado objetivo foi atingido.
Estratégias de busca cega As estratégias de busca sem informação (cega) se distinguem pela ordem em que os nós são expandidos. Principais métodos : - Busca em amplitude, extensão ou largura - Busca em profundidade - Busca com aprofundamento iterativo
Estratégias de busca cega Estratégias são avaliadas de acordo com os seguintes critérios: completeza: o algoritmo sempre encontra a solução se ela existe? complexidade de tempo: número de nós gerados. complexidade de espaço: número máximo de nós na memória. otimização: a estratégia encontra a solução ótima? Complexidade de tempo e espaço são medidas em termos de: b: máximo fator de ramificação da árvore (número máximo de sucessores de qualquer nó) d: profundidade do nó objetivo menos profundo m: o comprimento máximo de qualquer caminho no espaço de estados (pode ser ∞)
Busca em largura O nó raiz é expandido, em seguida todos os nós sucessores são expandidos, então todos próximos nós sucessores, e assim em diante. Em geral, todos os nós de uma dada profundidade na árvore de busca são expandidos antes que todos os nós do nível seguinte seja expandido.
Busca em largura Expandir o nó não-expandido mais perto da raiz. Implementação: a borda é uma fila FIFO (first-in, first-out), isto é, novos itens entram no final.
Busca em largura Expandir o nó não-expandido mais perto da raiz. Implementação: a borda é uma fila FIFO (first-in, first-out), isto é, novos itens entram no final.
Busca em largura Expandir o nó não-expandido mais perto da raiz. Implementação: a borda é uma fila FIFO (first-in, first-out), isto é, novos itens entram no final.
Busca em largura Expandir o nó não-expandido mais perto da raiz. Implementação: a borda é uma fila FIFO (first-in, first-out), isto é, novos itens entram no final.
Busca em Largura 1. Crie uma lista de nodos "LISTA_DE_NODOS" e insira o estado inicial. 2. Até que (um estado objetivo seja encontrado) ou (LISTA_DE_NODOS seja vazia) faça: a. Remova o primeiro elemento "E" de LISTA_DE_NODOS b. Para cada operação possível para o estado E faça: i. Gere um novo estado ii. Se o novo estado é um estado objetivo, pare e retorne este estado Senão, adicione o novo estado ao final de LISTA_DE_NODOS.
Avaliação da busca em largura Completa? Sim (se b é finito) Tempo? 1+b+b2+b3+… +bd + b(bd-1) = O(bd+1) Espaço? O(bd+1) (mantém todos os nós na memória) Ótima? Sim (se todas as ações tiverem o mesmo custo)
Exemplo b: número máximo de sucessores de um nó qualquer (neste caso, 2) d: profundidade do nó objetivo menos profundo (vamos supor G, então d=2)
Avaliação da busca em largura Exemplo: fator de expansão b = 10 1.000 nós gerados por segundo cada nó ocupa 100 bytes
Busca em profundidade O nodo de maior profundidade mais a esquerda é escolhido para gerar sucessores
Busca em Profundidade Expande o nó não-expandido mais profundo. Implementação: borda = fila LIFO (last-in, first-out) = pilha Destino M
Busca em Profundidade Expande o nó não-expandido mais profundo. Implementação: borda = fila LIFO (last-in, first-out) = pilha
Busca em Profundidade Expande o nó não-expandido mais profundo. Implementação: borda = fila LIFO (last-in, first-out) = pilha
Busca em Profundidade Expande o nó não-expandido mais profundo. Implementação: borda = fila LIFO (last-in, first-out) = pilha
Busca em Profundidade Expande o nó não-expandido mais profundo. Implementação: borda = fila LIFO (last-in, first-out) = pilha
Busca em Profundidade Expande o nó não-expandido mais profundo. Implementação: borda = fila LIFO (last-in, first-out) = pilha
Busca em Profundidade Expande o nó não-expandido mais profundo. Implementação: borda = fila LIFO (last-in, first-out) = pilha
Busca em Profundidade Expande o nó não-expandido mais profundo. Implementação: borda = fila LIFO (last-in, first-out) = pilha
Busca em Profundidade Expande o nó não-expandido mais profundo. Implementação: borda = fila LIFO (last-in, first-out) = pilha
Busca em Profundidade Expande o nó não-expandido mais profundo. Implementação: borda = fila LIFO (last-in, first-out) = pilha
Busca em Profundidade Expande o nó não-expandido mais profundo. Implementação: borda = fila LIFO (last-in, first-out) = pilha
Busca em Profundidade Expande o nó não-expandido mais profundo. Implementação: borda = fila LIFO (last-in, first-out) = pilha
Busca em Profundidade Algoritmo pode ser implementado recursivamente ou usando pilha. Algoritmo recursivo chamado com o estado inicial BUSCA EM PROFUNDIDADE (estado E) Se o estado E é um estado final, pare e retorne sucesso Senão a. faça o seguinte até o sucesso (ou insucesso): i. Gere um sucessor "ES" de E. ii. Se não há mais sucessores, retorne insucesso. Senão, chame BUSCA EM PROFUNDIDADE com ES como parâmetro b. Se sucesso então é retornado sucesso Senão, continue o passo a
Propriedades da Busca em Profundidade Completa? Não: falha em espaços com profundidade infinita, espaços com loops Se modificada para evitar estados repetidos é completa para espaços finitos Tempo? O(bm): péssimo quando m é muito maior que d. mas se há muitas soluções pode ser mais eficiente que a busca em extensão Espaço? O(bm), i.e., espaço linear! Ótima? Não
Avaliação da busca em profundidade Custo de espaço: - Recursivo: mantém na memória as chamadas do caminho que está sendo expandido no momento. Iterativo com pilha: o caminho que está sendo expandido no momento e os nós irmãos dos nós no caminho (b x m nós) Otimalidade Não garante a solução ótima
Busca com aprofundamento iterativo Evita o problema de caminhos muito longos ou infinitos impondo um limite máximo de profundidade para os caminhos gerados Esta estratégia tenta limites com valores crescentes, partindo de zero, até encontrar a primeira solução Piora o tempo de busca, porém melhora o custo de memória
Busca com aprofundamento iterativo
Busca de Aprofundamento Iterativo em Profundidade l =0
Busca de Aprofundamento Iterativo em Profundidade l =1
Busca de Aprofundamento Iterativo em Profundidade l =2
Busca de Aprofundamento Iterativo em Profundidade l =3
Busca com aprofundamento iterativo 1. Inicialize i com 0 2. Faça: a. Execute a busca em profundidade até o limite i de profundidade b. Se retornou insucesso i. i = i + n ii. Retorne ao passo 2 Senão, pare e retorne o estado encontrado
Avaliação da busca com aprofundamento iterativo Combina as vantagens de busca em largura com busca em profundidade. Completude: - É completa, pois sempre encontra uma solução se ela existir (como na largura) Custo de tempo: - Custo exponencial = O (bd) (como na largura) - Tempo um pouco maior por causa das buscas repetidas
Avaliação da busca com aprofundamento iterativo Custo de espaço: - b x m nós (como na profundidade) Otimalidade - Sempre encontra a solução mais “rasa” (como na largura) - É ótima se o custo de caminho é igual para todos os operadores Nem sempre é a solução de menor custo de caminho, caso os operadores tenham valores diferentes
Comparação dos métodos de busca cega
Atividade em sala a) Busca em largura b) Busca em profundidade c) Busca em profundidade iterativa
Bibliografia Livros -BITTENCOURT, Guilherme. Inteligência Artificial – Ferramentas e Teorias. Editora da UFSC. 1998. - REZENDE, Solange Oliveira. Sistemas inteligentes: fundamentos e aplicações. Barueri: Manole, 2003. - RUSSEL, Stuart; NORVIG, Peter: Inteligência Artificial. Campus, São Paulo, 2004. Slides - BITTENCOURT, Guilherme. Transparências de Inteligência computacional. Disponível em: http://www.das.ufsc.br/gia/iaftapoio/ tra-soft.pdf - LINDEN, Ricardo. Transparências de Inteligência Artificial. Disponível em: http://www.fsma.edu.br/linden/IA_Aula02.ppt
Bibliografia Applets Puzzle8 - Artificial Intelligence Test. Disponível em: http://www.permadi.com/java/puzzle8/ Jarros - Racha Cuca. Disponível em: http://rachacuca.com.br/jarros/ ou http://www.mathsisfun.com/games/jugs-puzzle.html Missionários e Canibais - Racha Cuca. Disponível em: http://rachacuca.com.br/jogos/missionarios-e-canibais/ ou http://www.plastelina.net/games/game2.html Lobo, ovelha e couve - Racha Cuca. Disponível em: