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 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.
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 hospital(10,6) .
o delegacia(10,13).
- identifica que existe um hospital em (10, 6);
- identifica que existe uma delegacia em (10, 13);
•
•
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(ligar_helicoptero) :- em(18,17).
o melhorAcao(pegar_objeto) :- em(X,Y), (hospital(X,Y) ; delegacia(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 zumbis e aplicar os custos de movimentação.