You are on page 1of 6

Problema 8-Puzzle: Anlise da soluo usando Backtracking e Algoritmos Genticos

Nelson Florncio Junior, Frederico Gadelha Guimares


PPGCC - Programa de Ps-Graduao em Cincia da Computao
UFOP - Universidade Federal de Ouro Preto
Ouro Preto, Minas Gerais, Brasil
email: sidnelson21@gmail.com, fredericoguimaraes@ufmg.br

ResumoCom jogos de tabuleiro, como o 8-Puzzle, onde


existem regras bem definidas podemos gerar um espao de
busca bem definido, porm algumas solues podem ser custosas para o desempenho de um determinado computador. Dado
o problema podemos resolv-lo com uma busca de estados em
um grafo, onde cada n do grafo representa um estado (configurao) do Puzzle. Deve-se ento encontrar um caminho num
grafo que leve ao estado final, no caso um puzzle ordenado. Os
Algoritmos Genticos, pertencentes a Computao Evolutiva,
proporcionam uma busca inteligente, evoluindo baseando-se
nos resultados obtidos de testes anteriores, diferentimente do
algoritmo baseado no paradigma Backtracking (Tentativa e
Erro), onde testamos todos os caminhos possveis num grafo
at encontrar a soluo. Desenvolvendo os algoritmos e comparando seus resultados por meio de uma nlise de compexidade
podemos chegar a uma concluso de qual paradigma se encaixa
melhor ao problema ou em que situao cada um se encaixa
melhor.
Keywords-8-Puzzle, Algoritimos Genticos, Backtracking e
complexidade.

I. I NTRODUO
A. 8-Puzzle
O jogo do 8-Puzzle um jogo de tabuleiro de blocos
deslizveis. O problema bastante abordado na disciplina
de Inteligncia Artifial, segundo [1], alm do seu apelo
intelectual inerente, os jogos de tabuleiro tem certas propriedades que os tornaram objetos de estudo ideal para trabalhos
inicias.
O objetivo do jogo mover as peas a partir de um estado
inicial at encontrar seu estado final, quando o Puzzle est
ordenado de forma crescente, como na Figura 1. As regras
do jogo so bastante simples, a pea vazia a nica que
pode movimentar-se, dependendo da situo pode haver de
dois a quatro movimentos possveis (cima, baixo, direita
e esquerda). Estes movimentos geram novos estados at
econtrar o estado final. O Puzzle possui um espao de
estados no valor de 9!. Segundo [2] a soluo tima para
este problema pertence a classe NP-Completo.
B. Busca em Espao de Estados
Existem diversas maneiras de solucion-lo, tais como
algoritmos de combinao, busca em largura, profundidade,
tcnicas de busca direcional, entre diversas outras. Uma
forma de solucionar o problema usando a teoria de busca

Figura 1.

Estados do Puzzle

em espao de estados, representando o problema em forma


de um grafo. No entanto para modelar este problema deve-se
levar em considerao quatro caractersticas bsicas:
Estado Inicial: consiste na representao inicial do
probrema. Neste caso pode-se considera um Puzzle com
as peas todas desordenadas.
Estado Final ou objetivo: refere-se a soluo do
problema, neste caso quando encontra-se o Puzzle totalmente ordenado de forma crescente.
Operadores: so as operaes que podem ser realizadas em cada estado, neste caso so os movimentos
(cima, baixo direita e esquerda).
Custo do Caminho: corresponde a uma funo que
atribui um custo para um caminho, neste caso o valor
ser um para todos os movimentos.

Figura 2.

Grafo

Segundo [1], os grafos de espao de estados para jogos


so normalmente grafos radicados, ou seja, possui um n
raiz que alcana quaquer outro n filho por um caminho no
grafo. Para grafos radicados, incluem-se como relao entre

ns as denominaes pai, filho e irmos. Na Figura 2, pode


exemplificar esta relao, onde A o n pai de (B, C, D),
que so irmos e filhos de A.

C. Backtracking
Tambm conhecido como Tentativa e erro ou mesmo
regresso, caracteriza-se como um Paradigma de Projeto de
Algoritmos, que segundo [3] busca decompor o processo
em um nmero finito de sub-tarefas parciais que devem
ser exploradas exaustivamente. Pode ser visto como um
processo de pesquisa ou de tentativa que gradualmente
constri e percorre uma rvore de subtarefas. A busca
em profundidade recursiva apresenta estas caractersticas,
por isto servir como parmetro de comparao com os
Algoritmos Genticos.
uma soluo clssica para problemas de busca, como
o proposto neste artigo, o problema que quanto maior o
espao de busca, menor as chances de se encontrar uma
resposta em tempo de execuo.

