Mundo do Wumpus Beatriz F. M. Souza Prof. Orivaldo Lira Tavares Inteligência Artificial 15 de junho de 2014 Departamento de Ciência da Computação Universidade Federal do Espírito Santo (UFES), Vitória, ES – Brasil 1 Conteúdo • Breve Histórico • Mundo do Wumpus • • • • • • • O jogo proposto Enredo Personagens Ambiente Sensores Pontuação Atuadores • O núcleo • Interface • Comunicação entre o núcleo e a interface 2 Breve Histórico • Em 1972 Gragory Yob, um design de jogos americano nascido no Oregon, idealizou o Mundo de Wumpus, porque estava cansado dos jogos da época que eram baseados em grades cartesianas; • A primeira versão foi feita inicialmente em Basic, depois disso diversas outras versões foram implantadas e diversas variações do jogo foram idealizadas; • Gragory Yob falesceu em 2005. 3 Mundo do Wumpus – o jogo proposto • Mundo de Wumpus foi implementado com base no item 7.2 do livro “Artificial Intelligence - A Modern Approach” . 4 Mundo do Wumpus - Enredo • O jogador, também conhecido como agente, está dentro de uma caverna, na qual ele possui visão limitada ao seu redor. • Dentro desta caverna há um ouro, buracos e um monstro, o Wumpus. • O objetivo do jogo é matar o monstro, localizar o ouro e de posse do ouro, voltar até a entrada da caverna. • Se cair num buraco o jogador morre, se for comido pelo Wumpus. Só há uma flecha para o jogador matar o monstro, não a desperdice. 5 Mundo do Wumpus - Personagens • Os personagens são: – O Wumpus, o monstro horripilante; – Vários jogadores humanos; – Vários jogadores robos, também conhecidos como agentes. 6 Mundo do Wumpus - Ambiente • O ambiente é disposto da seguinte maneira: – Define-se uma matriz quadrada de tamanho variável; – Os agentes e os jogadores iniciam o jogo na posição [1,1], e deverão terminar seu desafio neste mesmo lugar; – Dentro desta matriz, define-se a posição do Wumpus (estática), que não se modifica no decorrer do jogo; – Dentro desta matriz, também se encontram 3 buracos, que não se modificam no decorrer do jogo, aqui há uma variação pois o jogo original proposto pelo livro sugere um cálculo para determinação do número de buracos, mas por questões práticas utilizamos um número fixo de buracos; 7 Mundo do Wumpus - Ambiente • O ambiente é disposto da seguinte maneira: – Dentro da matriz há uma posição onde se encontra o ouro, que também é definida e não se modifica no decorrer do jogo; – Nenhum objeto fixo (Wumpus, buracos e ouro) da matriz poderá ser definido no mesmo local de um outro objeto ao mesmo tempo; – Todos os objetos fixos da matriz são dispostos randomicamente em suas posições. 8 Mundo do Wumpus - Sensores • Os agentes possuem 5 sensores (sentidos), são eles: – Sente o mau cheiro exalado pelo Wumpus, nas posições da matriz (horizontais ou verticais) ao seu redor ; – Percebe uma brisa ao redor dos buracos, nas posições da matriz (horizontais ou verticais) ao seu redor ; – Visualiza um brilho ao redor do ouro, nas posições da matriz (horizontais ou verticais) ao seu redor ; 9 Mundo do Wumpus - Sensores • Os agentes possuem 5 sensores (sentidos), são eles: – Ouve um ruído de "bum", indicando que encostou em uma parede (horizontais ou verticais) ao seu redor; – Ouve um grito quando o Wumpus é morto pela sua flecha, este grito no jogo proposto no livro pode ser ouvido em qualquer lugar da caverna, mas decidimos criar uma dificuldade a mais fazendo com que apenas o agente que atirou preste atenção e ouça o grito interpretando-o como a morte do monstro, assim os outros jogadores ou agentes só saberão da morte do monstro caso sejam informados via mensagem. 10 Mundo do Wumpus - Pontuação • A pontuação é distribuída como a seguir: +1000 pontos por escalar a caverna e sair com o ouro; -1000 pontos se cair em um buraco ou ser comido pelo Wumpus; -10 pontos ao usar a flecha; -10 pontos se estiver atuando em uma casa com fedor e com vento; -5 pontos se estiver atuando em uma casa apenas com fedor; -5 pontos se estiver atuando em uma casa apenas com vento; -2 pontos se estiver atuando em uma casa sem percepções de vento, fedor ou brilho; 11 Mundo do Wumpus - Pontuação • A pontuação é distribuída como a seguir: -1 se tentar atirar uma flecha sem tê-la; -1 se bater em uma parede; -1 se esbarrar no Wumpus morto; -1 se tentar sair antes de pegar o ouro; -1 por qualquer outra ação tomada; 0 pontos se acertar o Wumpus com um tiro; 0 pontos se estiver atuando em uma casa com brilho, prevalecendo as casas com fedor e/ou vento. 12 Mundo do Wumpus - Pontuação • As ações propostas aos agentes ou jogadores são: – Mover-se de posição em posição da matriz; – A movimentação do agente ou jogador na matriz, deve ocorrer apenas na horizontal e na vertical, não sendo permitido movimentações na diagonal; – A movimentação só ocorre de uma em uma iteração, não sendo permitido executar saltos; – O agente pode encostar nas paredes, e repetirá a ação; – O agente pode esbarrar no cadáver do Wumpus, e repetirá a ação; – O agente pode atirar uma flecha em linha reta, na direção para a qual o agente está virado; 13 Mundo do Wumpus - Pontuação • As ações propostas aos agentes ou jogadores são: – A flecha se movimenta até encontrar uma parede ou até acertar o Wumpus; – A flecha não acerta seus companheiros e passa por cima dos buracos e do ouro; – O agente ou jogador só possui uma única flecha para cada um; – O agente ou jogador morre se cair em um buraco, se for comido pelo Wumpus ou se sua energia acabar. – O agente ou jogador, quando está na posição [1,1], pode escalar até a saída da caverna, se ele ou algum outro agente ou jogador já estiver de posse do ouro. 14 O núcleo em Prolog • Definição de um vocabulário; – – – – – – – – – – – – – – WPS = Wumpus; AGT = Agente; AUR = Ouro; BLH = Brilho; PPA = Passei por aqui (posição visitada); BRC = Buraco; VNT = Vento ou brisa; FDR = Fedor; PLV = Posição livre; FCH = Flecha; BUM = Barulho da parede; GRT = Grito do Wumpus; PRD = Parede. e outras mais. 15 O núcleo em Prolog • Definição da matriz; • Definição dos jogadores: – Jogador humano; – Jogador agente; • Definição dos objetivos; – – – – WUMPUS = Matar o Wumpus; OURO = Pegar o ouro; IMPASSE = Quando não há mais opções; SAIR = Sair da caverna. 16 O núcleo em Prolog • Divisão das bases de conhecimento (KBs); – KB = 0 -> Base de conhecimento do jogo onde são armazenadas informações como: tamanho da matriz, disposição dos artefatos na matriz, e as suas regras; – KB > 0 -> Base de conhecimento dos 'n' jogadores ou agentes, sendo primeiramente os 'KB' agentes e a seguir os 'KBH' jogadores humanos, por exemplo, para 2 agentes e 2 humanos teremos: KB = 1 para o primeiro agente, KB = 2 para o segundo agente, KB = 3 para o primeiro jogador e KB = 4 para o segundo jogador; – KB = -1 -> Base de conhecimento para troca de mensagens e comunicação com a interface, onde são guardadas as mensagens enviadas e processadas as respostas de leitura destas mensagens. 17 O núcleo em Prolog • Comunicação entre as KBs (mensagens); msg(<KB de mensagens>, <Identificador único da mensagem>, <KB destino>, <KB origem>, <Tipo da mensagem>, <Conteúdo da mensagem>) • Calculo situacional; – AGENTE REATIVO PURO – AGENTE COM MODELO DE MUNDO – AGENTE BASEADO EM OBJETIVO 18 O núcleo em Prolog • Definição da estratégia; – – – – – Prefere posições não visitadas, Prefere posições cujo risco de morte é menor, Prefere atirar se já inferiu o monstro, exceto se já atirou, Pode atirar a esmo se o risco de morte for grande, Prefere posições visitadas livres em caso de não haver outra possibilidade não visitada, – Realiza inferências com base nas mensagens recebidas e no seu próprio comportamento, – Dá prioridade ao pegar o ouro e só em caso eventual mata o monstro, – Procura uma saída usando posições livres e já visitadas. 19 A interface em Java • Baseada na existência de uma biblioteca nativa do próprio SwiProlog para interface com o Java (JPL.jar); • Utilização de comunicação por JSON e pela capacidade de interpretação dessa linguagem por ambas as ferramentas. • Biblioteca LWJGL (Lightweight Java Game Library); • FrameWork Slick2D. 20 A interface em Java 21 Comunicação entre o núcleo e a interface • Criação de um conjunto de predicados para geração e transmissão das informações do núcleo em Prolog para a interface em Java: – json_inic -> para inicialização da matriz e seus objetos; – json_mat -> para retornar o tamanho da matriz; – json_fdrs, json_blhs e json_vnts -> para posicionamento dos fedores, brilhos e ventos; – json_inic_agt -> para inicializar cada agente e retornar suas percepções inicias; – json_inic_hum -> para inicializar cada jogador humano e retornar suas percepções inicias; – json_passo -> para retornar o resultado de cada ação de um dado jogador ou agente após um passo do jogo (após executar sua ação); – json_msg -> para retornar o "pool" de mensagens de cada agente ou jogador para a interface após um passo do jogo (após executar sua ação); – json_fim -> para retornar o fim do jogo. 22 Comunicação entre o núcleo e a interface • Criação de um servidor web para envio das informações no formato JSON: – server(Port) :- http_server(http_dispatch, [port(Port)]). • Criação de uma série de predicados especiais para filtragem das informações a serem enviadas de modo que sempre ocorra um retorno no formato adequado, mesmo quando não há informação a ser enviada; 23 Comunicação entre o núcleo e a interface • Criação de um conjunto de predicados para execução especificamente pela interface Java, com a finalidade de simples execução do jogo: – main4j(M,KB,KBH) -> execução principal e inicialização do jogo com uma matriz de tamanho 'M', 'KB' agentes (jogadores robôs) e 'KBH' jogadores humanos; – passo4j(A,O,KB,T) -> execução de cada passo para executar a ação 'A', em uma orientação 'O' de um jogador ou agente do tipo 'T' identificado por 'KB'; 24 Para maiores informações • Wiki do trabalho: http://mundodowumpus.pbworks.com/w/page/73596 191/Mundo%20do%20Wumpus%20%20Projeto%20Final%20de%20IA • Wiki pessoal: http://bmartins.pbworks.com/w/page/70054670/Front Page • E-mail: [email protected] 25 Demonstração 26 Referências • Russell, S.; Norvig, P.; “Artificial Inteligência - A Modern Approach”; Prentice Hall; 2010, ed3. • SWI Prolog 6.6.1 (x64): http://www.swiprolog.org/Download.htm • Eclipse Kepler 4.3.1 (x64): http://www.eclipse.org/downloads/ • Java 7: http://www.java.com/pt_BR/download • Tiled Map Editor: http://www.mapeditor.org • Slick 2D: http://slick.ninjacave.com/ • Lightweight Java Game Library (LWJGL): http://lwjgl.org/ 27 Perguntas 28