Aula 04 / LAB 01 Resolução de problemas por meio de busca Prof. Dr. Alexandre da Silva Simões Exercício 1 Prof. Dr. Alexandre da Silva Simões Problema dos jarros de água Problema dos jarros de água: modelagem Estado: (x,y), onde: x é a quantidade de água no vaso de 4 Litros; y é a quantidade de água no vaso de 3 Litros; Dados sobre o problema Existem dois vasos: um de 4 litros e um de 3 litros, inicialmente vazios, e uma fonte que jorra água em abundância. Objetivo: Conseguir 2 litros em qualquer um dos vasos. Ações possíveis: Encher os vasos Esvaziar os vasos Completar um vaso com outro Jogar um vaso em outro Alexandre da Silva Simões 3 Estado inicial: (0,0) Estados-meta: (X,2) ou (2,X) Regras: R0: Encher_vaso_4 R1: Encher_vaso_3 R2: Esvaziar_vaso_4 R3: Esvaziar_vaso_3 R4: Completar_3_com_4 R5: Completar_4_com_3 R6: Esvaziar_4_em_3 R7: Esvaziar_3_em_4 Regras sobre o problema Condições inicial e final do problema Alexandre da Silva Simões 4 1
ProSE - Diagrama de classes Definição do problema Alexandre da Silva Simões 5 Alexandre da Silva Simões 6 Gerenciamento de listas Máquina de busca Alexandre da Silva Simões 7 Alexandre da Silva Simões 8 2
Interface com usuário Interface com usuário Dados sobre a busca Dados sobre o nó corrente Alexandre da Silva Simões 9 Alexandre da Silva Simões 10 Interface com usuário Interface com usuário Dados sobre a lista de nós (pilha ou fila) Dados sobre o nó meta (quando encontrado) Alexandre da Silva Simões 11 Alexandre da Silva Simões 12 3
Exercício 1 Exercício 2 Busca em profundidade sem armazenamento de nós visitados 1. Arquivo jarros.exe 2. Selecionar o algoritmo Busca em profundidade 3. Certificar-se de que visited nodes está desabilitado 4. Pressionar o botão step até encontrar solução 5. Observar a dinâmica da busca: gera sucessores, transfere todos para pilha, retira primeiro da pilha, gera sucessores... Não converge (inserção cíclica de um mesmo nó) Busca em amplitude sem armazenamento de nós visitados 1. Arquivo jarros.exe 2. Selecionar o algoritmo Busca em amplitude 3. Certificar-se de que visited nodes está desabilitado 4. Utilizar step até encontrar a solução, observando a dinâmica da inserção de nós (solução após a análise de 26 nós. Um mesmo nó é avaliado muitas vezes) 5. Reiniciar o algoritmo e refazer a busca utilizando o botão Run (infinitas soluções de profundidade crescente serão encontradas) Alexandre da Silva Simões 13 Alexandre da Silva Simões 14 Busca sem armazenamento de nós Como evitar estados repetidos? Insere semente na lista Repetir: Retirar nó da lista Verificar se é solução Gerar sucessores Se sucessor não está na lista, então adicionar Algoritmos que esquecem sua história estão fadados a repetí-la!! Solução: armazenar cada nó expandido em uma lista Alexandre da Silva Simões 15 Alexandre da Silva Simões 16 4
Exercício 3 Exercício 4 Busca em profundidade com armazenamento de nós visitados 1. Arquivo jarros.exe 2. Selecionar como algoritmo Busca em profundidade 3. Habilitar a opção visited nodes 4. Pressionar o botão step até encontrar solução 5. Observar a nova dinâmica da busca Busca em amplitude com armazenamento de nós visitados 1. Arquivo jarros.exe 2. Selecionar o algoritmo Busca em amplitude 3. Habilitar a opção visited nodes 4. Utilizar step até encontrar a solução, observando a dinâmica da inserção de nós 9. Reiniciar o algoritmo e refazer a busca utilizando o botão Run Alexandre da Silva Simões 17 Alexandre da Silva Simões 18 Busca com armazenamento de nós Busca com nós visitados Insere semente na lista Repetir: Retirar nó da lista Adicionar nó em visitados Verificar se é solução Gerar sucessores Se sucessor não está em visitados e nem na lista, então adicionar na lista Busca em amplitude com nós visitados R1 R5 R1 R5 4 10 11 R0 R4 R3 R4 R0 R4 6 12 12 Busca em profundidade com nós visitados R1 R5 R1 R5 4 5 7 R0 R4 R3 R4 R0 R4 6 12 12 Alexandre da Silva Simões 19 Alexandre da Silva Simões 20 5
Exercício: Torre de Hanoi Exercício 2 Prof. Dr. Alexandre da Silva Simões A B C Criado pelo matemático francês Edouard Lucas em 1883 Existe uma base com três pinos. Em um dos pinos existe uma torre feita com discos de diâmetros diferentes. O objetivo é mover esta torre para outro pino, utilizando as seguintes restrições: 1. Apenas um disco pode ser movimentado de cada vez; 2. Todos os discos precisam sempre estar em alguma torre; 3. Em nenhum momento um disco pode ser colocado sobre um disco com um raio menor que o seu. Alexandre da Silva Simões 22 Exercício 5 Torre de Hanoi com 3 discos 1. Arquivo hanoi3.exe 2. Estimar o número de nós da árvore e sua profundidade 3. Utilizando busca em amplitude e depois busca em profundidade, determinar: 1. As regras que devem ser aplicadas para resolver o problema 2. Profundidade da solução na árvore de busca 3. Número de nós visitados antes de achar a solução 4. Posições de memória utilizadas Repetir para a Torre de Hanói com 4 e 5 discos. Alexandre da Silva Simões 23 Torre de Hanói com 3 discos Árvore: Busca em amplitude Busca em profundidade número de nós prof. máx. conh. (DFS) 27 11 R0, R1, R3, R0, R4, R5, R0 7 20 27 R1, R0, R5, R1, R2, R3, R1 7 25 27 R1, R0, R5, R1, R3, R2, R5, R1, R3 9 10 15 R1, R0, R5, R1, R3, R2, R4, R5, R1, R0, R5 11 16 21 Alexandre da Silva Simões 24 6
Torre de Hanói com 4 discos Árvore: Busca em amplitude Busca em profundidade número de nós prof. máx. conh. (DFS) 81 29... 15 71 81... 15 81 81... 27 28 42... 29 43 57 Alexandre da Silva Simões 25 Torre de Hanói com 5 discos Árvore: Busca em amplitude Busca em profundidade número de nós prof. máx. conh. (DFS) 243 83... 31 212 242... 31 233 243... 81 82 123... 83 124 165 Alexandre da Silva Simões 26 Desempenho dos algoritmos Solução é ótima? Busca em amplitude Solução profund. passos memória Hanói 3 R0, R1, R3, R0, R4, R5, R0 7 20 27 Hanói 4... 15 71 81 Hanói 5... 31 212 242 Busca em profundidade Hanói 3 R1, R0, R5, R1, R3, R2, R5, R1, R3 9 10 15 Hanói 4... 27 28 42 Hanói 5... 81 82 123 Alexandre da Silva Simões 27 Alexandre da Silva Simões 28 7
Quanto de memória foi usado? Quadro resumo b d m Busca em amplitude Busca em profundidade Completa? Sim Sim* (ignorando estados já visitados) Ótima? Sim Não (nós tendem a ser mais profundos) Complexidade de memória O(b d+1 ) O(bm) Complexidade de tempo O(b d+1 ) O(b m ) (não pode ser medido nos experimentos anteriores. Tempo para atualização das janelas é significativo) Alexandre da Silva Simões 29 Alexandre da Silva Simões 30 Tempo de busca na árvore Atividades extra-classe Num. de nós prof. máx. Tempo busca amplitude Tempo busca profundidade Hanoi 3 27 11 < 1 seg. < 1 seg. Hanoi 4 81 29 < 1 seg. < 1 seg. Hanoi 5 243 83 < 1 seg. < 1 seg. Hanoi 6 729 245 < 1 seg. < 1 seg. Hanoi 7 2187 731 < 2 seg. < 2 seg. Hanoi 8 6561 2187 ~17 seg. > 20 seg. Leitura e exercícios: RUSSELL, S. NORVIG, P. Inteligência Artificial. 2ª edição. Capítulo 3. OBS: Certifique-se de que disable lists visualization encontra-se habilitado. Alexandre da Silva Simões 31 Alexandre da Silva Simões 32 8