Seleo: a partir do valor de avaliao de cada cromossomo podemos selecionar quais so mais aptos
para continuar na prxima gerao. Existem vrios
mtodos de seleo como: o Elitismo, que privilegia os
indivduos mais aptos e o da Roleta, onde os individuos
so sorteados para prxima gerao, a probabilidade de
escolha de um indivduo diretamente proporcional a
sua aptido.
Operadores Genticos: existem dois operadores genticos. Eles garantem que a nova gerao herde
caractersticas das geraes anteriores. O primeiro
chamado de crossover ou cruzamento, ele recombina as
caractersticas dos pais gerando dois novos filhos, como
visto na Figura 3. O outro operador o de mutao,
onde um ou mais genes de um individuo so alterados
aleatoriamente, garantindo que o espao de busca no
fixe num mximo ou mnimo local.

D. Algoritmos Genticos
Fundamentado principalmente pelo americano John Henry
Holland, os Algoritmos Genticos pertencem a classe dos
algoritmos bio-inspirados, ou seja, inspirados na natureza
eles imitam o comportamento evolutivo das espcies. O comportamento evolutivo foi definido por Darwin, que afirma
que em uma populao, os indivduos mais aptos sobrevivem
e passam sua caractersticas para seus descendentes.
Segundo [4], eles empregam uma estratgia de busca
paralela e estruturada, direcionada busca de pontos de
alta aptido, ou seja, pontos nos quais a funo a ser
minimizada ou maximizada tem valores relativamente baixos
ou altos. Algoritmos Genticos no so buscas aleatrias
no-direcionadas, pois exploram informaes histricas para
encontrar novos pontos de busca onde so esperados melhores desempenhos.
Para caracterizar os Algoritmos Genticos deve-se levar
em considerao:

Representao das Solues de Problema: Algoritmos Genticos processam populaes de indivduos ou


cromossomos. Cromossomos so estruturas de dados,
geralmente vetores ou cadeias de valores binrias que
representam uma possvel soluo do problema. Estes
vetores so formados por genes. O conjunto de todas as
configuraes que o cromossomo pode assumir forma
o espao de busca.
Inicializao da Populao determina o incio do
ciclo do algoritmo, geralmente preenchida de forma
aleatria.
Avaliao: a cada cromossomo atribudo um valor de
aptido definido por uma funo. Pode ser visto como
uma nota que avalia o quo boa a soluo codificada
por um cromossomo.

Figura 3.

Operador de Crossover

II. J USTIFICATIVA
Os jogos de tabuleiros facilitam o aprendizado em Inteligncia Artificial, isso devido a suas regras bem estabelecidas
possibilitando melhor entendimendo do espao de busca se
compararmos com problemas mais complexos da vida real.
Sendo assim para o incio de uma pesquiva em Computao Evolutiva seria interessante desenvolver uma aplicao
envolvendo Algoritmos Genticos e comparar com algum
mtodo convencional, no caso o Backtracking. Segundo
[4], as tcnicas convencionais de busca possuem limitao
de sua natureza serial. Com a expanso do processamento
paralelo, tcnicas de otimizao paralelas sero largamente
beneficiadas, o que o caso dos Algoritmos Genticos.
III. O BJETIVO
O objetivo deste trabalho desenvolver dois algoritmos
que resolvam o problema do 8-Puzzle, um baseado no paradgma de Backtracking e outro em Computao Evolutiva,
especificamente Algoritimos Genticos. Fazer uma anlise
de complexidade entre os dois algoritmos e apresentar os
resultados.

IV. T RABALHOS R ELACIONADOS


Nos Estados Unidos, [5] realizou um trabalho parecido
onde obteve resultados interessantes. Existem casos em que
para facilitar a forma de representao dos cromossomos
autores afrouxaram as regras do Puzzle, permitindo que
todas as peas possam ser trocadas entre si limitando-se
apenas as trocas em vertical, como em [6] e [7], este
obteve um grande exito aplicando Algoritmos Genticos e
a metaheurstica GRASP nas suas aplicaes com Puzzle, o
que no seria interessante neste caso.

