You are on page 1of 5

Quebra-Cabea de 8 Peas e Caixeiro Viajante

Emanuella G. Ribeiro

emanuellagomes6@gmail.com

Resumo. Este relatrio descreve as caractersticas de implementaes para a


resoluo dois problemas, quebra-cabea de oito peas e caixeiro viajante. O
primeiro utiliza o algoritmo de busca informada A* (L-se A Estrela) e o
segundo utiliza tcnicas de busca e otimizao de resultados baseadas na
biologia evolutiva, os algoritmos genticos.

1. Problema do Quebra-Cabea de Oito Peas


O quebra-cabea de (n-1) peas consiste em um tabuleiro de dimenso nxn, que contm
(n-1) peas e um quadrado vazio, que possibilita a movimentao das peas. Para que o
problema seja solucionado as peas devem ser colocadas em seus devidos lugares, para
que o objetivo final seja alcanado. Atravs do quadrado vazio, podemos mover alguma
pea pelas direes direita, esquerda, para cima e para baixo. Para demonstrar um modo
de resolver o problema do quebra-cabea de oito peas, foi feito um programa em
linguagem de programao Java que consiste das classes Constantes, Tabuleiro, No,
ArvoreBusca e MainPuzzle. A configurao do tabuleiro dada por uma string de nove
caracteres, que devem ser nmeros na faixa de zero a oito.
A classe Constantes, do tipo final, define as trs constantes a serem utilizadas
pelo programa : TAM_TABULEIRO, que determina a quantidade de quadrados do
tabuleiro; TAM_ARESTA, o fator de ramificao; e ESTADO_OBJETIVO, uma
string que determina a configurao final do tabuleiro. A configurao final do tabuleiro
mostrada na Figura 1.

Figura 1. Configurao final do tabuleiro, definida pela constante


ESTADO_OBJETIVO

A classe Tabuleiro determina as caractersticas de um tabuleiro, calcula o valor


da heurstica, verifica se um movimento vlido baseado na localizao do quadrado
vazio e realiza a troca das posies aps a movimentao de uma pea. O primeiro
construtor auxilia na gerao de um tabuleiro com uma configurao aleatria e o
segundo gera um tabuleiro de acordo com a configurao determinada pelo usurio e/ou
pelo mtodo de busca, o A*. As coordenadas do tabuleiro, x e y, so utilizadas pelos
seguintes mtodos : setEspacoLivrePosicao, define a posio zero, isto , o quadrado
livre nas coordenadas x e y; getEspacoLivrePosicaoX, que retorna a coordenada x que
posiciona a posio zero no momento da execuo; e getEspacoLivrePosicaoY, que
possui a mesma funo do mtodo citado anteriormente s que para a coordenada y. O
mtodo computarHeurstica serve para obter o valor heurstico total do atual tabuleiro,
utilizando a distncias das peas de suas posies- objetivo. Como as peas no so
movidas na diagonal, a distncia (heurstica) a soma das distncias horizontal
(coordenada x) e vertical (coordenada y).
A classe No cria o n, no caso a configurao do tabuleiro. O n possui os
seguintes itens : estadoTabuleiro, a configurao do tabuleiro; estadoPai, uma
configurao do tabuleiro (n pai) e os filhos, que so as prximas possibilidades de
configurao do tabuleiro; valorHeuristica, a heurstica Manhattan, que utilizada para
no superestimar o nmero de passos para chegar at a configurao final e custoTotal,
a funo que determina qual ser o prximo estado do tabuleiro. A funo de custo total
a soma do custo total de um n inicial at um estado n e o valor da heurstica
Manhattan. A classe utiliza o mtodo compareTo, pertencente a interface
java.lang.Comparable, para organizar uma fila de prioridade. O mtodo faz uma
comparao entre o custo total da configurao atual e o custo total de uma
configurao que foi repassada. O mtodo displayNo utilizado para a exibio do
contedo do melhor tabuleiro, que determinado no mtodo compareTo.
A classe ArvoreBusca a responsvel por realizar a busca pela configurao
final do tabuleiro a partir de uma configurao inicial atravs da utilizao do algoritmo
A* e, a partir de uma dada configurao, possvel obter a soluo do jogo. Duas
estruturas de dados so utilizadas para a determinao dos ns que sero analisados pelo
algoritmo : Uma fila de prioridade (pq), lista aberta cuja organizao baseada no valor
do custo total do n (A configurao inicial do tabuleiro adicionada nessa estrutura)e
uma hashmap (hmap), lista fechada utilizada para verificar se um n j foi adicionado
na fila e expandido. O mtodo ehSolucionavel verifica se, dada uma configurao para o
tabuleiro, possvel obter a configurao final. Se o valor da heurstica zero e os
caracteres da configurao so iguais aos da constante ESTADO_OBJETIVO, logo
temos a configurao final; se no, para a execuo da busca, um novo tabuleiro
criado e adicionado na fila de prioridade. Um lao de repetio utilizado em todas as
peas para procurar movimentos vlidos. Com a movimentao de uma pea, um
tabuleiro-filho criado e adicionado na hashmap; caso ele no esteja presente nessa
estrutura, ele adicionado em hmap e na fila. Caso o filho esteja em hmap, verificado
se o custo total do n filho menor do que o custo total do n pai, o custo total e o pai
so atualizados para facilitar na busca pela melhor soluo. Para que a soluo seja
obtida a quantidade de estados alcanveis deve ser menor ou igual a 181440 estados
distintos, caso contrrio a configurao dada no possui soluo.
A classe MainPuzzle a classe responsvel pela execuo do jogo. O usurio
pode gerar uma configurao aleatria digitando o caractere 1, digitar sua prpria
sequncia de peas digitando 2 e sair da execuo do programa digitando 0. Tanto na
primeira quanto na segunda opes, o usurio pode visualizar a execuo do mtodo de
busca (A quantidade de vezes que o programa passou pelo lao de repetio definido no
mtodo ehSolucionavel, da classe arvoreBusca, o valor total da heurstica Manhattan e
a configurao das peas) digitando s.

