4) { while ($ads2 == $ads1) { $ads2 = rand(1, $slides); } } $ads3 = rand(1, $slides); if ($slides > 4) { while (($ads3 == $ads2) || ($ads3 == $ads1)) { $ads3 = rand(1, $slides); } } ?>
INF1771 - INTELIGÊNCIA ARTIFICIAL  
TRABALHO 2 LÓGICA  
Descrição:  
O Mundo do Wumpus é caracterizado por um labirinto repleto de abismos e habitado  
pelo monstro Wumpus. O objetivo do jogo é sair vivo do labirinto com a maior  
quantidade de ouro possível. No interior da caverna, deve-se ficar muito atento às  
indicações de perigo, uma vez que o agente não conhece a localização dos obstáculos.  
Para identificar o perigo, o agente é dotado de percepções que o tornam capaz de sentir  
a brisa que sai dos abismos espalhados pela caverna ou ouvir o barulho dos morcegos  
gigantes, os quais são capazes de agarrar e transportar o agente para um ponto qualquer  
da caverna. Também é possível sentir o mal-cheiro exalado pelo terrível Wumpus.  
O Trabalho 2 consiste em implementar o Mundo do Wumpus em C ou C++ utilizando  
Prolog para representar o conhecimento do agente.  
Informações Adicionais:  
O labirinto deve ser representado por uma matriz 6 x 6.  
O agente sempre inicia na posição [1, 1] do labirinto.  
A posição [1,1] também representa a saída do labirinto.  
O agente pode executar as seguintes ações:  
o Mover_para_frente;  
o Virar_a_direita (rotação de 90°);  
o Pegar_objeto Para pegar o outro (se ele existir) na sala em que o agente  
se encontra;  
o Atirar_flecha Para lançar a flecha em linha reta na direção que o agente  
esta olhando;  
o Subir Para sair da caverna (a ação somente pode ser executada na sala  
[
1,1]);  
Cada ação executada possui o custo de -1. Os demais eventos possuem os  
seguintes custos/recompensas:  
o Pegar ouro = +1000;  
o Cair em um poço = -1000;  
o Ser devorado pelo Wumpus = -1000;  
o Atirar Flecha = -10;  
O agente possui os seguintes sensores:  
o Em salas adjacentes ao Wumpus, exceto diagonal, o agente sente o fedor  
do Wumpus;  
o Em salas adjacentes a um poço, exceto diagonal, o agente sente uma  
brisa;  
o Em salas adjacentes a um morcego gigante, exceto diagonal, o agente  
ouve os gritos do morcego;  
o Em salas onde existe ouro o agente percebe o brilho do ouro;  
o Ao caminhar contra uma parede o agente sente um impacto. As laterais  
do labirinto são paredes;  
o Quando o Wumpus morre o agente ouve um grito;  
O labirinto possui os seguintes elementos:  
o 2 Wumpus;  
o 4 Poços;  
o 3 Pedras de ouro;  
o 2 Morcegos;  
A posição inicial dos elementos do labirinto deve ser sorteada aleatoriamente no  
inicio do programa.  
O agente não pode ter acesso as informações do mapa que foi gerado para o  
labirinto.  
O jogo acaba quando o agente sair do labirinto ou quando ele morrer devorado  
pelo Wumpus ou ao cair em um poço.  
Ao entrar em uma sala onde existe um morcego, o agente é carregado pelo  
morcego para um lugar aleatório do labirinto, podendo ser um local seguro, um  
poço, a sala de um Wumpus ou a sala onde existe outro morcego. Ou seja, o  
local onde o agente será teleportado deve ser sorteado. Após levar o agente, o  
morcego retorna para a sala onde ele estava originalmente.  
Nos slides das aulas anteriores existem vários exemplos do mundo de Wumpus,  
inclusive algumas regras em lógica de primeira ordem que podem ser traduzidas  
para Prolog.  
Requisitos:  
O programa deve ser implementado em C ou C++ utilizando a biblioteca do  
SWI-Prolog que permite acessar diretamente o Prolog.  
O Prolog deve ser utilizado somente para representar o conhecimento do agente,  
a interface visual e demais controles devem ser implementados em C/C++.  
Deve existir uma maneira de visualizar os movimentos do agente, mesmo que a  
interface seja bem simples. Podendo até mesmo ser uma matriz desenhada e  
atualizada no console.  
O programa deve exibir um log das consultas e inserções realizadas na base de  
conhecimento Prolog.  
O programa também deve exibir a pontuação do agente enquanto ele executa as  
ações. Assim como a pontuação final.  
Bônus:  
O trabalho que apresentar o agente com a melhor pontuação final em um  
determinado labirinto receberá 2 pontos extras na nota. Podendo tirar até 12 no  
trabalho. Em caso de empate ambos receberam a nota extra.  
Para isso é necessário que o trabalho tenha algum método para adicionar  
manualmente a matriz do labirinto.  
Programa Base (Projeto do Visual Studio 2008):  
O programa base fornecido é um exemplo de como realizar consultas ao Prolog a partir  
de um programa feito em C++. O exemplo pode ser acessado no seguinte link:  
https://edirlei.com/aulas/ia/Trabalho2ProgramaBase.zip  
Forma de Avaliação:  
Será avaliado se o trabalho atendeu a todos os requisitos especificados anteriormente. O  
trabalho que atender a todos os requisitos receberá nota 10.  
Data de Entrega:  
1
7/10  
Forma de Entrega:  
O programa deve ser apresentado na aula do dia 17/10 (segunda) e enviando até o dia  
1
7/10 para o email edirlei.slima@gmail.com.