V. M TODOS
Ambos os mtodos foram implementados na linguagem de
programao C++, no ambiente de desenvolvimento CodeBlocks 10.05.

Nota-se que h um vetor de estados denominado Fechado,


este vetor uma variavel global, ela armazena todos os
estados visitados no espao de busca. Na linha 6, depois de
gerados os filhos, de acordo com os possveis movimentos
do estado do Puzzle, verifica-se o filho j havia sido visitado,
caso no o algoritmo chama a funo de busca novamente
passando o filho encontrado como estado atual, caso sim ele
retorna falha e volta para n anterior e verifica se h irmos
a serem visitados.
B. Algoritmos Genticos

A. Backtracking
Baseado nos conceitos de Tentativa e erro, foi implementado um algoritmo de busca em profundidade recursiva. A
busca acontece expandindo o grafo de espao de estados,
como visto na Figura 4, por meio dos possveis movimentos
do estado atual, gerando filhos a serem visitados.

Figura 4.

B USCA E M P ROFUNDIDADE(EstadoAtual)
1 if EstadoAtual = Objetivo
2
return SU CESSO
3 F echado[] := EstadoAtual
4 while F ilhos[EstadoAtual] <> 0
5
F ilho := P roximoF ilho
6
if F ilho <> F echado[]
7
BuscaEmP rof undidade(F ilho) = SU CESSO
8
return SU CESSO
9 Fim-While
10 return F ALHA
11 Fim-funo

Expanso do Grafo de espao de estados

Esta busca foi baseada numa estrutura de busca de espao


de estados. Caso encontre o objetivo, a busca encerrada
retornando sucesso, caso encontre um limite, que pode de
ser um limite de profundidade do grafo ou um estado j
visitado, a busca retrocede para o n mais recente sobre o
caminho, que tenha irmos ainda no examinados. Veja no
algorimo seguinte:

Os Agoritmos Genticos podem apresentar solues prximas as solues timas, segundo [4], uma de suas vantagens que as tcnicas de busca convencionais iniciam
seu processamento em um nico candidato, por outro lado
as tcnicas de Computao Evolutiva operam sobre uma
populao de candidatos em paralelo, assim elas podem
fazer a busca em diferentes reas do espao de soluo,
alocando um nmero de membros apropriado para a busca
em vrias regies. O algoritmo expresso da seguinte forma,
onde t representa cada gerao:
A LGORITMO G ENETICO()
1 t=0
2 criar populao P (t);
3 for cada indiviudo i de P (t)
4
avaliar aptidao individuo(i)
5 Fim-para
6 while condio de parada no satisfeita
7
t := t + 1;
8
Selecionar populao P (t) de P (t 1);
9
Aplicar operadores de cruzamento sobre P (t);
10
Aplicar operadores de mutao sobre P (t);
11
Avaliar P (t);
12 Fim-enquanto
Inicialmente gerada uma populao formada por um
conjunto aleatrio de indivduos que podem ser vistos como
possvel soluo do problema. A Figura 5 demonstra a
populao inicial gerada com genes formados com valores
variando de 0 a 3, (0 - cima, 1 - baixo, 2 - esquerda e 3
- direita), referentes aos movimentos da posio vazia do

Puzzle. Para no sortear movimentos invlidos foi criada


uma funo que verifica a posio da pea vazia e retorna
os movimentos vlidos, depois sorteado um valor dentre
estes movimentos.

ressaltar que se a taxa de mutao for muito alta a busca se


torna essencialmente aleatria.
A cada gerao a aptido dos cromossomos minimizada,
consequentemente o nmero de movimentos para resolver o
Puzzle tambm diminue. A condio de parada adotada foi
o nmero de geraes, pois o objetivo em questo achar
a melhor soluo possvel.
VI. A NLISE DE C OMPLEXIDADE
A. Backtracking

Figura 5.

Populao Inicial

Para avaliar cada indivduo foi criada uma funo baseada


