Implementação

Implemente as estratégias de busca:

Aplique estas estratégias ao problema do jogo dos 15 descrito na seção 1. No caso da implementação das estratégias A* e gulosa, utilize duas heurísticas: (a) somatório do número de peças fora do lugar e (b) manhattan distance (somatório das distâncias de cada peça ao seu lugar na configuração final).

Dadas as configurações inicial e final (que são argumentos de entrada para o programa), deve imprimir os operadores utilizados no caminho que leva à solução, número de passos, tempo de execução e quantidade de memória utilizada (contabilizada como número máximo de nós armazenados simultaneamente em memória durante a execução).

Compare a sua implementação com os resultados produzidos pelos seguintes métodos de procura:

A implementação pode ser em qualquer linguagem.

Para cada estratégia, analise:

Utilize gráficos ou tabelas para comparar as várias estratégias.

Utilize as seguintes configurações iniciais de teste:
1 2 3 4   1 2 3 4
5 6 8 12   13 6 8 12
13 9   7   5 9   7
14 11 10 15   14 11 10 15
                 

Utilize a seguinte configuração final para testar as duas configurações iniciais sugeridas:

1 2 3 4
5 6 7 8
9 10 11 12
13 14 15  

A primeira configuração tem solução ótima em profundidade 12 (menor número de movimentos possível para chegar da configuração inicial à configuração final).

A segunda configuração inicial não leva à configuração final proposta. Explique o porque.

Não esqueça que o seu programa deve estar preparado para receber qualquer configuração inicial ou final num formato em linha. Por exemplo,

1 2 3 4 5 6 8 12 13 9 0 7 14 11 10 15
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 0

onde a primeira configuração corresponde à primeira configuração inicial sugerida anteriormente e a segunda configuração corresponde à configuração de teste sugerida também anteriormente.

O seu código deve verificar se há solução para chegar do estado inicial ao estado final antes de iniciar a busca, e deve emitir uma mensagem de erro se não houver caminho entre a solução inicial e a final.

Utilize o algoritmo 1 como base para implementar todas as buscas (este é o algoritmo geral de busca, mas com um teste inicial específico para jogos do tipo jogo dos 15 - teste de resolubilidade):


\begin{algorithm}
% latex2html id marker 55
[hbtb]
\caption{Algoritmo Geral de ...
...
\EndWhile
\State return \lq\lq solution not found''
\end{algorithmic}\end{algorithm}

Este algoritmo, além de receber as configurações inicial e final, recebe também como parâmetro uma função de enfileiramento que será utilizada para ordenar a lista de nós (configurações) abertos (ainda não explorados).