2. Problema do Caixeiro Viajante


O problema do caixeiro viajante consiste em determinar uma menor rota para percorrer
n cidades, sendo que cada cidade deve ser visitada uma nica vez, e que deve retornar
cidade de origem. Para demonstrar um modo de resolver o problema do caixeiro
viajante, foi utilizado o ambiente Matlab.
O arquivo tsp_ga_gui.m (Arquivo principal que possibilita o funcionamento das
funes e auxilia o funcionamento do arquivo de mesmo nome, s que em formato
.fig)contm as funes necessrias para a obteno do menor caminho. O usurio pode
definir a quantidade de cidades , o tamanho da populao e o nmero de geraes. As
cidades podem distribudas de forma aleatria, atravs do boto aleatrio, e, a partir
disso, a matriz de distncias dsm preenchida. A populao fica armazenada na matriz
G, que o gene que possui os nmeros das cidades.
Com a populao inicial criada, ao clicar no boto Comear, comea a
execuo do algoritmo gentico. A funo de aptido dada pelo inverso da distncia,
no caso a distncia a varivel pthd e seu inverso ipthd. Quanto maior o valor da
inverso da distncia, maior a aptido. A frmula do clculo da probabilidade de um
caminho i participar do processo de cruzamento ( pi ) mostrada na Figura 2. Para
obter a probabilidade, a distncia inversa dividida pelo somatrio de distncias
inversas.A funo roulette_wheel_indexes, presente no arquivo com o mesmo nome da
funo, utilizada para o processo de seleo proporcional a aptido ou mtodo da
roleta. Um nmero aleatrio dado da forma [0;1] e podemos dividi-lo em n peas (n =
quantidade de caminhos). A probabilidade de escolha de uma pea proporcional ao seu
tamanho, pois a funo rand distribui nmeros aleatrios a partir da distribuio
uniforme.
1
di
pi=
d1
i i

Figura 2. Frmula para calcular a probabilidade de um caminho i ser posto para


o processo de cruzamento.

Para o processo de cruzamento, foi utilizada um mtodo proposto por Gktrk


oluk (2002). Dados dois pais, s e t , o mtodo PMX (Partially Matched Crossover)
escolhe um ponto aleatrio para o cruzamento. A gerao do descendente comea com a
gerao de uma cpia de s ; as posies entre o ponto so definidas para os valores de t
nessas posies. Para configurar a posio p para a cidade c, a cidade na posio p e a
cidade c trocam de posies. O filho resultante possui (1) entre os pontos de cruzamento
as mesmas cidades nas mesmas posies como t e (2) fora do intervalo de cruzamento,
as mesmas cidades nas mesmas posies como s, onde no entra em conflito com (1).
Essa ideia pode ser generalizada para o cruzamento n-pontos e, em um cromossomo, a
mutao pode ser feita trocando os valores dos genes em pares. O exemplo abaixo,
queremos substituir dois pais por dois filhos. O ponto de cruzamento est entre as
posies 2 e 3 (Figura 3). Uma cpia feita para que o filho seja semelhante ao segundo
pai (Figura 3). Aps a troca de posies, o resultado aparece na Figura 3. Um segundo
descendente poderia ser gerado copiando as cidades do primeiro pai para o segundo.
Nesse caso, como a primeira parte do processo gerou um filho igual ao segundo pai,
logo um outro cruzamento no necessrio

2 1 3 4
2 1 3 4 1 2 3 4
1 2 3 4
1 2 3 4 1 2 3 4
Figura 3. Exemplo do mtodo de crossover

Para o processo de mutao, foram utilizadas trs tcnicas :


1. Troca de duas cidades aleatrias no caminho (pm) :
Escolha duas cidades e troque-as

2 1 3 4 3 1 2 4
Todas as mutaes possuem probabilidades ajustadas que simuladas com a condio
rand<pm verdadeira com a probabilidade igual a pm pois rand retorna um nmero
aleatrio com distribuio uniforme.
2. Troca duas peas do caminho (pm2) :
Um ponto de separao aleatrio escolhido. Na imagem abaixo, o ponto est entre as
posies 2 e 3

2 1 3 4

Aps a troca, temos


3 4 2 1
3. Giro de uma parte aleatria do caminho (pmf) :
Escolha uma parte aleatria do caminho e gire da esquerda para a direita.
3 4 2 1 8 5 7 6
3 4 2 1 7 5 8 6
O elitismo pode ser utilizado para salvar o melhor caminho e utiliz-lo para a
prxima gerao sem mudanas. O mtodo faz uma melhoria no melhor caminho a cada
iterao ou mantm o mesmo caminho. Os arquivos update-plots e update_plots_nn_ps
ajustam os grficos, a matriz de cidades e o grfico que mostra a melhor rota a cada
gerao avaliada.
Figura 4. Grfico gerado no momento da execuo dos algoritmos genticos

Referncias
Branch and Bound | Set 3 (8 puzzle Problem). http://www.geeksforgeeks.org/branch-
bound-set-3-8-puzzle-problem/ , Abril.
Russell, S. S. e Norvig, P. (2013). Inteligncia Artificial, Elsevier, 3 edio.
oluk, G. (2002). Genetics Algorithm Solution of the TSP Avoiding Special
Crossover and Mutation. In: Intelligent Automation and Soft Computing vol. 03, n.
8, p. 976.

You might also like