em trs heursticas:
peas fora do lugar: soma do nmero de peas fora
do luga em cada estado.
distncia de Manhatan: soma das distncias de cada
pea a sua posio original
nmero de inverses: a inverso acontece quando
uma pea tem como antecessor uma pea com valor
inferior ao dela. Note que quando este caso acontece
com as peas de valor 0 e 1, esta heurstica no
influncia tanto, porm quando envolvem outras peas
aumenta significativavente o nmero de movimentos
para resoluo do Puzzle.
A funo foi desenvolvida baseada na idia de [5] e [1].
Ela expressa da seguinte forma:
f (n)
=
36 N umP ecasT rocadas + 18
DistaciaM anhattan + 2 N umInversoes
Para o processo de seleo de indivduos para a prxima
gerao foi adotado o mtodo do Elitismo, que mantm
uma porcentagem dos indivduos mais aptos, neste caso foi
adotada uma porcentagem de 10% da populao.
Alguns membros mantidos pela seleo sofreram alterales gerando novos indivduos. Estas modificaes foram
devido aos operadores genticos de crossover e mutao. O
operador de crossover foi aplicado com uma taxa de 30% e
o de mutao foi aplicado uma taxa de 60%. Geralmente o
operador de crossover predomina, porm neste caso devido
a possibilidade de um gene no ser vlido em determinado
estado ele perde um pouco da qualidade. Exemplo se um
gene possui o valor 0 referente ao movimento para cima e a
posio vazia estiver na primeira linha do Puzzle, este gene
ser invlido. Isto no acontece com o operador de mutao,
pois os valores sorteados sempre sero vlidos. importante

Para anlise de complexidade do algoritmo de Backtracking baseado em busca em profundidade recursiva, devemos
levar em considerao dois termos: o nmero em mdia de
filhos gerados por cada n (B) e a profundidade mxima
do grafo de espao de estados (m). Por no precisar manter
todos os ns do grafo na memria, esta busca possui uma boa
complexidade de espao. Como exemplificado na Figura 6,
os ns brancos ainda no foram visitados, portanto no gastam espao na memria. Logo a funo de complexidade de
espao linear e pode ser definada como: f (n) = O(B m).
No 8-Puzzle, a profundidade do grafo de espao de estados
se refere ao nmero de movimentos.

Figura 6.

Busca em Profundidade

J a complexidade de tempo demonstra a principal falha


deste mtodo, pois sua complexidade exponecial, representada por: f (n) = O(B m ), ou seja, alm de no garantir
uma soluo tima, dependendo da instncia o Backtracking
levar um enorme tempo para encontrar uma soluo. Para
exemplificar, levando em conta o tempo em minutos, com
um espao de busca de profundidade 100, este algoritmo
gastaria 2100 minutos para resolver o problema no pior caso.
B. Algoritmos Genticos
Segundo [8], a complexidade de um Algoritmo Gentico
no depende somente do tamanho de entrada n de um
problema, mas tambm de seus parmetros como nmero
de geraes, nmero de indivduos e a taxa dos operadores
genticos. Numa forma abstrata podemos considerar uma
funo geral da complexidade como:
f (n) = O(CompInic + [numGer (CompReprod +
CompT erm)]) + CompRecupera )

Onde numGer refere-se ao nmero de geraes. A


complexidade de CompInic refere-se a complexidada do
procedimento da populao inicial, CompT erm referente
a complexidade de calcular se a condio de parada foi
atingida, CompRecupera a funo que retorna a soluo.
Estas so complexidades simples que dependem da implementao. J a CompReprod totalmente relacionada com
o nmero de cromossomos e definida por:
=
L

