GSI010 - Programação Lógica Resolvendo problemas com Programação Lógica Busca informada
Nesta aula Busca informada no espaço de estados
Busca no espaço de estados Método Considerar a existência de um agente, que possui ações para modificar os estados do mundo. Simplificações o estado do mundo só muda quanda o agente faz uma ação meta do agente é fazer o mundo atingir um estado pré-definido
Exemplo: O mundo do aspirador Agente: aspirador-robô Qual é a melhor forma de aspirar sujeira? Ações entrarsala1 entrarsala2 aspirar Estados do mundo sala 1 suja sala 1 limpa sala 2 suja sala 2 limpa
Exemplo: modelagem aspirar [sala1, limpa, limpa] [sala1, limpa, suja] entrar2 entrar1 entrar2 entrar1 [sala2, limpa, limpa] [sala2, limpa, suja] aspirar aspirar [sala1, suja, limpa] [sala1, suja, suja] entrar2 entrar1 entrar2 entrar1 [sala2, suja, limpa] [sala2, suja, suja] aspirar
Representação de estados Estados são representados por estruturas Estrutura de estados do Aspirador-robô lista com três elementos [SalaAgente, Sala1Estado, Sala2Estado] SalaAgente pode ser sala1 ou sala2 Sala1Estado pode ser limpa ou suja Sala2Estado pode ser limpa ou suja Exemplo: representação estado_inicial([sala1, suja, suja]). meta([_,limpa,limpa]). 1 2 3
Estratégias de busca não informadas Estratégia descreve Como fazer para encontrar solução na árvore de busca. Opções de estratégias não informadas busca aleatória escolhe aleatoriamente para onde ir busca em largura explora as possibilidades um nível por vez busca em profundidade explora as possibilidades uma sequência por vez
Estratégias de busca informadas Opções de estratégias informadas busca pelo menor custo usa informação de avaliação das ações realizadas busca pela melhor estimativa usa estratégia para avaliar aproximadamente boas alternativas busca ótima A busca melhor solução possível
Busca pelo menor custo Custo de ação ações podem ter custos e.g. gasto de bateria do dispositivo tempo/distância de viagem entre cidades etc. adicionamos um novo argumento ao predicado ação acao(acao, Estado1, Estado2, Custo) : condicoes, efeitos. 1 Leia-se: para executar a Acao no Estado1 e afetar alterar o estado do mundo para Estado2 é necessário arcar com o Custo, se as condicoes permitirem, e ocorrendo alguns efeitos colaterais.
Exemplo de problema com informação udia arag 37.7 137 ituiu 105 uba 36.7 72.5 84.5 capin gurin 74.7 cflor 78.1 63.6 prta 134 71.3 cverde inicial(udia). meta(cverde). acao(vai(p, Q), P, Q, D): via(p, Q, D). via(udia, arag, 37.7). via(udia, ituiu, 137). via(udia, prta, 84.5 ). via(udia, uba, 105 ). via(ituiu, capin, 36.7). via(ituiu, gurin, 72.5). via(gurin, cverde, 63.6 ). via(prta, cverde, 71.3). via(uba, cflor, 74.7). via(cflor, cverde, 134). via(cflor, prta, 78.1 ). 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
udia 37.7 137 105 Custo do caminho O caminho de ações [a 1, a 2, a 3,..., a n ] tem o custo igual a n g(a i ) (1) i=1 arag ituiu 36.7 72.5 capin gurin 84.5 uba 74.7 cflor 78.1 g(a i ) é o custo da ação a i 63.6 prta 134 71.3 cverde O custo do caminho [via(udia, uba, 105), via(uba, cflor, 74.7)] é 105 + 74.7 = 179.7
Busca de menor custo garantia do menor custo (mas não menor número de ações) se custos são iguais, equivalente a busca em largura
Exemplo: problema de aritmética Quais operações aritméticas podemos usar para sair de um número e chegar em outro? inicial(0). meta(10). acao(incrementa, S1, S2, 1) : S2 is S1+1. acao(decrementa, S1, S2, 1) : S2 is S1 1. acao(duplica, S1, S2, 2) : S2 is S1 2. acao(desdobra, S1, S2, 2) : S2 is S1/2. acao(inverte, S1, S2, 2) : S2 is S1. 1 2 3 4 5 6 7
Exemplo: problema de jogo Jogo: Street Fighter Quais golpes usar para ganhar do adversário? Cada golpe usa uma quantidade de tempo. Quais golpes vão levar menos tempo? inicial(50). % barra de energia do adversário meta(0). % quando a energia do adversário chegar a 0 acao(socofraco, S1, S2, 1) : S2 is S1 1. acao(socoforte, S1, S2, 2) : S2 is S1 2. acao(chutefraco, S1, S2, 3) : S2 is S1 4. acao(chuteforte, S1, S2, 4) : S2 is S1 8. acao(haduken, S1, S2, 10) : S2 is S1/2. 1 2 3 4 5 6 7
Implementação da busca de menor custo Com insereordenado/3 é possível sempre consultar primeiro aquele com menor custo até o momento. buscamenor: inicial(estadoinicial), buscamenor([0:estadoinicial:[]], [], CaminhoMenorCustoAteMeta:Custo), format( Plano: ~w, [CaminhoMenorCustoAteMeta]), format( \ncusto: ~w \n\n, [Custo]). buscamenor([custo:estadofinal:caminhofiminicio _], _, CaminhoInicioFim: Custo) : meta(estadofinal),!, reverse(caminhofiminicio, CaminhoInicioFim). buscamenor([custoatual:estadoatual:caminho Folhas], Visitados, Solucao): sucessorescusto(custoatual:estadoatual:caminho, Visitados, Sucessores), insereordenado(sucessores, Folhas, NovoFolhas), union([estadoatual], Visitados, UniaoVisitados), buscamenor(novofolhas, UniaoVisitados, Solucao). 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
sucessorescusto(custoatual:estadoatual:caminho, Visitados, ListaDeSucessores): findall(custonovo:estadonovo:[acao Caminho], (acao(acao, EstadoAtual, EstadoNovo, CustoAcao), not(member(estadonovo, Visitados)), CustoNovo is CustoAtual+CustoAcao), ListaDeSucessores). insereordenado(novasopcoes, Caminhos, NovosCaminhos) : append(novasopcoes, Caminhos, OpcoesCaminhos), sort(opcoescaminhos, NovosCaminhos),!. 1 2 3 4 5 6 7 8 9 10 11
Exercício: problema do troco Uma máquina automática tem N1 moedas de 1 centavo, N5 moedas de cinco centavos, N10 moedas de 10 centavos, N25 moedas de 25 centavos, N50 moedas de 50 centavos e N100 moedas de 1 real. Exercício Fazer a modelagem (grafo de estados) e codificação do problema para obter moedas para formar um troco de T, colocando um custo maior em oferecer moedas mais escassas e um custo menor em moedas mais frequentes. Dicas Se temos N moedas de um determinado tipo, o custo da operação de oferecer essa moeda pode ser 1/N se N > 0. Para simplificar a modelagem, reduza o número de moedas apenas após cada troco ter sido realizado.
Referências Slides Busca no espaço de estados (Parte I) Prof. Dr. Silvio do Lago Pereira Slides Busca no espaço de estados (Parte II) Prof. Dr. Silvio do Lago Pereira