Inteligência Artificial Aula 05 – Busca Heurística Aulas Anteriores Busca no Espaço de Estados serve para decidir que parte do conhecimento armazenado deve ser explorada em busca da solução; Formulação problema de busca Espaço de estados (conjunto de estados + ações possíveis) Estado inicial do problema Estado meta do problema (solução) 2 Atividade 4 - Missionários Três missionários e três canibais vão atravessar de uma margem para a outra de um rio, usando um barco onde só cabem duas pessoas de cada vez. O número de canibais não pode exceder o número de missionários em nenhuma das margens do rio. Encontre uma forma de levar todos para a outra margem do rio, utilizando este barco. Formule o problema (represente estados e ações). 3 Atividade 4 - Missionários Para representar os estados podemos usar uma estrutura da forma [B; M; C], onde: B pode assumir {e, d}: indica se o barco está na margem esquerda ou direita. M pode assumir {0, 1, 2, 3}: indica a quantidade de missionários na margem esquerda. C pode assumir {0, 1, 2, 3}: indica a quantidade de canibais na margem esquerda. 4 Missionários e Canibais – Conjunto de Ações A={ oper(atravessar1C; [e; 3; C]; [d; 3; C-1]) C > 0, oper(atravessar1C; [d; M; C]; [e; M; C+1]) C < 3, M > C, oper(atravessar1M; [e; M; C]; [d; M-1; C]) M > 0, M > C, oper(atravessar1M; [d; M; C]; [e; M+1; C]) M < 3, C < 2, oper(atravessar1M1C; [e; M; C]; [d; M-1; C-1]) M > 0, C > 0, M = C, oper(atravessar1M1C; [d; M; C]; [e; M+1; C+1]) M < 3, C < 3, M = C, ... 5 Missionários e Canibais – Conjunto de Ações ... oper(atravessar2M; [e; M; C]; [d; M-2; C]) C < 2, M > 1, oper(atravessar2M; [d; M; C]; [e; M+2; C]) C < 3, M < 2, oper(atravessar2C; [e; 3; C]; [d; 3; C-2]) C > 1, oper(atravessar2C; [d; 3; C]; [e; 3; C+1]) C<2 } 6 Missionários e Canibais – Conjunto de Ações Conjunto de Estados: S = { [e; 3; 3]; [e; 3; 2]; [e; 3; 1]; [e; 3; 0]; [e; 0; 3]; [e; 0; 2]; [e; 0; 1]; [e; 0; 0]; [e; 2; 2]; [e; 1; 1]; [d; 3; 3]; [d; 3; 2]; [d; 3; 1]; [d; 3; 0]; [d; 0; 3]; [d; 0; 2]; [d; 0; 1]; [d; 0; 0]; [d; 2; 2]; [d; 1; 1] } 7 Estratégias de Busca Busca não determinística: encontram soluções testando e expandindo estados aleatoriamente. Com e Sem ciclos Busca Cega: encontram soluções testando e expandindo estados, sistematicamente Busca em largura Busca em profundidade 8 Atividade 8 - Jarros O Problema dos Jarros [Rich] consiste no seguinte: Há dois jarros com capacidades de 3 e 4 litros, respectivamente. Nenhum dos jarros contém qualquer medida ou escala, de modo que só se pode saber o conteúdo exato quando eles estão cheios. Sabendo-se que podemos encher ou esvaziar um jarro, bem como transferir água de um jarro para outro, encontre uma sequência de passos que deixe o jarro de 4 litros com exatamente 2 litros de água. 9 Representação de estados Para representar os estados desse problema, podemos usar um par [X; Y ], onde X pertencente a {0; 1; 2; 3} representa o conteúdo do primeiro jarro e Y pertencente a {0; 1; 2; 3; 4} representa o conteúdo do segundo jarro. As ações podem ser representadas pelos seguintes operadores: 10 Árvore de Busca O estado inicial é s0 = [0; 0] O conjunto de estados meta é G = {[X; 2]}. Com base nessa especificação, desenhe a árvore de busca criada pelo algoritmo BuscaLargura, ao procurar a solução do problema. Em que nível da árvore foi encontrada a solução? 11 Solução??? 12 Atividade 9 - Fazendeiro Um fazendeiro encontra-se na margem esquerda de um rio, levando consigo um lobo, uma ovelha e um repolho. O fazendeiro precisa atingir a outra margem do rio com toda a sua carga intacta, mas para isso dispõe somente de um pequeno bote com capacidade para levar apenas ele mesmo e mais uma de suas cargas. O fazendeiro poderia cruzar o rio quantas vezes fossem necessárias para transportar seus pertences, mas o problema é que, na ausência do fazendeiro, o lobo pode comer a ovelha e essa, por sua vez, pode comer o repolho. Encontre uma sequência de passos que resolva esse problema. 13 Espaço de estados Para representar os estados desse problema, podemos usar uma estrutura da forma [F; L;O;R], cujas variáveis denotam, respectivamente, as posições do fazendeiro, do lobo, da ovelha e do repolho. Cada variável pode assumir os valores e ou d, dependendo da margem do rio onde o objeto se encontra. O estado inicial é s0 = [e; e; e; e] O conjunto de estados meta é G = {[d; d; d; d]} 14 Ações As ações podem ser representadas pelos seguintes operadores: Com base nessa especificação, desenhe a árvore de busca criada pelo algoritmo BuscaProfundidade, ao procurar a solução do problema. 15 Implementação Busca Profundidade Problema do Labirinto Consideremos o problema de um rato preso num labirinto que precisa achar um caminho para a saída. Para isso, ele tenta sistematicamente cada caminho. Quando o caminho leva a um beco, ele retrocede até um ponto que possa tentar outro caminho não explorado. 16 Programa principal Função dada para criar matriz representando o labirinto Função saída do labirinto (a programar) 17 Algoritmo – Cria Labirinto Função preenche uma matriz 15x15: 1º laço -> cria a borda 2º laço -> preenche labirinto aleatório Libera a posição para rato Libera posição de saída L[13][14] 18 Uso da Pilha Função saída Recebe matriz representando o labirinto; Estado Inicial: o rato inicia na posição L[1,1]; Estado meta: L[13][14]; Inicializa a pilha; O rato deve ir se deslocando em busca da saída (estados sucessores), de maneira que ele guarde na pilha as posições visitadas, ou seja, por onde já passou (aprofundando na árvore). Isso permite que o rato volte a posição anterior caso chegue a um beco sem saída (nó folha da árvore de busca – não tem sucessores a expandir). 19 Uso da Pilha Estados Sucessores e Uso da Pilha A função investiga se é possível andar para direita. Se possível, segue para direita e guarda esta posição visitada na pilha. Caso não esteja livre a direita, tentaremos para baixo, à esquerda e para cima. Caso não tenhamos sucesso, estamos num beco sem saída (nó folha da árvore): Devemos marcar essa posição como beco Recorrer a pilha, desempilhando o último lugar visitado 20 Rato na posição [1, 1] Marca posição já visitada Se direita livre, empilha posição visitada e reposiciona rato Senão se p/ baixo livre, empilha posição visitada e reposiciona rato Teste à esquerda Teste p/ cima Pilha vazia sem saída Senão, marca posição atual como beco e desempilha última posição visitada Reexibe a matriz atualizada Encontrou a saída 21 Uso da Pilha Laço de Repetição – A cada novo estado (nova posição) A função volta ao laço testando se a partir dessa nova posição o rato consegue se deslocar (direita, baixo, esquerda, cima). Caso não tenhamos sucesso, voltamos a recorrer a pilha. Quando o Laço termina? Ou porquê não tenho mais opções na minha pilha, já tentei tudo e não cheguei a saída neste caso devolvemos zero (Falso). Ou quando chegarmos a saída: posição L[13][14] devolve 1 (Verdadeiro) 22 Exibe Labirinto 23 Operações básicas da Pilha Criar uma estrutura de pilha; | Inicializapilha Inserir um elemento no topo (push); | Empilha Remover o elemento do topo (pop);| Desempilha Verificar se a pilha está vazia; | Pilhavazia Verificar se a pilha esta cheia; | Pilhacheia Pesquisa topo de pilha. | Pesquisatopo Implementação Ou 25 Implementação 26 Estratégias de Busca Desvantagens de buscas cegas : Ineficientes – expandem muitos estados para encontrar a solução; Não garantem encontrar soluções de custo mínimo (ex.: busca em profundidade); Vamos estudar três estratégias de busca: 1ª) baseada no conceito de custo de ação: ineficiente, mas garante encontrar uma solução de custo mínimo; 2ª) utiliza o conceito de função heurística: muito eficiente, mas não garante encontrar uma solução de custo mínimo; 3ª) combina as duas estratégias anteriores; 27 Custo de ação Em muitos problemas, as ações podem ter custos associados, dependendo da dificuldade que o agente tem em executá-las. Para levar essa informação em conta durante a busca, precisamos adicionar mais um campo na especificação dos operadores: oper(α, s, s´, g(α)) β onde g(α) é o custo da ação α, que transforma o estado s num estado s´, dado que a condição β esteja satisfeita. 28 Problema das Rotas Dado um mapa de vias, uma cidade de origem e uma cidade de destino, encontrar uma rota de distância mínima entre essas duas cidades. 29 Custo de ação Observe que neste problema podemos definir a ação: (vai(X, Y), X, Y) como sendo uma ação que leva o agente do estado X para o estado Y. Porém, será que tenho o mesmo custo para me deslocar entre duas cidades do mapa? Mais ainda, qual a pré condição para sair de X e chegar a Y? Preciso que exista uma estrada entre X e Y. 30 Especificando ações Nesse domínio, o agente é capaz de viajar de uma cidade a outra e, portanto, suas ações podem ser especificadas conforme segue: 1º) Especificamos o custo de cada via (bidirecional): via(a; b; 7) via(b; f; 3) via(d; e; 1) via(i; k; 5) via(a; c; 9) via(b; i; 4) via(f; g; 2) via(j; l; 6) via(a; d; 3) via(c; j; 5) via(g; h; 3) via(k; l; 4) 2º) Especificar as operações: oper(vai(X, Y), X, Y, C) via(X, Y, C) oper(vai(X, Y), X, Y, C) via(Y, X, C) 31 Custo de caminho Quando as ações têm custo, o custo de um caminho [a1, a2,..., an] é Σni=1 g(ai), onde g(ai) é o custo de cada ação ai, ou seja, g(a1) + g(a2)+...+g(an). Por exemplo, de acordo com a figura anterior, o custo do caminho [vai(a,d), vai(d,e)] é 3 +1 = 4. 32 Custo de um estado Numa árvore de busca, todo estado s está associado a um caminho que leva do estado inicial s0 até s. Custo de um estado: custo do caminho que leva do estado inicial s0 até s. No algoritmo de busca pelo menor custo, cada vez que um estado é expandido, um custo é associado a cada um de seus sucessores. O algoritmo progride expandindo sempre o estado de menor custo, até que um estado meta seja encontrado. 33 Busca pelo menor custo Combina os comportamentos da busca em largura (expande todos sucessores) e da busca em profundidade (aprofunda no de menor custo). Este algoritmo é obtido através do uso de uma fila de prioridades ascendente (do menor para o maior) para guardar os estados a serem expandidos. 34 Exemplo Problema das Rotas (11) (10) (12) (15) (14) (20) (16) (4) 35 Exemplo Problema das Rotas Estado inicial: s0 = a Estados meta: G = {[k]} Apesar de encontrar o menor caminho expande muitos estados tornando-o ineficiente. S0 O que aconteceria se todos os custos fossem iguais a 1? 7 10 12 9 11 14 16 20 3 4 15 36 Função heurística Estima o custo mínimo de um caminho (desconhecido) que leva de um determinado estado a um estado meta. Seja h* uma função que calcula o custo mínimo exato de um caminho que leva de um determinado estado a um estado meta. Formalmente, uma função heurística pode ser qualquer função h que apresente as seguintes propriedades: h(s) = 0 se e somente se s é um estado meta e para todo s pertencente a S, h(s) <= h*(s). 37 Propriedades da função heurística Essas propriedades garantem que a estimativa dada pela função heurística seja admissível, ou seja, que nunca superestime o custo real de uma solução. Note que as funções heurísticas dependem do domínio de aplicação, bem como da criatividade e experiência de quem a projeta. 38 Problema do Quebra-Cabeça O problema do Quebra-Cabeça de 8 consiste em movimentar as peças do quebra-cabeça horizontal ou verticalmente (para ocupar a posição vazia adjacente a peça) de modo que a configuração final seja alcançada: 39 Expandindo o estado corrente Agora, usando uma função heurística, o algoritmo de busca deveria expandir o melhor entre esses dois estados sucessores. Mas como decidir qual é o melhor? Uma possibilidade é: Verificar o quão longe cada peça encontra-se de sua posição na configuração final; Apontar como melhor estado aquele cuja soma das distâncias é mínima. 40 Estimativa No estado s1, as peças 1, 5, 6, 7 e 8 já estão em suas posições finais. Para as peças 2, 3 e 4, a distância é 1. Portanto, h(s1) = 3. Analogamente, h(s2) = 5. Isso indica que: uma solução a partir de s1 pode ser obtida com no mínimo mais três expansões, uma solução a partir de s2 requer no mínimo mais cinco expansões. O algoritmo deve escolher o estado s1. 41 Busca pela melhor estimativa É semelhante ao algoritmo de busca pelo menor custo. A diferença é que, em vez de se basear no custo g(s), do caminho já percorrido até s, para selecionar os estados a serem expandidos, a busca pela melhor estimativa se baseia no custo estimado h(s) do caminho que ainda precisa ser percorrido, a partir de s, até um estado meta. Baseia-se numa estimativa do que irei gastar. 42 Busca pela melhor estimativa Nesse algoritmo, a função sucessoresH devolve uma lista de estados sucessores e seus respectivos custos estimados (necessários para estabelecer a ordem dos estados na fila de prioridades ascendente), que são dados pela função h(s). 43 Exemplo Vamos considerar o Problema das Rotas. Como heurística, usaremos a distância em linha reta entre a cidade corrente e a cidade que se deseja atingir (obtido a partir de um mapa). Vamos encontrar uma rota que leve da cidade a a cidade k e, para facilitar a exposição, vamos definir a função heurística da seguinte forma: h(a) = 15 h(b) = 7 h(c) = 6 h(d) = 14 h(e) = 15 h(f) = 7 h(g) = 8 h(h) = 5 h(i) = 5 h(j) = 3 h(k) = 0 h(l) = 4 44 Exemplo Problema das Rotas Estado inicial: s0 = a Estados meta: G = {[k]} S0 7 Observe que este não é o menor caminho mas a busca foi mais eficiente. 6 14 3 4 0 45 Problema das Rotas 7 Menor custo = 16 6 4 15 14 0 3 Custo = 24 46 Análise dos algoritmos A busca pelo menor custo minimiza o custo do caminho percorrido até o estado corrente; Para garantir a solução de custo mínimo, o algoritmo acaba tendo que examinar uma grande quantidade de estados no espaço de estados do problema, podendo ser muito ineficiente. A busca pela melhor estimativa tenta minimizar o custo estimado do caminho a ser percorrido do estado corrente até um estado meta. Este algoritmo reduz o espaço de busca consideravelmente; porém, não consegue garantir uma 47 solução de custo mínimo. Atividade 10 Elabore uma função heurística para o problema do Labirinto e desenhe uma possível árvore busca (com 2 ou 3 níveis apenas) produzidas pelo algoritmo BuscaMelhorEstimativa. s0 = L[1][1] G = {L[13][14]}. 48 Busca A* Felizmente, é possível combinar essas duas estratégias de busca num mesmo algoritmo, denominado A*. O algoritmo minimiza o custo total do caminho percorrido, desde o estado inicial até um estado meta, usando uma função da forma f(s) = g(s) + h(s), onde g(s) é uma função de custo e h(s) e uma função heurística. 49 Busca A* Nesse algoritmo, a função sucessoresF devolve uma lista de estados sucessores e seus respectivos custos g(s)+h(s) (necessários para estabelecer a ordem dos estados na fila de prioridades ascendente), que são dados pela função f(s). 50 Exemplo Estado inicial: s0 = a Estados meta: G = {[k]} 15 15 14 17 16 17 17 16 51 Atividade 11 Desenhe as árvores de busca produzidas, para o Problema das Rotas, quando os algoritmos BuscaMenorCusto, BuscaMelhorEstimativa e BuscaA* são chamados com: s0 = k G = {[a]}. 52 Apresentação dos Trabalhos Média: 60 a 90 min Entregar: Apresentação (slides) Trabalho teórico: Texto incluindo referências bibliográficas (.doc ou pdf). Trabalho prático: código fonte dos programas 53 Calendário de aulas (previsão) 09/Mar – Algoritmos de Busca 16/Mar – Não haverá aula 23/Mar – Não haverá aula 30/Mar – Sem. 1 – Planejamento 06/Abr – Semana Santa 13/Abr – Não haverá aula 20/Abr – Sem. 2 – Visão Computacional 27/Abr – Sem. 3 – Aprendizagem e Redes Neurais 54 Calendário de aulas (previsão) 04/Mai – Sem. 4 - Data Mining e Sist. Recomendação 11/Mai – Sem. 5 – Proc. Ling. Natural + Text Mining 18/Mai – Não haverá aula (evento externo) 25/Mai – Sem. 6 e 7 – Chatter Bot e Sudoku 01/Jun – Sem. 8 e 9 – Jogo da Onça e Pet Squares 08/Jun – Corpus Christi 15/Jun – Não haverá aula (evento externo) 22/Jun - Entrega de Notas 55