Upload
internet
View
115
Download
7
Embed Size (px)
Citation preview
A Assombrosa Caverna do WumpusA Assombrosa Caverna do Wumpus
Versão Life
Ioram Sette
Estrutura do ProgramaEstrutura do Programa
Inicialização da Interface Gráfica Inicialização do Ambiente Inicialização das Percepções Inicialização do Agente Passo do Agente
• Subpasso 1 - Atualizar conhecimento com novas percepções
• Subpasso 2 - Escolher a próxima ação • Subpasso 3 - Atualizar o Ambiente segundo a ação• Subpasso 4 - Atualizar o Conhecimento• Subpasso 5 - Atualizar o Objetivo
Regras do jogo: subpassos 1, 3 e 4 Estratégia de exploração: subpassos 2 e 5
Inicialização da InterfaceInicialização da Interface
Programa dividido em 4 Janelas:• Tabuleiro 10x10 onde será construido e exibido o
ambiente do jogo.• Tabuleiro 10x10 onde será exibido o conhecimento do
agente sobre o ambiente• Janela de Mensagens indicando o que o usuário deve fazer
para usar o programa• Janela de informação que dá avisos durante o jogo.
Inicialização do AmbienteInicialização do Ambiente
Escolha da posição do Wumpus, Ouro e Buracos,clicando-se sobre as casas da janela de ambiente.
1 psi-term p/ Ambiente::env(monstro=>list, ouro=>list, buracos=>list).
monstro, ouro e buracos são listas de coordenadas com as localizações dos mesmos no tabuleiro::coord(x=>int,y=>int).
Variáveis New_Env e Old_Env p/ passar ambiente entre predicados.
Inicialização das PercepçõesInicialização das Percepções
1 psi-term p/ Percepções::perc(brisa=>list, fedor=>list, brilho=>list).
Botão Iniciar Percepções gera lista das coordenadas onde existirão brisas e fedores (em volta dos buracos e do Wumpus, considerando-se as excessões:cantos) e brilho (na mesma coordenada do ouro).
Variáveis Old_Perc e New_Perc para passar percepções entre predicados.
Inicialização do AgenteInicialização do Agente
Psi-term usado para o Agente e seu conhecimento:::agent(pos=>coord, obj=>goal, wumpus=>list, morto=>bool, ok=>list, objs=>list, vis=>list, fedor=>list, brisa=>list, pw=>list, nw=>list, pb=>list, nb=>list).goal := {acharouro;acharsaida}
Variável persistente para representar o Agente:persistent(agente)?
PassosPassos
Engloba os 5 subpassos Pode ser dado todo de uma vez, ou dividido em seus
subpassos Existem 2 variáveis persistentes estado e subestado
que indicam o número do passo e do subpasso respectivamente.
O subpasso recebe as variáveis Env, Perc, Acao e retorna New_Env, New_Perc e retorna as variáveis New_Env, New_Perc e New_Acao
Subpasso 1Subpasso 1Agente atualiza seu conhecimento Agente atualiza seu conhecimento
com suas novas percepçõescom suas novas percepções
Agente percebe se em sua posição atual existe brisa ou fedor, e descobre se as casas ao seu redor são seguras ou se existem riscos (wumpus? ou buraco?) ** colocar regras que implementam esse raciocínio **
Remove os riscos do wumpus? E buracos? das casas que ele sabe que estão seguras ** colocar regras disso **
Tenta descobrir onde está o Wumpus.• porque não com os buracos, explica estratégia
Pinta Janela do Agente
Subpasso 2Subpasso 2Escolhendo a AçãoEscolhendo a Ação
De acordo com seu objetivo, escolhe uma das possíveis acoes:acao := {andar;pegar;atirar;voltar;fim}.
Se o objetivo for achar ouro, as ações podem ser:• Pegar, se o agente está numa casa com brilho!• Atirar se o agente sabe onde está o Wumpus!• Andar, caso contrário.
Se o objetivo for achar saída, ele volta (voltar) até a casa 1,1 e termina o jogo (fim).
Estratégia de Andar e VoltarEstratégia de Andar e Voltar
Andar sempre em casa seguras, dando preferência às menos visitadas.
Ordem de preferência: Direita, Esquerda, Baixo, Cima.
Voltar sempre em casas já visitadas. Ordem de preferência: Esquerda, Cima,
Direita, Baixo. Evita girar Evita também choque nas paredes (explicar
como faz)
Subpasso 3Subpasso 3Atualização do AmbienteAtualização do Ambiente
Atualizar ambiente nos casos:• do Agente matar Wumpus e • do Agente pegar o Ouro
Subpasso 4Subpasso 4Atualização do AgenteAtualização do Agente
Caso a ação seja atirar:• retirar a flecha dos objetos do agente• retirar fedor de suas percepções• retirar wumpus! de seu conhecimento.
Caso a ação seja pegar:• adicionar ouro aos objetos
Caso a ação seja andar ou voltar:• atualizar posição do agente.
** mostrar código **
Subpasso 5Subpasso 5Atualização do ObjetivoAtualização do Objetivo
Caso a ação seja pegar, o objetivo será alterado de acharouro para acharsaida.
Hierarquia de TiposHierarquia de Tipos
item := {monstro;ouro;buraco}. percept := {brisa;brilho;fedor}. e’ grito,
choque na parede? goal := {acharouro;acharsaida}. acao := {andar;pegar;atirar;voltar;fim}. objeto := {ouro;arco;flecha}.
Hierarquia de ClassesHierarquia de Classes
::coord(x=>int, y=>int). ::env(monstro=>list, ouro=>list, buracos=>list). ::perc(brisa=>list, fedor=>list, brilho=>list). ::agent(pos=>coord, obj=>goal, wumpus=>list,
morto=>bool, ok=>list, objs=>list, vis=>list, fedor=>list, brisa=>list, pw=>list, nw=>list, pb=>list, nb=>list).
RegrasRegras
Preferência a regras que funções. Não é trivial utilizar-se funções e predicados
conjuntamente. Ex.: Determinar se coordenada contida numa
lista de coordenadas: contem(X,[]) :- fail.contem(X,[Y|S]) :- (X.x =:= Y.x, X.y =:= Y.y) ; contem ( X, Y).
FunçõesFunções
As únicas utilizadas foram as do ambiente gráfico, event_handler e handle_event.
event_handler (Old_Env) -> handle_event1(xGetEvent(wumpuswindow, eventmask=>wumpusmask), Old_Env).
Predicados X Psi-TermsPredicados X Psi-Terms
xmonstro(X,Y). xouro(X,Y). xburaco(X,Y).::env(monstro=>list, ouro=>list, buracos=>ist).
xcheiro(X,Y), xbrisa(X,Y), xbrilho(X,Y).::perc(brisa=>list, fedor=>list, brilho=>list).
ouro, monstro, buraco, brilho, cheiro, brisa::agent(pos=>coord, obj=>goal, wumpus=>list, morto=>bool, ok=>list, objs=>list, vis=>list, fedor=>list, brisa=>list, pw=>list, nw=>list, pb=>list, nb=>list).
DiscussõesDiscussões
Assert, Retract X Old_Var, New_Var Assert, Retract X Persistent(var)?
** mostra codigo comparando uso de um x o outro **
+ e - de OldVar NewVar x Persistent(var)
Demonstração AoVivoDemonstração AoVivo
Local: Laboratório C6Dia: 28/01
Horário: NOW!
Estão todos convidados!! :)