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:  
Yamcha, Tenshinhan e Chaos foram mortos enquanto tentavam defender a terra dos  
terríveis Saiyajins! Agora a única esperança que Goku tem de algum dia voltar a ver os  
seus grandes amigos e salvar o planeta terra dos terríveis Saiyajins é reunindo as 7  
esferas do dragão.  
As esferas do dragão são artefatos mágicos que podem realizar qualquer desejo de  
quem as reunir. Quando as 7 esferas são reunidas é possível invocar o deus dragão  
Shenlong e fazer qualquer pedido. A maneira mais fácil de localizar as esferas é  
através de um dispositivo chamado radar do dragão. Porém, o radar do dragão foi  
destruído pelos Saiyajins.  
Para piorar, o planeta está repleto de poderosos Saiyajins! Se você for ferido em uma  
batalha, coma uma semente dos deuses para se recuperar completamente!  
Você deve explorar o planeta terra e reunir as esferas do dragão o mais rápido  
possível!”  
Figura 1. Esferas do dragão.  
Figura 2. Sementes dos Deuses.  
O Trabalho 2 consiste em implementar um agente baseado em conhecimento capaz de  
raciocinar nesse ambiente hostil e desconhecido. Você deve implementar uma interface  
em C ou C++ para representar visualmente esse ambiente e utilizar a linguagem Prolog  
para representar o conhecimento do agente.  
O mapa do planeta é mostrado na Figura 3.  
Figura 3. Mapa da Planeta.  
O planeta é formado por 3 tipos de terrenos: água (região azul), grama (região verde) e  
montanha (região marrom). O agente pode passar livremente pela água e grama, mas  
não pode passar de nenhuma maneira por montanhas.  
Informações Adicionais:  
O planeta deve ser representado por uma matriz 42 x 42 (igual à mostrada na  
Figura 3).  
O agente sempre inicia a jornada na Ilha do Mestre Kame (ponto vermelho no  
mapa). A aventura termina quando o agente possuir as 7 esferas do dragão e  
invocar Shenlong.  
O agente pode executar as seguintes ações:  
o Mover para Frente;  
o Virar a Direita (rotação de 90°);  
o Virar a Esquerda (rotação de 90°);  
o Pegar Objeto Para pegar esfera do dragão ou semente dos deuses, se  
eles existirem no local onde o agente se encontra;  
o KamehamehaPara soltar um Kamehameha em linha reta na direção  
que o agente está olhando;  
o Usar SementePara usar uma semente dos deuses e ser curado.  
o Invocar Shenlong Para unir as esferas do dragão e invocar Shenlong (a  
ação somente pode ser executada quando o agente possuir as 7 esferas do  
dragão);  
Cada ação executada pelo agente possui um custo:  
o Mover para Frente = -1;  
o Virar a Direita = -1;  
o Virar a Esquerda = -1;  
o Pegar Objeto = -1;  
o Kamehameha = -10;  
o Usar Semente = -3;  
o Invocar Shenlong = +1000;  
o Lutar contra um Saiyajin = -40;  
Além do custo de cada ação, Goku também possui uma determinada quantidade  
de energia. O valor inicial e máximo da energia é 100.  
Goku possui força superior aos Saiyajins e sempre consegue derrota-los, mas ele  
sempre gasta -20 de sua energia para lutar fisicamente contra um inimigo.  
O Kamehameha é sempre disparado na direção na qual o agente está olhando.  
Ele mata todos os inimigos que estiverem posicionados naquela direção até que  
uma montanha seja atingida, nesse caso a montanha é destruída e o  
Kamehameha para naquele ponto. O Kamehameha reduz -40 da energia de  
Goku.  
Ao atingir uma montanha com o Kamehameha, a montanha é destruída, se  
torna um terreno do tipo grama e o agente pode passar livremente por ela.  
Usar uma Semente dos Deuses restaura completamente a energia de Goku.  
O agente não tem acesso a nenhuma informação do mapa, mas ele possui alguns  
sensores para perceber o ambiente. O agente possui os seguintes sensores:  
o Em locais adjacentes a Saiyajins, exceto diagonal, o agente percebe o Ki  
do inimigo;  
o Em locais adjacentes a Sementes dos Deuses, exceto diagonal, o agente  
ouve o mestre Karin gritando.  
o Em locais adjacentes a Esferas do Dragão, exceto diagonal, o agente  
percebe o brilho da esfera;  
o Quando um Saiyajin é morto pelo Kamehameha, o agente ouve um grito;  
O planeta terra tem a estrutura ilustrada na Figura 3. Mas é desconhecida a  
localização dos Saiyajins, Sementes dos Deuses e Esferas do Dragão. Sabe-se  
apenas que existem:  
o 7 Esferas do Dragão;  
o 30 Sementes dos Deuses;  
o 400 Saiyajins;  
A posição dos Saiyajins, Sementes dos Deuses e Esferas do Dragão deve ser  
sorteada aleatoriamente no inicio do programa. Mas o agente NÃO PODE ter  
acesso direto a essas informações.  
O agente conhece inicialmente a estrutura de montanhas do planeta.  
Os Saiyajins, Sementes dos Deuses e Esferas do Dragão nunca devem estar  
dentro de montanhas.  
Inicialmente o agente possui 2 Sementes dos Deuses.  
O jogo acaba quando o agente conseguir reunir as 7 esferas o dragão e invocar  
Shenlong ou quando o agente ficar sem energia.  
Ao conseguir reunir as esferas do dragão, o agente ganha um bônus de +100  
para cada semente dos deuses que ele ainda estiver carregando.  
Requisitos:  
O programa deve ser implementado em C ou C++ utilizando a biblioteca do  
SWI-Prolog que permite acessar diretamente o Prolog. Também é permitido  
utilizar outras linguagens, mas antes você deve verificar se ela é compatível com  
o SWI-Prolog. Exemplos:  
o Java (http://www.swi-prolog.org/packages/jpl/)  
o C# (http://www.swi-prolog.org/contrib/CSharp.html)  
o Python (http://code.google.com/p/pyswip/)  
o PHP (http://www.j-paine.org/dobbs/prolog_from_php.html)  
O Prolog deve ser utilizado somente para representar o conhecimento do  
agente, a interface visual e demais controles devem ser implementados em  
C/C++.  
Não é permitido realizar nenhum processo de tomada de decisão em C/C++, a  
decisão de quais ações o agente vai realizar deve ser feita exclusivamente pelo  
Prolog.  
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 mapa do planeta deve ser configurável, ou seja, deve ser possível modificar  
o tipo de terreno em cada local. O mapa pode ser lido de um arquivo de texto ou  
deve ser facilmente editável no código.  
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.  
O trabalho pode ser feito individualmente ou em grupos de no máximo 3  
pessoas.  
O programa deve ser apresentado durante a aula por todos os membros do  
grupo. Se algum dos membros do grupo não comparecer ou não souber explicar  
nada sobre a implementação receberá nota zero.  
Dicas:  
Planeje e defina exatamente quais vão ser os predicados necessários no Prolog  
para codificar o conhecimento que o agente tem do mundo. Exemplos:  
o em(3,3).  
- define a posição atual do agente;  
o esfera(10,6).  
posição (10, 6);  
o semente(10,13).  
posição (10, 13);  
- identifica que existe uma esfera do dragão na  
- identifica que existe uma semente dos deuses na  
A maneira mais simples de codificar a comunicação entre o Prolog e o C/C++ é  
definindo um predicado “melhorAção” no Prolog. Esse predicado deve retornar  
a melhor ação para ser executada naquele momento. Comece codificando os  
comportamentos mais simples, como por exemplo:  
o melhorAcao(pegar_objeto) :- em(X,Y), (esfera(X,Y) ; semente(X,Y)).  
A ação “andar” não necessariamente precisa ser para um local adjacente a  
posição do agente. Pode ser um “andar” para outro local (X, Y) ainda não  
visitado. Nesse caso, você pode executar o A* para calcular o melhor caminho  
para chegar até a posição (X, Y) passando por locais seguros, mas lembre-se de  
tomar cuidado com os Saiyajins e aplicar os custos de movimentação.  
Programa Base (Projeto do Visual Studio 2010):  
https://edirlei.com/aulas/ia_2013_1/Trabalho2ProgramaBase_2013_1.rar  
Forma de Avaliação:  
Será avaliado se:  
(
(
(
1) O trabalho atendeu a todos os requisitos especificados anteriormente;  
2) Os algoritmos foram implementados e aplicados de forma correta;  
3) O código foi devidamente organizado;  
Bônus:  
1) O agente que conseguir coletar todas as 7 esferas do dragão com o menor custo,  
(
dado uma determinada configuração de posições das esferas, receberá 2 pontos  
extras na nota. Para participar dessa competição é necessário que o programa  
inclua uma forma simples de definir manualmente a posição das esferas do  
dragão, sementes dos deuses e saiyajins. Em caso de empate, ambos os trabalhos  
receberão a nota extra.  
Data de Entrega:  
7/05  
2
Forma de Entrega:  
O programa deve ser apresentado na aula do dia 27/05 (segunda) e enviando até o  
mesmo dia para o email edirlei.slima@gmail.com.