230 likes | 366 Views
A Assombrosa Caverna do Wumpus. Versão Life Ioram Sette. Estrutura 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
E N D
A Assombrosa Caverna do Wumpus Versão Life Ioram Sette
Estrutura 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 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 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çõ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 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)?
Passos • 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 1Agente atualiza seu conhecimento com 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 2Escolhendo 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 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 3Atualização do Ambiente • Atualizar ambiente nos casos: • do Agente matar Wumpus e • do Agente pegar o Ouro
Subpasso 4Atualizaçã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 5 Atualização do Objetivo • Caso a ação seja pegar, o objetivo será alterado de acharouro para acharsaida.
Hierarquia 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 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).
Regras • 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çõ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-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õ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 AoVivo Local: Laboratório C6 Dia: 28/01 Horário: NOW! Estão todos convidados!! :)