Inteligência Artificial - IBM1024 3. Resolução de problemas por meio de busca Prof. Renato Tinós Local: Depto. de Computação e Matemática (FFCLRP/USP) 1
Principais Tópicos 3. Resolução de problemas por meio de busca 3.1. Introdução à busca 3.2. Busca não-informada 3.2.1. Busca em profundidade e variações 3.2.2. Busca em largura e variações 3.3. Busca informada 3.4. Além da busca clássica 3.5. Busca competitiva 2
Regra para Busca em Largura (ou em Extensão) Expanda o nó raiz. Em seguida os sucessores do nó raiz e assim por diante. Ou seja, sempre expanda todos os nós não expandidos no nível mais raso da árvore: i. nó raiz ii. todos os nós de profundidade 1 iii. todos os nós de profundidade 2, iv.. Faça até a profundidade em que achar um nó objetivo. 3
4
Impementação O algoritmo utiliza o princípio FIFO (first in, first out) Fila: coloca sucessores no fim da lista de busca 5
Exercício 3.7. Simule o processo de busca em largura para o problema férias na Romênia (visto anteriormente). O estado inicial é Arad e o objetivo é Bucharest. Mostre em cada passo como fica a lista de busca. 6
7 3.2.2. Busca em Largura Detecção de estados repetidos Falha em detectar estados repetidos pode tornar a busca muito mais custosa Para isso, uma lista dos estados já expandidos pode ser mantida S A B H C D E F I C F G G J K L C M B C N D E F G
Impementação em Prolog 3.2.2. Busca em Largura Dificuldade: manter um conjunto de nós candidatos alternativos Ao invés de apenas um como em Busca em Profundidade breadthfirst( Paths, Solution ). Regra para executar busca em largura quando um conjunto de caminhos candidatos é dado Se a cabeça do primeiro caminho é um objetivo então este caminho é a solução do problema Caso contrário, remova o primeiro caminho da lista de candidatos e gere o conjunto de todas as possíveis extensões de um passo neste caminho, adicione este conjunto de extensões no fim do conjunto candidato, e execute busca em largura no novo conjunto 8
Exemplo Comece com o conjunto de candidatos inicial [ [a] ] Gere extensões de [a]: [ [b,a], [c,a] ] Remova o primeiro caminho candidato, [b,a], do conjunto e gere extensões deste caminho [ [d,b,a], [e,b,a] ] Adicione as extensões no final do conjunto de candidatos [ [c,a], [d,b,a], [e,b,a] ] Remova [c,a] e adicione as extensões no final do conjunto candidato [ [d,b,a], [e,b,a], [f,c,a], [g,c,a] ] Estenda [d,b,a] e [e,b,a] [ [f,c,a], [g,c,a], [h,d,b,a], [i,e,b,a], [j,e,b,a] ] Solução encontrada [f,c,a] a b c d e f h i j k g 9
Impementação em Prolog % Breadth-First Search, [Bratko, 2001], page 243 3.2.2. Busca em Largura % solve( Start, Solution): Solution is a path (in reverse order) from Start to a goal solve( Start, Solution) :- breadthfirst( [ [Start] Z] - Z, Solution). breadthfirst( [ [Node Path] _] - _, [Node Path] ) :- goal( Node). breadthfirst( [Path Paths] - Z, Solution) :- extend( Path, NewPaths), conc( NewPaths, Z1, Z), % Add NewPaths at end Paths \== Z1, % Set of candidates not empty breadthfirst( Paths - Z1, Solution). extend( [Node Path], NewPaths) :- bagof( [NewNode, Node Path], ( s( Node, NewNode), \+ member( NewNode, [Node Path] ) ), NewPaths),!. extend( Path, [] ). % bagof failed: Node has no successor 10
Exercício 3.8. Implemente a busca em largura em Prolog para o problema do mundo dos blocos visto na Seção 3.1.2. Explique o que aconteceu quando o processo de busca é iniciado com os seguintes comandos: a. solve([[c,b,a],[],[]],solution). b. solve([[c,a,b],[],[]],solution). Repita para o problema Férias na Romênia. 11
Propriedades Completa (completude)? Sim, se o fator de ramificação, b, é finito Ótima (otimalidade)? Sim, se o custo de cada passo é 1 (ou constante) Complexidade Tempo? Número total de nós gerados: b+b 2 +b 3 + +b d O(b d ) Espaço? O(b d ) 12
13
E se os custos de cada passo não são iguais? Variante: Busca uniforme Proceda como em Busca em Largura, mas sempre expanda primeiro o nó que resulta em um menor custo, g(n), para o caminho parcial Isto é feito por meio da ordenação da lista (fila) de busca 14
Exemplo: Busca Uniforme caminho de Sibiu até Bucharest 3.2.2. Busca em Largura Passo Lista 1 [Fagaras (99), Rimnicu (80),] 2 [Fagaras (99), Pitesti (80+97=177) ] 3 [Pitesti (177), Bucharest (99+211=310),] 4 [Bucharest (310), Bucharest (177+101=278),] 15
Exercício 3.9. Simule o processo de busca uniforme para o problema férias na Romênia (visto anteriormente). O estado inicial é Arad e o objetivo é Bucharest. Mostre em cada passo como fica a lista de busca. 16
Propriedades Igual à busca em largura se os custos de cada passo são iguais Caso contrário Considerando que cada passo custa no mínimo ε (>0) e o custo da solução ótima é C * Completa (completude)?» Sim, se o fator de ramificação, b, é finito Ótima (otimalidade)?» Sim Complexidade» Tempo? 3.2.2. Busca em Largura» Espaço? 17
Comparação Ver observações nos slides de propriedades de cada método 18
Sugestão de Leitura Capítulo 3, Seções 3.4.1 e 3.4.2 do livro: RUSSEL, S. J. & NORVIG, P. (2013). Inteligência Artificial, 3ª ed., Campus. Capítulo 11, Seção 11.3 do livro: BRATKO, I. (2012). Prolog Programming for Artificial Intelligence, 4 rd ed., Pearson Addison Wesley. 19
Agradecimentos Parte do material desta apresentação foi obtida através de: Material de apoio do livro: RUSSEL, S. J. & NORVIG, P. (2013). Inteligência Artificial, 3ª ed., Campus. 20