PCompR eprod
(1/k (CompEscolherI ndividuo + Compmod )
Onde L o nmero de vezes que a gerao executada, k
o nmero de operadores genticos existentes e/ou utilizados no problema. CompEscolherI ndividuo a complexidade
de escolher um indivduo e Compmod a complexidade dos
procedimentos de mutao e/ou crossover.
No algoritmo desenvolvido neste trabalho, a funo de
complexidade possui algumas particularidades devido a estrutura dos cdigos, por exemplo , em uma nica funo
foram feitas as operaes de seleo, mutao e crossover.
Como foi utilizado o algoritimo de Insero para ordenar os
indivduos, esta funo possui complexidade O(n2 ), onde
n o nmero de indivduos. Como esta complexidade
domina as outras assintoticamente, pode-se considerar a
complexidade de tempo e espao deste algoritmo como:
f = numger O(n2 ), onde n o nmero de indivduos.
VII. E XPERIMENTOS
Como os Algoritmos Genticos so algoritmos estocsticos, ou seja, so processos no determinsticos, com origem
em eventos aleatrios, por isso cada instncia foi testada 10
vezes tirando-se uma mdia das solues encontradas. Para
realizao dos experimentos foram testadas cinco instncias,
todas elas com 4000 geraes e 1000 indivduos ou cromossomos.
A Tabela I demonstra como os resultados encontrados
usando os Algoritmos Genticos so eficientes, comparandoos com Backtracking at mesmo a mdia dos resultados
alcanados mantm uma grande diferena entre os mtodos.

na quinta instncia h uma grande possibilidade de ser a


melhor soluo, devido ao pequeno nmero de movimentos.

Figura 7.

Testes com os Algoritmos Genticos

O comportamento do Algoritmo Gentico expresso


pela Figura 8. Note que os movimentos so minimizados
a medida que as geraes aumentam. Este fato acontece
devido a aptido dos cromossomos tambm diminuirem,
demonstrando que a funo de aptido avalia de forma
correta cada cromossomo. Assim o comportamento evolutivo
do algoritmo realizado encontrando o menor nmero de
movimentos possvel.

Tabela I
A NLISE DOS MTODOS

Instncia
1
2
3
4
5

Backtracking
94
137
84
300
316

Nmero de Movimentos
Mdia(AG)
Melhor Resultado(AG)
46,7
37
45,8
38
35
25
41
33
31,1
21

O grfico da Figura 7, demonstra a variao dos resultados


encontrados durante os testes dos Algoritmos Genticos.
Note que o pior resultado encontrado dentre as instncias
aconteceu no segundo teste da instncia 2, mesmo assim
ainda menor que a metade do valor encontrado pelo
mtodo Backtracking. Em todos os testes o algoritmo encontrou uma soluo, em alguns casos como na segunda e

Figura 8.

Grfico: Movimentos sendo minimizados

VIII. C ONCLUSES
Os resultados comprovam que comparado com o Backtracking, os Algoritmos Genticos possibilitam encontrar
solues muito mais interessantes. Os operadores genticos
garantem que a busca no se torne puramente aleatria
aproveitando os melhores indivduos de geraes anteriores.
Os algoritmos Genticos posuem uma enorme vantagem
se comparado a outros mtodos, pois realizam uma busca

de otimizao global, ou seja, possui uma busca paralela e


estruturada que visa uma populao no um nico indivduo.
Em trabalhos futuros seria interessante melhorar a representao dos cromosomos de modo que permita um melhor
aproveitamento do operador de crossover, possibilitando
encontrar solues com um menor nmero de geraes,
consequentemente diminuindo o tempo de execuo.
R EFERNCIAS
[1] G. F. Luger, Inteligncia Artificial: estruturas e estratgias
para a soluo de problemas complexos, 4th ed. Bookman,
2004, 85-363-0396-4.
[2] S. Russell and P. Norvig, Artificial Intelligence: A Modern
Approach, 2nd ed. Prentice-Hall, Englewood Cliffs, NJ, 2003.
[3] N. Ziviani, Projeto de Algoritmos com Implementaes em
Java e C++. Cengage Learning, 2006, 10: 8522105251.
[4] S. O. Rezende, Sistemas Inteligentes: Fundamentos e Aplicaes, 1st ed. RECOPE-IA Rede Cooperativa de Pesquisa em
Inteligncia Artifial, 2005, 9788520416839.
[5] T. Qian, Using genetic algorithm to solve sliding tile puzzles,
2007,
http://www.cs.oswego.edu/~qian/csc466/Ting%20-%
20GA.pdf visitado em 01/06/2011.
[6] P. T. Hong and E. AL, Applying genetic algorithms to game
search trees, Soft Computing, 2001.
[7] A. F. V. Machado, E. W. G. Clua, C. R. B. Bonin, G. M.
Novaes, and M. L. R. A. Filho, Estudo e implementao
de heursticas para otimizar os algoritmos aplicados a puzzle
games, Centro Federal de Educao Tecnolgica, Dep.
Informtica Industrial, MG, Brasil, Technical Report, 2008.
[Online]. Available: http://www.inf.pucminas.br/sbgames08/
EBooks/Proceedings-SBGames-Posters-2008-Final-EB.pdf
[8] M. S. Neubert, Anlise formal da complexidade de algoritmos
genticos, Masters thesis, Instituto de Informtica, Universidade Federal do Rio Grande do Sul, Abril 1998.