A Assombrosa Caverna do Wumpus Versão Life Ioram Sette.

23
A Assombrosa Caverna do Wumpus A Assombrosa Caverna do Wumpus Versão Life Ioram Sette

Transcript of A Assombrosa Caverna do Wumpus Versão Life Ioram Sette.

Page 1: A Assombrosa Caverna do Wumpus Versão Life Ioram Sette.

A Assombrosa Caverna do WumpusA Assombrosa Caverna do Wumpus

Versão Life

Ioram Sette

Page 2: A 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

Page 3: A Assombrosa Caverna do Wumpus Versão Life Ioram Sette.

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.

Page 4: A Assombrosa Caverna do Wumpus Versão Life Ioram Sette.
Page 5: A Assombrosa Caverna do Wumpus Versão Life Ioram Sette.

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.

Page 6: A Assombrosa Caverna do Wumpus Versão Life Ioram Sette.

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.

Page 7: A Assombrosa Caverna do Wumpus Versão Life Ioram Sette.

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)?

Page 8: A Assombrosa Caverna do Wumpus Versão Life Ioram Sette.
Page 9: A Assombrosa Caverna do Wumpus Versão Life Ioram Sette.

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

Page 10: A Assombrosa Caverna do Wumpus Versão Life Ioram Sette.

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

Page 11: A Assombrosa Caverna do Wumpus Versão Life Ioram Sette.

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).

Page 12: A Assombrosa Caverna do Wumpus Versão Life Ioram Sette.

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)

Page 13: A Assombrosa Caverna do Wumpus Versão Life Ioram Sette.

Subpasso 3Subpasso 3Atualização do AmbienteAtualização do Ambiente

Atualizar ambiente nos casos:• do Agente matar Wumpus e • do Agente pegar o Ouro

Page 14: A Assombrosa Caverna do Wumpus Versão Life Ioram Sette.

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 **

Page 15: A Assombrosa Caverna do Wumpus Versão Life Ioram Sette.

Subpasso 5Subpasso 5Atualização do ObjetivoAtualização do Objetivo

Caso a ação seja pegar, o objetivo será alterado de acharouro para acharsaida.

Page 16: A Assombrosa Caverna do Wumpus Versão Life Ioram Sette.
Page 17: A Assombrosa Caverna do Wumpus Versão Life Ioram Sette.

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}.

Page 18: A Assombrosa Caverna do Wumpus Versão Life Ioram Sette.

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).

Page 19: A Assombrosa Caverna do Wumpus Versão Life Ioram Sette.

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).

Page 20: A Assombrosa Caverna do Wumpus Versão Life Ioram Sette.

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).

Page 21: A Assombrosa Caverna do Wumpus Versão Life Ioram Sette.

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).

Page 22: A Assombrosa Caverna do Wumpus Versão Life Ioram Sette.

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)

Page 23: A Assombrosa Caverna do Wumpus Versão Life Ioram Sette.

Demonstração AoVivoDemonstração AoVivo

Local: Laboratório C6Dia: 28/01

Horário: NOW!

Estão todos convidados!! :)