Quarto Exercício-Programa

Entrega: 30 de junho (pelo panda)

Este EP pode ser feito em dupla. Ele pode ser entregue também no dia 1/7 até às 13 horas em papel e disquete na minha sala.

Wumpus - Cálculo de um Passeio mais Curto

Esse EP usa como dados de entrada a saída gerada pelo EP3. Não é necessário no entanto que você tenha feito o EP3 para fazer este EP. Os dois programas são independentes e você pode inclusive gerar os seus próprios dados de entrada sem precisar do EP3.

Os dados de entrada deste EP deverão ser lidos de um arquivo. O nome do arquivo é dado pelo usuário, ou seja, o seu programa deve pedir que o usuário digite o nome do arquivo de entrada e então prosseguir com a leitura deste arquivo. Um arquivo de entrada deve ter exatamente o formato de um arquivo de saída do EP3:

Aqui você encontra um exemplo de arquivo de entrada para o EP4.

Chamemos de essenciais as posições com as duas coordenadas não-negativas.

O objetivo desse EP é calcular uma ordem em que as posições devem ser visitadas que corresponda a um passeio de comprimento mínimo que passe por todas as posições essenciais e por pelo menos uma (se houver alguma) posição não-essencial.

Para calcular tal passeio, utilize um algoritmo de enumeração. Ou seja, enumere todos os possíveis passeios e escolha um mais curto. Algoritmos de enumeração podem se tornar muito lentos. Sinta-se a vontade de "otimizar" o seu algoritmo, evitando enumerar passeios que você esteja certo que não levarão a um passeio mais curto. Cuidado para não "perder o melhor passeio" nessa otimização. Ou seja, certifique-se e explique em comentários no seu programa porque as suas otimizações garantidamente não cortam passeios mais curtos.

Evite também, dentro do possível, a geração de passeios "equivalentes". Por exemplo, um passeio e o seu inverso correspondem a um mesmo passeio. Teste apenas passeios começando da primeira posição dada, pois estamos interessados em passeios "circulares", ou seja, que começam e terminam no mesmo lugar, e portanto podemos fixar a ponta inicial.

A sua nota neste EP dependerá, entre outras coisas, da qualidade das suas otimizações. Assim, mesmo que seu EP calcule um passeio de comprimento mínimo, ele pode não receber nota máxima, por estar muito lento e não ter nenhum tipo de otimização implementada.

Saída do seu programa

A saída do seu programa deve ser a lista de posições na ordem em que devem ser visitadas e o comprimento do passeio dado por essa lista de posições.

Competição

Como vocês verão, o algoritmo implementado no EP4 é bastante lento para uma matriz de tamanho não tão grande. Assim, fará bastante diferença na qualidade do produto final as otimizações implementadas neste EP.

Na competição, escolheremos o melhor EP3 e, independente desse, o melhor EP4. O melhor EP3 é o que gera a matriz mais "enxuta", que servirá de dado para o EP4. O melhor EP4 é o que, dada uma matriz, identifica o melhor passeio o mais rapidamente possível.

Um par EP3+EP4 será considerado satisfatório para ser incluído no projeto do Laboratório Virtual de Inteligência Artificial se calcular rapidamente (instantaneamente do ponto de vista do usuário) o valor do limitante superior para dados do tamanho dos labirintos do jogo.

Avisos


Last modified: Tue May 14 18:17:53 EST 2002