Busca sem Informação Álvaro Vinícius “Degas” [email protected] Roteiro • Busca Cega • Estratégias – – – – – Busca em Extensão Busca de Custo Uniforme Busca em Profundidade Busca em Profundidade Limitada Aprofundamento iterativo (Ainda) O exemplo Compiler Busca em Extensão • Expandir a árvore em busca de uma solução • Cada nível • Pára quando – não for possível expandir mais – Encontrar uma solução • Garante encontrar solução? • Garante encontrar a melhor solução? • É eficiente? Busca em extensão Simula City Smalltalk Ville C Ville Java City Java City Pascalopolis Fortranopolis Cobolandia Haskellópolis Prolog City Busca em extensão Simula City Smalltalk Ville C Ville Java City Java City Pascalopolis Fortranopolis Cobolandia Haskellópolis Prolog City Busca em Extensão • Propriedades • Completeza? – Se b (a quantidade de filhos de cada nó) for sempre finito – Encontra necessariamente a solução – Ou verifica que esta não existe! Busca em Extensão • Propriedades (cont) • Complexidade de tempo – Uma unidade de tempo para gerar cada nó – 1+b+b2+b3+...+bd – O(bd): exponencial Busca em Extensão • Propriedades (cont) • Complexidade de espaço – – – – Uma unidade de espaço para armazenar cada nó Necessita manter todos os nós na memória 1+b+b2+b3+...+bd O(bd): exponencial Busca em Extensão • Propriedades (cont) • Otimização – Caso o custo da solução seja igual a uma unidade • Encontrará sempre a melhor solução – Caso contrário • Provavelmente não encontrará a melhor solução Busca com Custo Uniforme • Uma especialização da busca em extensão • Considera os custos de solução • Expande os nós de menor custo inicialmente • Caso os custos sejam iguais, funciona como uma busca em largura Busca com custo Uniforme Simula City 15 10 Fortranopolis Smalltalk Ville 15 C Ville 20 Java City 20 25 27 Cobolandia Java City 10 6 Pascalopolis Haskellópolis Prolog City 14 6 Ada Town 25 Cobolandia 27 Cobolandia Busca com custo Uniforme Simula City 15 10 Fortranopolis Smalltalk Ville 15 C Ville 20 Java City 20 25 27 Cobolandia Java City 10 6 Pascalopolis Haskellópolis Prolog City 14 6 Ada Town 25 Cobolandia 27 Cobolandia Busca com Custo Uniforme • Propriedades • Completeza? – Se b (a quantidade de filhos de cada nó) for sempre finito – Encontra necessariamente a solução – Ou verifica que esta não existe! Busca com Custo Uniforme • Propriedades (cont) • Complexidade de tempo – Uma unidade de tempo para gerar cada nó – sendo C* o número de nós da solução ótima e sendo o custo médio por passo – O(bC*/): exponencial Busca com Custo Uniforme • Propriedades (cont) • Complexidade de espaço – Uma unidade de espaço para armazenar cada nó – sendo C* o número de nós da solução ótima e sendo o custo médio por passo – O(bC*/): exponencial Busca com Custo Uniforme • Propriedades (cont) • Otimização – Caso o custo da solução seja igual a uma unidade • Encontrará sempre a melhor solução – Caso contrário • Também encontrará a melhor solução (implementação do algoritmo de Dijkstra) Busca em Profundidade • Expande cada ramo até o seu limite • Não considera os custos da solução • Pára quando – Encontra uma solução satisfatória – Não é mais possível fazer a expansão Busca em Profundidade Simula City Smalltalk Ville Fortranopolis Java City C Ville Java City Pascalopolis Ada Town Fortranopolis Cobolandia Cobolandia Haskellópolis Prolog City Busca em Profundidade Simula City Smalltalk Ville Fortranopolis Java City C Ville Java City Pascalopolis Ada Town Fortranopolis Cobolandia Cobolandia Haskellópolis Prolog City Busca em Profundidade • Propriedades • Completeza? – Não! – No caso de uma degeneração infinita de estados – Exemplos de aplicações exploratórias como sondas ou movimentos robóticos (espaço virtualmente infinito) – Mas é completa em espaços finitos Busca em Profundidade • Propriedades (cont) • Complexidade de tempo – Uma unidade de tempo para gerar cada nó – Sendo m o tamanho do primeiro caminho de solução que será encontrado – Gera todos os nós de todos os caminhos até encontrar a solução – O(bm): exponencial, particularmente muito ruim se m >> d Busca em Profundidade • Propriedades (cont) • Complexidade de espaço – Uma unidade de espaço para armazenar cada nó – Sendo m o tamanho do primeiro caminho de solução que será encontrado – Não precisa armazenar as soluções que vão sendo geradas – O(bm): Busca em Profundidade • Propriedades (cont) • Otimização – Não encontra a melhor solução – Exceto no caso de uma sorte danada! Busca com Profundidade Iterativa • Expande cada ramo até o seu limite ou até um limite especificado L • L é incrementado a cada passo • Não considera os custos da solução • Pára quando – Encontra uma solução satisfatória – Não é mais possível fazer a expansão Busca c/ Prof. Iterativa Simula City Smalltalk Ville C Ville Fortranopolis Java City Cobolandia L=2 Java City Pascalopolis Fortranopolis Pascalopolis Fortranopolis Cobolandia Java City Cobolandia Ada Town Haskellópolis Prolog City L=4 Busca c/ Prof. Iterativa Simula City Smalltalk Ville C Ville Fortranopolis Java City Cobolandia Java City Pascalopolis Fortranopolis Pascalopolis Fortranopolis Cobolandia Java City Cobolandia Ada Town Haskellópolis Prolog City Busca com Profundidade Iterativa • Propriedades • Completeza? – Sim – Exceto caso não exista um estado satisfatório na árvore e a árvore seja infinita – Neste caso a busca não pára Busca com Profundidade Iterativa • Propriedades (cont) • Complexidade de tempo – Uma unidade de tempo para gerar cada nó – 1+b+b2+b3+...+bd – O(bd): exponencial Busca com Profundidade Iterativa • Propriedades (cont) • Complexidade de espaço – Uma unidade de espaço para armazenar cada nó – Sendo d o tamanho do melhor caminho de solução que será encontrado – Não precisa armazenar as soluções que vão sendo geradas – O(bd): Busca com Profundidade Iterativa • Propriedades (cont) • Otimização – Caso o custo de cada passo seja 1, Sim! – Caso contrário Não! – Mas pode ser adaptado (exercício) Estados Repetidos • Estados repetidos podem gerar problemas • De computabilidade – A busca entrar em Loop • De complexidade – Geração de uma quantidade excessiva (MUITO excessiva) de estados Estados Repetidos • Memória de estados visitados – A cada novo estado, uma busca para verificar se ele já não foi gerado • Para algoritmos em extensão: – perfeito! • Para algoritmos em profundidade: – quase perfeito: evita os loops Busca sem informação. FIM! “Tudo seria fácil se não fossem as dificuldades” Barão de Itararé