Você está na página 1de 111

UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE

CENTRO DE CINCIAS EXATAS E DA TERRA


DEPARTAMENTO DE INFORMTICA E MATEMTICA
APLICADA
PROGRAMA DE PS-GRADUAO EM SISTEMAS E
COMPUTAO
MESTRADO ACADMICO EM SISTEMAS E
COMPUTAO

O Problema do Hiker Dice em Tabuleiro Compacto: Um estudo


algortmico

Elder Gonalves Pereira

Natal - RN
2014

Elder Gonalves Pereira

O Problema do Hiker Dice em Tabuleiro Compacto: Um estudo


algortmico

Dissertao apresentada Universidade


Federal do Rio Grande do Norte, como
requisito parcial para a obteno do ttulo de
Mestre em Sistemas e Computao, rea de
Concentrao: Algoritmos Experimentais.

PPgSC Programa de Ps-Graduao em Sistemas e Computao


DIMAp Departamento de Informtica e Matemtica Aplicada
CCET Centro de Cincias Exatas e da Terra
UFRN Universidade Federal do Rio Grande do Norte

Orientador
Prof. Dr. Marco Csar Goldbarg

Natal - RN
2014

Catalogao da Publicao na Fonte. UFRN / SISBI / Biblioteca Setorial


Centro de Cincias Exatas e da Terra CCET.
Pereira, Elder Gonalves.
O problema do Hiker Dice em tabuleiro compacto: um estudo algortmico/
Elder Gonalves Pereira. - Natal, 2014.
111 f.: il.
Orientador: Prof. Dr. Marco Csar Goldbarg
Dissertao (Mestrado) Universidade Federal do Rio Grande do Norte.
Centro de Cincias Exatas e da Terra. Programa de Ps-Graduao em
Sistemas e Computao.
1. Algoritmos Dissertao. 2. Hiker Dice Dissertao. 3. Algoritmo
exato Dissertao. 4. Algoritmos heursticos Dissertao. I. Goldbag,
Marco Csar. II. Ttulo.

RN/UF/BSE-CCET

CDU: 004.021

Dissertao, sob o ttulo O Problema do HIker Dice em Tabuleiro compacto:


Um Estudo Algortmico banca examinadora como requisito parcial para obteno
do ttulo de Mestre em Sistemas e Computao da Universidade Federal do Rio
Grande do Norte

BANCA EXAMINADORA
____________________________________________
Prof. Dr. Marco Cesar Goldbarg (Orientador)
Centro de Cincias Exatas e da Terra
Departamento de Informtica e Matemtica Aplicada
UFRN

____________________________________________
Profa. Dra. Elizabeth Ferreira Gouvea
Centro de Cincias Exatas e da Terra
Departamento de Informtica e Matemtica Aplicada
UFRN

_____________________________________________
Profa. Dra. Iloneide Carlos de Oliveira Ramos
Examinadora externa ao Programa
Departamento de Estatstica
UFRN

____________________________________________
Prof. Dr. Henrique Pacca Loureiro Luna
Examinador externo ao Programa
UFAL - Universidade Federal de Alagoas

____________________________________________
Profa. Dra. Myriam Regattieri De Biase da Silva Delgado
Examinadora externa ao Programa
UTFPR - Universidade Tecnolgica Federal do Paran

Natal - RN
2014

RESUMO
O Hiker Dice foi um jogo proposto recentemente em um software projetado por Mara
Kuzmich e Leonardo Goldbarg. No jogo um dado responsvel pela construo de
uma trilha sobre um tabuleiro n x m. O dado ao visitar uma clula do tabuleiro
imprime (marca) a face que entra em contato com a superfcie. O jogo apresenta o
Problema do Caminho Hamiltoniano Simples Mximo Hiker Dice (CHS-HiDi) em
Tabuleiros Compactos de ordem N, esse problema ento caracterizado por
buscar um caminho hamiltoniano que maximize a soma dos faces do dado marcados
no tabuleiro. A pesquisa presentemente relatada, modela o problema atravs de
Grafos, e prope duas classes de algoritmos de soluo. A primeira classe,
pertencente aos algoritmos exatos, constituda por um algoritmo em backtracking
aparelhado com um retorno realizado atravs de regras lgicas e limite da melhor
soluo encontrada. A segunda classe de algoritmos constituda por
metaheursticas do tipo Computao Evolucionria, Busca Local Aleatorizada e
GRASP (Greed Randomized Adaptative Search). Para os algoritmos foram criados
trs operadores especficos da seguinte forma: de reestruturao, de recombinao
com duas solues e construtivo guloso aleatrio. O algoritmo exato foi testado em
tabuleiros 4x4 a 8x8 esgotando a possibilidade de tratamento computacional dos
casos maiores em virtude da exploso em tempo de processamento. Os algoritmos
heursticos foram testados nos tabuleiros 5x5 at 14x14. Segundo a metodologia de
avaliao utilizada, os resultados encontrados pelos algoritmos heursticos sugere
um melhor potencial de desempenho para o algoritmo GRASP.

Palavras Chaves: Hiker Dice, Algoritmo Exato e Algoritmos Heursticos.

ABSTRACT
The Hiker Dice was a game recently proposed in a software designed by Mara
Kuzmich and Leonardo Goldbarg. In the game a dice is responsible for building a trail
on an n x m board. As the dice waits upon a cell on the board, it prints the side that
touches the surface. The game shows the Hamiltonian Path Problem Simple
Maximum Hiker Dice (Hidi-CHS) in trays Compact Nth, this problem is then
characterized by looking for a Hamiltonian Path that maximize the sum of marked
sides on the board. The research now related, models the problem through Graphs,
and proposes two classes of solution algorithms. The first class, belonging to the
exact algorithms, is formed by a backtracking algorithm planed with a return through
logical rules and limiting the best found solution. The second class of algorithms is
composed by metaheuristics type Evolutionary Computing, Local Ramdomized
search and GRASP (Greed Randomized Adaptative Search). Three specific
operators for the algorithms were created as follows: restructuring, recombination
with two solutions and random greedy constructive.The exact algorithm was teste on
4x4 to 8x8 boards exhausting the possibility of higher computational treatment of
cases due to the explosion in processing time. The heuristics algorithms were tested
on 5x5 to 14x14 boards. According to the applied methodology for evaluation, the
results acheived by the heuristics algorithms suggests a better performance for the
GRASP algorithm.

Key Words: Hiker Dice, Exact Algorithm and Heuristic Algorithms.

LISTA DE FIGURAS
FIGURA 1 - MOVIMENTO DO DADO NO TABULEIRO DO JOGO HIKER DICE. ............................... 14
FIGURA 2 EXEMPLIFICAO DO DADO. ........................................................................................ 17
FIGURA 3 - JUMPS DIREITA ONDE AS FACES PROJETADAS OCUPAM AS SEGUINTES
POSIES: (A) POSIO (I-1, J-1); (B) POSIO (I-1, J+1); (C) POSIO (I+1,
J+1); E (D) POSIO (I+1, J-1). ................................................................................... 18
FIGURA 4 TRILHAS DO DADO SOBRE UM TABULEIRO. ............................................................... 19
FIGURA 5 EXEMPLO DE TABULEIRO 10X10, GRAFO GRADE 10X10 E CAMINHOS SIMPLES
HIKER DICE (HIDI). ....................................................................................................... 20
FIGURA 6 - EXEMPLOS DE RESTRIES. ........................................................................................ 21
FIGURA 7 - GRAFOS GRADE R7, 4 COM
OS VRTICES DEFINIDOS POR COORDENADAS:
GRAFO GRADE TETRGANO SOLIDO (A), GRAFO GRADE TETRGONO COM
BURACO (B).
23
FIGURA 8 - GRAFO GRADE COM CICLOS DIJUNTOS. ..................................................................... 24
FIGURA 9 - GRAFO GRADE ORIGINAL (A), E GRAFO GRADE AUXILIAR COM VRTICES E
ARESTAS FICTCIOS (B). ............................................................................................ 26
FIGURA 10 - GRAFO GRADE COM CICLOS DEFINIDOS (A), FUSO DOS CICLOS (B). ................ 26
FIGURA 11 EXEMPLO DE VRTICES TERMINAIS. ........................................................................ 27
FIGURA 12 EXEMPLO DE PONTO DE ISOLAMENTO. ................................................................... 29
FIGURA 13 EXEMPLO DE VRTICES ADJACENTES DA POSIO CORRENTE. ....................... 29
FIGURA 14 MARCA GRAFO 1. .......................................................................................................... 30
FIGURA 15 MARCA GRAFO 2. .......................................................................................................... 31
FIGURA 16 ESTRUTURA CRUZ........................................................................................................ 32
FIGURA 17 EXEMPLO DE ROLAMENTO DO DADO NA DIREO VERTICAL E
HORIZONTAL. ............................................................................................................... 33
FIGURA 18 EXEMPLO DE TABULEIRO E GRAFO GRADE 3X3. ................................................... 34
FIGURA 19 EXEMPLO DE MOVIMENTO DO DADO. ....................................................................... 35
FIGURA 20 - ELEMENTO DA ESTRUTURA PILHA. ............................................................................ 37
FIGURA 21 GRAFO GRADE 3 X 3 (A); CONSTRUO DO CAMINHO (B), (C), (D) E (E);
EXEMPLO DE RVORE DE ESTADO (F). ................................................................... 39
FIGURA 22 GRAFO GRADE 4X4 E SOLUO INICIAL (S*). ........................................................... 49
FIGURA 23 RELAO DE ADJACNCIA DO INTERVALO DE REESTRUTURAO NO
GRAFO GRADE 4X4. .................................................................................................... 50
FIGURA 24 SOLUO REESTRUTURADA. ..................................................................................... 50
FIGURA 25 EXEMPLO RECOMBINAO. ....................................................................................... 55
FIGURA 26 NOVO CAMINHO NO GRAFO GRADE 4X4. ................................................................. 56
FIGURA 27 EXEMPLO CONSTRUO PRIMEIRO NVEL. ............................................................. 60
FIGURA 28 EXEMPLO CONSTRUO SEGUNDO NVEL. ............................................................. 61
FIGURA 29 EXEMPLO CONSTRUO TERCEIRO NVEL. ............................................................ 62
FIGURA 30 - GRAFO (N, M). ................................................................................................................. 85
FIGURA 31 - EXEMPLO DE CAMINHO FECHADO EM UM GRAFO G. ............................................. 86
FIGURA 32 EXEMPLO DE UM GRAFO GRADE. .............................................................................. 87
FIGURA 33 - PRODUTO CARTESIANO ENTRE DOIS GRAFOS CAMINHOS RESULTA EM
GRAFO GRADE. ........................................................................................................... 87
FIGURA 34 GRAFO GRADE 3X3 EM MATRIZ E LISTA DE ADJACNCIA. .................................... 88

LISTA DE ALGORITMOS E PROCEDIMENTOS


ALGORITMO 1 ALGORITMO EXATO. .............................................................................................. 41
ALGORITMO 2 BUSCA LOCAL. ........................................................................................................ 43
ALGORITMO 3 - GRASP ADAPTADO COM OS OPERADORES: CONSTRUTIVO GULOSO
ALETORIO E REESTRUTURAO. .......................................................................... 45
ALGORITMO 4 GENTICO ADAPTADO COM OS OPERADORES: RECOMBINAO E
REESTRUTURAO. ................................................................................................... 47
PROCEDIMENTO 1 - REESTRUTURAO ......................................................................................... 51
PROCEDIMENTO 2 MODIFICAR INTERVALO ................................................................................. 53
PROCEDIMENTO 3 - RECOMBINAO .............................................................................................. 58
PROCEDIMENTO 4 CONSTRUO GULOSA ALEATRIA. ........................................................... 64
PROCEDIMENTO 5 CONSTRUO PRIMEIRO NVEL. .................................................................. 66
PROCEDIMENTO 6 CONSTRUO SEGUNDO NVEL. ................................................................. 67
PROCEDIMENTO 7 CONSTRUO TERCEIRO NVEL. ................................................................. 69
PROCEDIMENTO 8 REPARAO.DE CAMINHO ............................................................................ 71

LISTA DE TABELAS
TABELA 1 RESULTADOS EXATOS ENCONTRADOS. ................................................................... 73
TABELA 2 CASO DE TESTE: TABULEIRO 3X3. .............................................................................. 75
TABELA 3 - CONFIGURAES FILTRADAS PARA O BUSCA LOCAL NO TABULEIRO 8X8. ........ 78
TABELA 4 - CONFIGURAES FILTRADAS PARA O GRASP NO TABULEIRO 8X8. ..................... 79
TABELA 5 - CONFIGURAES FILTRADAS PARA O GENTICO NO TABULEIRO 8X8................. 80
TABELA 6 RESULTADOS HEURSTICOS. ....................................................................................... 82
TABELA 7 COLETA DE DADOS DAS CONFIGURAES APLICADA AO BUSCA LOCAL NO
TABULEIRO 8X8. .......................................................................................................... 92
TABELA 8 - COLETA DE DADOS DAS CONFIGURAES APLICADA AO GRASP NO
TABULEIRO 8X8. .......................................................................................................... 93
TABELA 9 - COLETA DE DADOS DAS CONFIGURAES APLICADA AO GENTICO NO
TABULEIRO 8X8. .......................................................................................................... 94

SUMRIO

INTRODUO .................................................................................................... 13
JOGO HIKER DICE .......................................................................................... 14

1.1
1.1.1

O PROBLEMA DO CAMINHO HAMILTONIANO SIMPLES MXIMO


HIKER DICE (CHS-HIDI) EM TABULEIROS COMPACTOS DE ORDEM N . 15
OBJETIVOS ..................................................................................................... 16

1.2
1.2.1

Geral ............................................................................................................. 16

1.2.2

Especficos .................................................................................................... 16
DIVISO DO TRABALHO ................................................................................ 16

1.3
2

CARACTERSTICAS DO HIKER DICE .............................................................. 17

O PROBLEMA DO CAMINHO HAMILTONIANO EM GRAFOS GRADE .......... 22

ESTRUTURAS E PROCEDIMENTOS PARA HIKER DICE ............................... 27

4.1

VRTICES TERMINAIS ................................................................................... 27

4.2

PONTO DE ISOLAMENTO .............................................................................. 27

4.3

VRTICES ADJACENTES DA POSIO CORRENTE DO CAMINHO .......... 29

4.4

MARCAO DO GRAFO................................................................................. 30

4.4.1

Marca Grafo 1 ............................................................................................... 30

4.4.2

Marca Grafo 2 ............................................................................................... 30

4.5

REPRESENTAO COMPUTACIONAL DE UMA SOLUO HIKER DICE .. 31

4.6

MOVIMENTO DE ROLAMENTO DO DADO SOBRE O TABULEIRO ............. 31

4.6.1

Estrutura Para Representao e Movimento do Dado .................................. 31

4.6.2

Movimento de Rolamento do Dado ............................................................... 33


ATUALIZAR O VETOR DE SOLUES .......................................................... 35

4.7
5

ABORDAGEM EXATA ....................................................................................... 37

ABORDAGEM HEURSTICA .............................................................................. 42

6.1

ALGORITMOS ADAPTADOS COM OS OPERADORES PROPOSTOS ......... 42

6.1.1

Busca Local ................................................................................................... 42

6.1.2

GRASP (Greedy Randomized Adaptive Search Procedure) ......................... 44

6.1.3

Algoritmo Gentico ........................................................................................ 45

6.2

OPERADORES ................................................................................................ 49

6.2.1

Procedimento Reestruturao ....................................................................... 49

6.2.2

Procedimento Recombinao ....................................................................... 55

6.2.3

Construtivo Guloso Aleatrio ......................................................................... 60

6.2.4
7

Procedimento de Reparao do Caminho Ramiltoniano ............................... 70

RESULTADOS .................................................................................................... 73

7.1

RESULTADO EXATO ...................................................................................... 73

7.2

REFINAMENTO DOS PARMENTROS PARA AS HEURSTICAS ................ 74

7.2.1

Metodologia para Refinamento dos Parmetros ........................................... 74

7.2.1.1

Exemplo de Faixa de Valores para os Parmetros .................................... 74

7.2.1.2

Exemplo de Filtragem das Configuraes.................................................. 74

7.2.1.3

Teste no-paramtrico de Kruskal-Wallis (1952) ....................................... 75

7.2.2

Ajuste dos Parmetros .................................................................................. 76

7.2.2.1

Busca Local................................................................................................ 77

7.2.2.2

GRASP....................................................................................................... 78

7.2.2.3

Gentico ..................................................................................................... 79

RESULTADOS HEURSTICOS ........................................................................ 81

7.3
7.3.1
8
8.1

Resultados dos Algoritmos ............................................................................ 81

CONCLUSO ..................................................................................................... 83
TRABALHOS FUTUROS ................................................................................. 84

APNDICE 1 - CONCEITOS BSICOS EM TEORIA DOS GRAFOS ..................... 85


APNDICE 2 - RESULTADOS EXATOS ................................................................. 89
APNDICE 3 - RESULTADOS DOS REFINAMENTOS DOS PARMENTROS ..... 92
APNDICE 4 - RESULTADOS HEURISTICOS DO BUSCA LOCAL ...................... 95
APNDICE 5 - RESULTADOS HEURISTICOS DO GENTICO............................ 100
APNDICE 6 - RESULTADOS HEURISTICOS DO GRASP.................................. 105
REFERNCIAS ....................................................................................................... 109

13

INTRODUO
Na Cincia da Computao existe uma ateno crescente relacionada aos

jogos de raciocnio logico que demonstram natureza combinatria. Por causa das
aplicaes prticas que muitos deles podem demostrar; como tambm, o
desenvolvimento de algoritmos computacionais com capacidade de enfrentar o
raciocnio humano com possibilidade de vitria.
O inicio das pesquisas relacionadas ao desenvolvimento de algoritmos
computacionais que confrontassem o raciocnio humano com alguma chance de
vitria, ocorreu na dcada de 90. Nessa poca, foi marcante a disputa no xadrez
entre o computador Deep Blue da IBM e ex-campeo Garry Kasparov. Na primeira
disputa, em um total de seis (6) jogos, em 1996, Deep Blue surpreende a todos ao
ganhar uma e empatar duas partidas contra Kasparov, entretanto, o computador da
IBM perdeu trs vezes. Na segunda disputa, no dia 11 de maio de 1997, o desafio foi
finalizado com duas vitrias e trs empates de Deep Blue, contra uma vitria de
Kasparov. Na cidade de New York entre os dias 11 e 18 de Novembro de 2003,
aconteceu mais uma disputa de Kasparov contra uma maquina, desta vez foi o
computador X3D Fritz, equipado por 4 processadores Intel Pentium Xeon com
2.8GHz. Nesta disputa, houve dois jogos empatados, uma vitria para Kasparov e
outra para computador X3D Fritz. Assim sendo, tornana-se evidente a capacidade
de certo algoritmo computacional confrontar o raciocnio humano com chance de
vitria (GOLDBARG M.; OLIVEIRA; GOLDBARG, E., 2011).
Um novo significado na popularizao dos jogos de raciocnio lgico
aconteceu na dcada de 90. Devido a evoluo computacional relacionada s
interfaces e modernos meios de mdia, muitos desses jogos comearam a ter sua
analise de complexidade de solues estudadas, como o Xadrez (FRAENKEL;
LICHTENSTEIN, 1981), Go (LICHTENSTEIN; SIPSER, 1980), Sokoban (DOR;
ZWICK, 1999), Soduko (YATO; SETA, 2003) Minesweeper (KAYE, 2000), Tantrix
(HOLZER, M.; HOLZER, W., 2004), Lemmings (CORMODE, 2004), Spiral Galaxies
(FRIEDMAN, 1992), Tertrix (HOOGEBOOM; KOSTERS, 2004), dentre outros.
Posto

isso,

torna-se

importante

desenvolvimento

de

pesquisas

relacionadas a analise de complexidade de solues dos jogos de raciocnio lgico.

14

Neste trabalho abordado um jogo de raciocnio lgico associado ao problema dos


caminhos hamiltonianos em grafos grade, denominado Hiker Dice.

1.1

JOGO HIKER DICE


O Hiker Dice foi um jogo proposto recentemente em um software projetado

por Mara Kuzmich e Leonardo Goldbarg. No jogo um dado responsvel pela


construo de uma trilha sobre um tabuleiro n x n. O dado aps ser posicionado em
uma casa (clula) do tabuleiro com uma configurao inicial conhecida realiza uma
sequncia de movimentos. Em cada casa visitada o dado imprime (marca) a face
inferior, precisamente a que entra em contato com a superfcie do tabuleiro. Ganha o
jogador que conseguir construir a trilha que apresente o maior somatrio das faces
do dado (GOLDBARG M.; GOLDBARG E., 2012).
Na Figura 1 (a) mostrado um dado localizado inicialmente na parte inferior
esquerda do tabuleiro, com a seguinte configurao: a face um (1) voltada para
baixo; a face seis (6) para cima; a face quatro (4) para a direita; a face dois (2)
voltada para frente; a face cinco (5) para trs e a face trs (3) para a esquerda. A
Figura 1(b) mostra um caminho hamiltoniano definido pelo movimento (rolamento) do
dado no tabuleiro cujas casas (clulas do tabuleiro) foram impressas (marcadas)
pela face inferior do dado ao entrar em contato com a superfcie do tabuleiro; nesse
caminho, as faces impressas no tabuleiro com soma igual a 32.
Figura 1 - Movimento do Dado no Tabuleiro do Jogo Hiker Dice.

15

1.1.1 O PROBLEMA DO CAMINHO HAMILTONIANO SIMPLES MXIMO HIKER


DICE (CHS-HIDI) EM TABULEIROS COMPACTOS DE ORDEM N
O presente trabalho aborda o Problema do Caminho Hamiltoniano Simples
Mximo Hiker Dice (CHS-HiDi) em Tabuleiros Compactos de ordem N.
Um caminho Hamiltoniano simples no tabuleiro Hiker Dice um caminho
que cobre todas as clulas do tabuleiro definido pelo movimento de rolamento do
dado (o deslocamento do dado segue o giro natural do cubo sobre a superfcie do
tabuleiro).
Basicamente o CHS-HiDi um caminho Hamiltoniano desenvolvido em um
grafo grade quadrado que maximiza o seu comprimento, sem que seja possvel, a
priori, conhecer o valor das arestas do caminho Hamiltoniano desenvolvido.
Denomina-se de tabuleiro compacto retangular ao tabuleiro retangular em
que todas as clulas podem ser ocupadas atravs de rolamentos realizados por um
dado posicionado inicialmente em qualquer clula do tabuleiro.
A complexidade do problema Hiker Dice ainda no foi definida.

16

1.2

OBJETIVOS

1.2.1 Geral
Construir classes de algoritmos de solues para o problema do Caminho
Hamiltoniano Simples Mximo (CHS-HiDi) em Tabuleiros Compactos de ordem n.

1.2.2 Especficos
1. Modelar o problema do CHS-HiDi atravs de grafos.
2. Criar um algoritmo exato para o problema do CHS-HiDi.
3. Criar operadores construtivos para o problema do CHS-HiDi, a fim de, adaptlos aos algoritmos de Busca Local, GRASP e Gentico.
4. Realizar experimentos computacionais com o algoritmo exato e, com os
algoritmos heursticos de Busca Local, GRASP e Gentico.

1.3

DIVISO DO TRABALHO
O restante do trabalho est dividido da seguinte forma: a seo 2 (dois),

apresenta as caractersticas do Hiker Dice; a seo 3 (trs), indica o problema do


caminho hamiltoniano em grafos grade; a seo 4 (quatro), exibe a abordagem
exata; a seo 5 (cinco), exibe a abordagem heurstica; a seo 6 (seis), mostra os
resultados experimentais e; na seo 7 (sete), apresenta a concluso e trabalhos
futuros.

17

CARACTERSTICAS DO HIKER DICE


Um dado um cubo que possui uma distribuio de nmeros em suas faces.

Tradicionalmente os dados apresentam a distribuio de pontos de 1 a 6, de fato


uma enumerao das faces. A configurao tradicional do dado apresenta os
valores 1 e 6, 4 e 3 e 5 e 2 localizados em faces opostas do cubo, como mostra a
representao planar do cubo na Figura 2 (a). No presente trabalho considera-se o
padro de distribuio de nmeros pelas faces do dado como uma varivel de
entrada do problema, todavia, quando nada for dito, a configurao tradicional ser a
considerada.
Figura 2 Exemplificao do dado.

(a). Representao plana das faces do dado

(b). Rolando o dado

Define-se um tabuleiro como uma grade de clulas em formato retangular


que pode suportar, via de regra, a realizao de vrios tipos de jogos lgicos.
Um dado se desloca de uma clula para outra atravs de um movimento.
So possveis trs tipos de movimento: Rolamento, Jump e Sjump.
O rolamento de um dado sobre um tabuleiro sempre se d sobre uma clula
vizinha e na direo do giro natural do cubo sobre a aresta da base voltada para a
clula que ser ocupada, em um movimento horizontal ou vertical, considerando
como as direes horizontal e vertical as laterais ortogonais do tabuleiro. A Figura 2
(b) exemplifica um rolamento.
Um jump do dado em um tabuleiro o movimento na diagonal das clulas
do tabuleiro como exemplificado na Figura 3. A clula central dos desenhos
representa a face inferior do dado. As quatro clulas laterais representam o
rebatimento sobre o plano horizontal das laterais do dado. A face superior, no caso
de valor 1, por simplicidade no representada. A face projetada uma das faces
laterais do dado e no adjacentes clula da diagonal considerada. O jump poder

18

utilizar uma das duas faces. O jump direita projeta a face no adjacente situada
direita em relao ao sentido de movimento do dado. O jump esquerda a face
projetada ser aquela situada esquerda. A Figura 3 exemplifica os jumps direita.
Figura 3 - Jumps direita onde as faces projetadas ocupam as seguintes posies: (a) posio (i-1, j1); (b) posio (i-1, j+1); (c) posio (i+1, j+1); e (d) posio (i+1, j-1).

O Sjump qualquer outro movimento que no ocupe clulas vizinhas


posio corrente do dado.
Considerando que o dado ao se movimentar em um tabuleiro imprima nesse
tabuleiro a sua face inferior e que permanecer em contato com a clula do
tabuleiro, o tabuleiro exibir uma sequncia de marcao na medida em que um
dado se movimentar sobre sua superfcie. Uma sequncia de movimentos forma
uma trilha do dado. A soma das marcaes da trilha constitui o comprimento da
trilha.
Uma trilha formada exclusivamente por rolamentos do dado denominada
de trilha simples.
A Figura 4 exemplifica, a partir de uma posio inicial ocupada por um dado
sobre um tabuleiro, presentemente representada pelo desenho do dado, trs
possveis trilhas simples. Uma situada esquerda da posio inicial do dado, outra a
direita e a ltima abaixo do dado.

19

Figura 4 Trilhas do dado sobre um tabuleiro.

O valor de uma trilha o somatrio dos pontos impressos nas clulas da


trilha, independentemente de serem remarcados.
Um caminho do dado em um tabuleiro consiste em uma sequncia de
movimentos do dado de forma que nenhuma posio do tabuleiro seja revisitada.
Um caminho formado exclusivamente por rolamentos dito caminho simples.
Seja um tabuleiro de clulas quadradas como mostra a Figura 5, pode-se
associar a esse tabuleiro o grafo G = (N, M). As clulas do tabuleiro so
representadas pelos vrtices e as arestas do grafo representam as relaes de
vizinhana entre as clulas do tabuleiro. Nesse grafo, denominado de grafo
tabuleiro, a aresta (i-j) representa a possibilidade de movimento do dado da clula i
para a clula j do tabuleiro. Considerando-se o dado assentado em uma clula inicial
do tabuleiro, define-se o valor do caminho de i ao vrtice j como a soma de todos os
valores das arestas pertencentes ao caminho i-j. Observe-se que, para o clculo de
comprimento do caminho i-j, no se computa, por conveno, o valor da face inferior
do dado na clula inicial, a clula i.
No grafo anteriormente definido os valores das arestas somente podero ser
determinados quando for conhecida a sequncia de rolamento do dado.
O valor ltimo de impresso em qualquer caminho ou trilha somente pode
ser computado aps serem conhecidos os movimentos que antecederam o
movimento. Consequentemente, o grafo tabuleiro do Hiker Dice no possui
valorao fixa de arestas. A Figura 5 (c) exemplifica, no grafo G da Figura 5 (a), o

20

desenvolvimento de dois caminhos possveis a partir da posio ocupada pelo dado


da Figura 5 (b).
Quando um rolamento realiza a visita sequencial de todas as faces do dado
em uma certa direo dito rolamento completo. Para os dados tradicionais, a soma
de cada par de faces opostas igual a 7, no rolamento completo impresso sobre o
tabuleiro dois pares de faces opostas; desta forma, o comprimento de um rolamento
completo ser constante e igual a 14.
Figura 5 Exemplo de tabuleiro 10x10, grafo grade 10x10 e caminhos simples Hiker Dice (HiDi).

(a). Grafo grade 10x10

(b). Caminhos no tabuleiro 10x10


2
6

5
1

4
1
3
6

(c). Representao dos caminhos da figura 6b

Circunstancialmente o problema pode exibir restries ao movimento. Uma


restrio de movimento constituda por um conjunto de atributos que devem ser
satisfeitos por essas operaes na formao de qualquer trilha.
Os atributos de movimento podem se referir a certas clulas do tabuleiro,
sendo ento definidos como restries de tabuleiro. Uma restrio de tabuleiro
comum a impossibilidade de ocupao da clula. Outra restrio a especificao
de um ou mais valores de impresso no aceitvel. A Figura 6 (a) exemplifica em
negrito as clulas de visita proibida. A Figura 6 (b) exibe exemplos de valores

21

proibidos para a face de rolamento. A letra O significa que a clula referida no


aceita a visita de uma face mpar. A letra E significa que a visita de uma face par
proibida.
Figura 6 - Exemplos de Restries.

(a). No grafo grade o dado no pode visitar as clulas


em cor preta.

(b). No grafo grade as clulas com valores numericos e


as clulas com letras representam restries impostas
ao dado.

De modo semelhante qualquer trilha pode ser sujeita a restries de


formao envolvendo limites para valores e tipos de movimentos (por exemplo,
nmero mximo ou mnimo de algum tipo de movimento, etc). Essas restries so
denominadas de formao.

22

O PROBLEMA DO CAMINHO HAMILTONIANO EM GRAFOS GRADE


O problema de encontrar caminhos ou ciclos que passassem por todos os

vrtices em um grafo qualquer sem admitir vrtices repetidos, foi proposto em 1856
por Thomas Penyngton Kirkman. No trabalho (Kirkman, 1856) foram analisadas as
condies em tipos de slidos da existncia de caminhos e ciclos que no
repetissem vrtices ou arestas (LAPORTE, 2006; GROPP, 2006).
Um pouco mais tarde o problema de encontrar os caminhos que passassem
por todos os vrtices do grafo iniciando e terminando no mesmo vrtice foi
denominado de Hamiltoniano devido ao jogo Around the World criado em 1857 por
Willian Rowan Hamilton (GOLDBARG, M.; GOLDBARG, E., 2012). O jogo tinha a
forma de um dodecaedro1, no qual cada vrtice representava uma cidade importante
na poca. O objetivo era encontrar um caminho passando por todas as cidades de
forma que iniciasse e terminasse na mesma cidade e nunca repetisse uma cidade j
visitada, ento uma soluo desse jogo passou a ser chamada de ciclo
Hamiltoniano.
Segundo Goldbarg e Goldbarg (2012, p. 217), um grafo dito hamiltoniano,
se possui um ciclo hamiltoniano; um grafo dito semi-hamiltoniano se possui um
caminho hamiltoniano.
O Problema do Caminho Hamiltoniano Simples Mximo HiDi em Tabuleiros
Compactos (CHS-HiDi) desenvolvido em grafos grade pois esse o tipo de grafo
formado pelos rolamentos do dado.
Um dos primeiros estudos relacionados a Caminhos Hamiltonianos em grafo
grade foi apresentado em Luccio e Mugnia (1978), cujos autores tentavam resolver o
problema do caminho hamiltoniano em algumas classes de grafos, inclusive os
grafos grade retangulares.
Denotando por G um grafo infinito no qual os vrtices so todos os pontos
do plano com coordenadas inteiras, dois vrtices distintos so conectados se e

Slido de doze faces. Disponvel em: http://www.dicionariodoaurelio.com/Dodecaedro.html.

23

somente se a distancia Euclidiana entre eles igual a um (1). O grafo grade R(m, n)
unicamente um subgrafo induzido de G, onde o conjunto de vrtices V(R(m, n)) =
{v: 1 Vx m e 1 Vy n} so definidos pelas coordenadas no plano cartesiano.
(ITAI et al., 1982).
De acordo com Weisstein (2013), nesse tipo de grafo a quantidade de
vrtices pode ser encontrada pela equao mn e a quantidade de arestas pela
equao (m-1)n + (n-1)m = 2mn - m - n.
Na Figura 7 (a) e (b) so exemplificados os grafos grade R7,4 sem buraco e
com buraco (com um conjunto de vrtices ausentes), nesses grafos os vrtices pode
ser localizados pelas coordenadas inteiras (Vx, Vy) definidas no plano cartesiano.
Como exemplo, o vrtice de forma quadrada est localizado na coordenada V(4, 3)
e, o vrtice triangular est localizado na coordenada V(5, 2). Segundo as definies
relatadas no trabalho de Weisstein (2013), o grafo da Figura 7 (a), apresenta pelas
equaes um total de 28 vrtices e precisamente 45 arestas.
Figura 7 - Grafos Grade R7, 4 com os vrtices definidos por coordenadas: Grafo Grade Tetrgano
Solido (a), Grafo Grade Tetrgono com Buraco (b).

Fonte: Adaptado de Weisstein (2013).

Zamfirescu e Zamfirescu (1992), disponibilizaram as condies necessrias


para um grafo grade slido ser hamiltoniano. Itai et al. (1982) provaram que o
problema do caminho ou ciclo hamiltoniano para a classe de grafo grade slido
NP-Completo.
Para o problema do ciclo ou caminho hamiltoniano sobre os grafos grade
tetrgonos podem ser usadas algumas propriedades importantes: o grafo grade
planar (pode ser desenhado em um plano R2 de forma que suas arestas no se
cruzem); o grafo grade bipartido (os vrtices do grafo podendo ser particionados

24

em dois conjuntos, onde cada aresta apresenta seus vrtices terminais em conjuntos
diferentes); o maior grau de um vrtice no grafo ser 4 (SALMAN, 2005). No
Apndice 1 so mostradas algumas definies bsicas.
Alguns autores estabelecem algoritmos para a enumerao dos diferentes
caminhos hamiltonianos em grafos grade. Kwong e Rogers (1994) apresentam um
mtodo matricial de contagem. Stoyan e Strehl (1996) geram funes para a
enumerao dos caminhos hamiltonianos em grafos grades com uma das
dimenses menor ou igual a 6.
Lenhart e Umans (1997) apresentaram um algoritmo para encontrar ciclos
hamiltonianos em grafos grade usando a tcnica de fuso de ciclo. Primeiro, o
algoritmo proposto encontra um conjunto de ciclos disjuntos que cobrem exatamente
os vrtices do grafo G, onde cada subgrafo nesse conjunto apresenta os vrtices
com grau dois. Segundo, o algoritmo faz a fuso dos componentes encontrados com
finalidade de formar um ciclo hamiltoniano. Ento, repetidamente a transformao
identifica um conjunto de ciclos que reduz o nmero de componentes e em seguida
realiza a fuso dos componentes. Esse processo encontra um ciclo hamiltoniano ou
simplesmente termina com mltiplos componentes. A Figura 8 exemplifica os ciclos
encontrados em grafo grade.
Figura 8 - Grafo Grade com Ciclos Dijuntos.

Fonte: Adaptado de Lenhart & Umans (1997).

Chen et al. (2002) apresentaram um algoritmo para a construo de


caminhos ou ciclos hamiltonianos entre dois vrtices em uma malha retangular com
tamanho horizontal m e tamanho vertical n. Primeiro, o algoritmo particiona toda a
malha em um nmero constante de componentes de malhas menores (submalhas).

25

Segundo, o algoritmo constri em cada submalha um caminho ou ciclo hamiltoniano


que depender unicamente da dimenso que foi atribuda para a submalha. E
finalmente, o algoritmo junta todos os caminhos ou ciclos hamiltonianos criados nas
submalhas em um nico componente. Apresenta ao final um caminho ou ciclo
hamiltoniano, ou simplesmente vrios componentes no conectados.
Islam et al. (2007) demonstram que o problema do ciclo hamiltonano em
grafos grade compactos hexagonais2 (categoria de grafos grades apresentam faces
com seis lados) NP-Completo.
Koromilas (2011) apresentou um trabalho que aplica as tcnicas de fuso de
ciclos, mas usando a reduo de emparelhamento (matching) para melhorar a busca
do ciclo hamiltoniano. A definio de emparelhamento apresentada no Apndice 1.
O algoritmo primeiro constri um grafo grade auxiliar do grafo grade original usando
a seguinte regra: (i) dois vrtices fictcios so adicionados em cada aresta do grafo
e, (ii) um vrtice clone criado para cada vrtice original, o vrtice clone conectado
aos vrtices fictcios adjacentes ao vrtice original. Como mostram as Figura 9 (a) e
(b). Um emparelhamento no grafo auxiliar apresenta um conjunto de ciclos
hamiltonianos no grafo original, se o emparelhamento no pode ser obtido, ento
no existe um conjunto de ciclos hamiltonianos vlidos para serem fundidos no grafo
grade original, e assim, no pode encontrar um ciclo hamiltoniano.

Polgono que tem seis ngulos e, por conseguinte, seis lados. Disponvel em:

http://www.dicio.com.br/hexagono/

26

Figura 9 - Grafo grade original (a), e grafo grade auxiliar com vrtices e arestas fictcios (b).

Fonte: Adaptado de Koromilas (2011).

O emparelhamento apresentado no grafo auxiliar ser usado para o conjunto


de ciclos hamiltonianos que comea a construo dos caminhos com base nas
arestas tracejadas entre os vrtices fictcios. As Figura 10 (a) e (b) mostram o grafo
dividido pelo conjunto de ciclos hamiltoniano, e o ciclo hamiltoniano definido pela
fuso dos ciclos.
Figura 10 - Grafo Grade com Ciclos Definidos (a), Fuso dos Ciclos (b).

Fonte: Adaptado de Koromilas (2011).

27

4
4.1

ESTRUTURAS E PROCEDIMENTOS PARA HIKER DICE


VRTICES TERMINAIS
Um Caminho Hamiltoniano em um grafo grade ter no final da construo

dois vrtices terminais, um vrtice inicial e um vrtice final, ambos com grau 1 (um).
Sendo assim, o Procedimento Vrtices Terminais tem como funo manter um
controle sobre a quantidade de vrtices no grafo grade com grau igual a um (1).
Na Figura 11 (a), os vrtices terminais para o caminho (0-3-4) j existem no
grafo G, os vrtices 0 e 6.
O procedimento tem como entrada um vrtice (v), o grafo G (matriz de
adjacncia) e como sada, uma condio verdadeira (para o vrtice v sendo vivel)
ou falsa (para o vrtice v sendo no vivel).
Para o caminho, na Figura 11 (a), supondo o vrtice (5) passado como
entrada, o procedimento resultar o caminho (0-3-4-5) no grafo (G); na Figura 11 (b),
o caminho construdo resultou no grafo G, o vrtice um (1) com grau 1.
Logo, o procedimento ao adicionar o vrtice 5 retorna uma condio falsa;
visto que o grafo G apresenta alm dos vrtices 0 e 6, o vrtice um (1) com grau
igual a 1.
Figura 11 Exemplo de Vrtices Terminais.

4.2

PONTO DE ISOLAMENTO
Os pontos de isolamento tm como funo inibir a construo do Caminho

Hamiltoniano no grafo G. Na Figura 12 (b) apresentado um caminho definido pelos


vrtices 0-3-4-7. Se a construo do caminho (0-3-4-7) continuar no vrtice 6 ou 8, a

28

sequncia no resultar um Caminho Hamiltoniano; dessa forma, o vrtice 7 se


tornou invivel para construo do Caminho Hamiltoniano.
No exemplo da Figura 12 (a), o Procedimento Ponto de Isolamento tem
como entrada o vrtice (7), um grafo G (matriz de adjacncia), uma copia do
caminho (0-3-4) e como sada, uma condio verdadeira ou falsa.
Os passos so os seguinte:
1. Adicionar o vrtice (7) ao caminho (0-3-4), como mostra a Figura 12(b);
2. Calcular o nmero de vrtices adicionados ao caminho. No caso da Figura
12 (b), apresenta um total de quatro (4) vrtices;
3. Aplicar uma Busca em Largura, a partir de algum vrtice adjacente ao
ltimo vrtice adicionado ao caminho (0-3-4-7); a busca no pode explorar
os vrtices do caminho (0-3-4-7);
4. Observe a Figura 12 (b), se a Busca em Largura comear no vrtice 8, a
busca explora os vrtices (8, 5, 2 e 1), um total de quatro (4) vrtices; do
contrario, comeando no vrtice 6, a busca explora apenas o vrtice 6, um
total de um (1) vrtice;
5. Calcular a expresso (n_vertices = total_caminho + total_busca_largura).
No exemplo da Figura 12 (b), a busca em largura pode explorar no
mximo 4 vrtices (total_busca_largura = 4), o caminho apresenta um
total de 4 vrtices (total_caminho = 4); logo, a expresso resulta
(n_vertices = 8);
6. Fazer comparao entre o nmero de vrtices de um Caminho
Hamiltoniano no grafo tabuleiro 3x3 (n_vertice_caminho_hamiltoniano = 9)
e o nmero de vrtices (n_vertices = 8). Se verdade, a expresso
(n_vertices == n_vertice_caminho_hamiltoniano), a condio verdadeira
retornada, e o vrtice (7) no causa isolamento; do contrrio, a condio
falta tornada, e o vrtice (7) causa isolamento.

29

Figura 12 Exemplo de Ponto de Isolamento.

4.3

VRTICES ADJACENTES DA POSIO CORRENTE DO CAMINHO


O grafo grade usado para representar o tabuleiro define inicialmente as

adjacncia entre os vrtices com o valor 1, como mostra a Figura 13 (a). No decorre
da construo do caminho no grafo, as arestas que fazem parte do caminho vo
sendo marcadas com -1 e com 0, as arestas que no fazem parte do caminho.
A Figura 13 (b) exemplifica um caminho definido pelos vrtices 0-3-4, as
arestas nesse caminho so marcadas com valor (-1) e, as arestas 0-1 e 3-6 so
removidas, marcadas com valor (0).
O Procedimento Vrtices Adjacentes da Posio Corrente no Caminho tem
como entrada um vrtice (v), um grafo G (matriz de adjacncia) e como sada, uma
lista com os vrtices adjacentes ao vrtice (v) no grafo G, cujas arestas tenham
marcao com valor (1).
No exemplo da Figura 13 (b), supondo o vrtice (4) passado como entrada, o
procedimento retornar uma lista com os vrtices (1, 5 e 7), apenas as adjacncias
com arestas com marcao igual a 1.
Figura 13 Exemplo de Vrtices Adjacentes da Posio Corrente.

30

4.4

MARCAO DO GRAFO

4.4.1 Marca Grafo 1


O Procedimento Marca Grafo 1 tem como entrada um grafo G (matriz de
adjacncia), um vetor de inteiros (v_caminho) que representa uma copia do caminho
em construo e como sada, o grafo G marcado com as posies do caminho.
O algoritmo realiza os seguintes passos:
1. Definir o vrtice (v1) como o penltimo vrtice do vetor (v_caminho);
2. Definir o vrtice (v2) como o ltimo vrtice do vetor (v_caminho);
3. Marcar a aresta (v1-v2) com valor (-1);
4. Remover as arestas do vrtice (v1) que no fazem parte do caminho.
No exemplo da Figura 14, faa o vrtice (v1 = 0) e vrtice (v2 = 3). A aresta
(v1-v2) marcada com valor (-1). E as arestas do vrtice (v1) que no fazem parte
do caminho so removidas (marcadas com valor 0), nesse caso apenas a aresta (01).
Figura 14 Marca grafo 1.

4.4.2 Marca Grafo 2


O Procedimento Marco Grafo 2 tem como entrada um grafo G (matriz de
adjacncia), um vetor de inteiros (v_caminho) que representa uma copia do caminho
em construo e como sada, o grafo G marcado.
O algoritmo realiza os seguintes passos:
1. Definir o vrtice (v1) como o penltimo vrtice do vetor (v_caminho);
2. Definir o vrtice (v2) como o ltimo vrtice do caminho (v_caminho);
3. Marcar a aresta (v1-v2) com valor 1;

31

4. Marcar as arestas entre vrtice (v1) e seus vrtices adjacentes que no


fazem parte do caminho com valor 1;
No exemplo da Figura 15 (a), faa o vrtice (v1 = 3) e vrtice (v2 = 4). A
aresta (v1-v2) marcada com (1). E as arestas entre o vrtice (v1) e seus vrtices
adjacentes que no fazem parte do caminho so marcadas com valor (1).
Figura 15 Marca grafo 2.

4.5

REPRESENTAO COMPUTACIONAL DE UMA SOLUO HIKER DICE


Neste trabalho uma soluo Hiker Dice representada por um vetor de

inteiros para guardar os vrtices do Caminho Hamiltoniano; um vetor de inteiros para


guardar as faces do dado impressas sobre o Caminho Hamiltoniano e; uma varivel
numerica para guardar o somatrio das faces.

4.6

MOVIMENTO DE ROLAMENTO DO DADO SOBRE O TABULEIRO

4.6.1 Estrutura Para Representao e Movimento do Dado


A estrutura cruz, na Figura 16 (b), usada para representar o dado no
tabuleiro Hiker Dice. Essa estrutura define os valores das faces do dado de acordo
com sua configurao corrente no tabuleiro. Dependendo do rolamento do dado
sobre o tabuleiro a estrutura cruz faz algumas permutaes dos valores das faces do
dado.

32

Figura 16 Estrutura cruz.

O rolamento do dado no tabuleiro acontece da seguinte forma: imaginemos


um dado em certa localizao no tabuleiro com uma configurao inicial conhecida,
como mostra a Figura 17 (a), a partir deste estado inicial, o dado poder fazer um
rolamento na vertical (indo para cima ou para baixo da posio corrente), ou na
horizontal (indo para a esquerda ou direita da posio corrente).
A Figura 17 exemplifica o rolamento sobre um tabuleiro:
Indo para cima da posio corrente, o dado parte da posio com a
configurao inicial, como na Figura 17 (b), e faz algumas regras de
permutao para chegar a prxima configurao, como na Figura 17 (c).
A posio trs de valor 5 recebe o valor 6; a posio cima de valor 6
recebe o valor 2; a posio frente de valor 2 recebe o valor 1 e a posio
baixo de valor 1 recebe o valor 5;
Indo para baixo da posio corrente, o dado parte da posio com a
configurao inicial, como na Figura 17 (b), e faz algumas regras de
permutao para chegar a prxima configurao, como na Figura 17 (d).
A posio trs de valor 5 recebe o valor 1; a posio cima de valor 6
recebe o valor 5; a posio frente de valor 2 recebe o valor 6 e a posio
baixo de valor 1 recebe o valor 2;
Indo para esquerda da posio corrente, o dado parte da posio com a
configurao inicial, como na Figura 17 (b), e faz algumas regras de
permutao para chegar a prxima configurao, como na Figura 17 (e).
A posio esquerda de valor 3 recebe o valor 6; a posio direita de valor
4 recebe o valor 1; a posio cima de valor 6 recebe o valor 4 e a posio
baixo de valor 1 recebe o valor 3;

33

Indo para direita da posio corrente, o dado parte da posio com a


configurao inicial, como na Figura 17 (b), e faz algumas regras de
permutao para chegar a prxima configurao, como na Figura 17 (f). A
posio esquerda de valor 3 recebe o valor 1; a posio direita de valor 4
recebe o valor 6; a posio cima de valor 6 recebe o valor 3 e a posio
baixo de valor 1 recebe o valor 4.

Figura 17 Exemplo de rolamento do dado na direo vertical e horizontal.

Em uma linguagem de programao orientada a objetos a estrutura cruz


pode facilmente ser representada por uma classe; as faces do dado sendo os
atributos e, os movimentos do dado sobre tabuleiro representados pelos mtodos da
classe (responsveis em fazer as permutaes das faces para cada sentido de
movimento na horizontal ou vertical).

4.6.2 Movimento de Rolamento do Dado


O tabuleiro Hiker Dice para o escopo desse trabalho apresenta dimenso n x
n, onde acontecem os movimentos do dado e marcao de suas faces. As Figura 18
(a) e (b) exemplificam um Tabuleiro e seu Grafo Grade correspondente, ambos com
dimenso 3x3. O Apndice 1 mostra algumas estruturas para representar o Grafo
Grade.

34

Figura 18 Exemplo de tabuleiro e grafo grade 3x3.

O Procedimento Rolamento do Dado tem como entrada um grafa grade G,


um vetor de inteiros com um copia do caminho sobre o grafo grade G, e como sida,
apresenta um vetor de inteiros com as faces do dado que seriam impressas
(marcadas) sobre o caminho no tabuleiro e o somatrio das faces impressas.
O tabuleiro Hiker Dice representado pelo grafo grade que segui um padro
de rotulao nos vrtices igual a Figura 18 (b); nesse grafo grade, os vrtices so
rotulados crescentimente da esquerda para direita com valores inteiros a partir do
vrtice localizado no canto superior esquerdo do grafo grade G.
Supondo o caminho (0-1-4-6) apresentado na Figura 19 (a), e supondo
tambm o dado localizado sobre o vrtice 0 do grafo grade, e com a configurao
inicial conhecida, na Figura 19 (b), teremos o seguinte movimento de rolamento do
dado sobre o caminho:
No movimento para direita, o dado sempre se movimenta do vrtice sobre
a posio corrente para um vrtice adjacente que maior em uma
unidade; no exemplo, na Figura 19 (a), o dado sobre o vrtice 0 se
movimenta para o vrtice 1; aps o movimento, o dado muda para a
configura da Figura 19 (c);
No movimento para baixo, o dado sempre se movimenta do vrtice sobre
a posio corrente para um vrtice adjacente que maior em mais de
uma unidade; no exemplo, na Figura 19 (a), o dado sobre o vrtice 1 se
movimenta para o vrtice 4; aps o movimento, o dado muda para a
configura da Figura 19 (d);
No movimento para esquerda, o dado sempre se movimenta do vrtice
sobre a posio corrente para um vrtice adjacente que menor em uma

35

unidade; no exemplo, na Figura 19 (a), o dado sobre o vrtice 4 se


movimenta para o vrtice 3; aps o movimento, o dado muda para a
configura da Figura 19 (e);
No movimento para cima, o dado sempre se movimenta do vrtice sobre a

posio corrente para um vrtice adjacente que menor em mais de uma


unidade.
Figura 19 Exemplo de movimento do Dado.

4.7

ATUALIZAR O VETOR DE SOLUES


O Procedimento Atualizar o Vetor de Solues tem como entrada o vetor

de solues (v_solucao) e a nova soluo construda (nova_s) e como sada, o vetor


de solues atualizado. O

procedimento

realiza

uma

das

trs

regras

para

atualizao:
1. Verificar se o vetor de solues (v_solucao) est vazio; caso verdade, a
nova soluo (nova_s) adicionada ao vetor e o procedimento finalizado;
2. Verificar se o valor objetivo da nova soluo (nova_s) igual aos valores
objetivos das solues do vetor (v_solucao); caso verdade, a nova

36

soluo (nova_s) adicionada ao vetor (v_solucao) e o procedimento


finalizado;
3. Verificar se o valor objetivo da nova soluo (nova_s) melhor que os
valores objetivos das solues do vetor (v_solucao); caso verdade, as
solues do vetor (v_solucao) so removidas, a nova soluo
adicionada ao vetor e o procedimento finalizado.

37

ABORDAGEM EXATA
O algoritmo exato para o problema Hiker Dice um Backtracking usando

uma estrutura pilha. Cada elemento da pilha apresenta dois compartimentos para
guardar informao do caminho em construo. A Figura 20 exemplifica um
elemento da pilha. O primeiro, guarda um vrtice referente ao caminho em
construo no tabuleiro (parte em amarelo); o segundo, guarda uma lista referente
s ramificaes (vizinhos) do vrtice escolhido (parte em azul).

Figura 20 - Elemento da estrutura pilha.

Passos do algoritmo:
1. Adicionar como primeiro elemento na pilha um vrtice do grafo que
represente o incio do caminho na parte amarela e suas ramificaes
(vizinhos), na parte em azul. Depois, sero realizados os passos
seguintes at a pilha ficar vazia;
2. Verificar se a pilha no est vazia para continuar o procedimento no
passo 3. Se estiver, finalizar procedimento no passo 9;
3. Verificar se a lista do topo da pilha maior que zero. Se for o caso, devese fazer o passo 4; caso contrrio, o desempilhamento (passo 8);
4. Selecionar um vrtice presente na lista do topo da pilha; depois, marc-lo
como vizitado;
5. Verificar se o vrtice selecionado, no passo 4, no pertence ao caminho
que est sendo construdo, no cause isolamentos de pontos no grafo e
mantenha o controle de pontos terminais (ver seo 4);

38

6. Se verdadeiro, o passo 5, adicionar como prximo elemento da pilha o


vrtice selecionado no passo 4 na parte amarela, e seus vizinho(s) na
parte azul;
7. Verificar se a parte amarela da pilha j apresenta um caminho
hamiltoniano no grafo. Em caso verdadeiro, construir uma soluo com o
rolamento do dado no caminho construdo;
8. Desempilhar um elemento na pilha; depois, continua no passo 2;
9. Finalizar execuo.
Supondo que o caminho comece na posio 0 (zero) do grafo da Figura 21
(a), tem-se, a parti desse vrtice, as opes de ir para a posio 1 e 3. Ento,
adicionamos o primeiro elemento na pilha, o vrtice 0 (zero) na parte amarela e os
vrtices 1 e 3 na parte em azul, como mostra a Figura 21 (b).
Em seguida, o algoritmo adiciona o segundo elemento. O algoritmo verifica
se a lista do topo da pilha, como mostra a Figura 21 (b), no est vazia; se
verdadeiro, o primeiro elemento da lista selecionado, o vrtice 1, e obedecendo
condio de viabilidade (ver seo 4) adicionado na parte amarela da pilha e seus
vizinhos, os vrtices 2 e 4, sero adicionados na parte em azul, como mostra a
Figura 21 (c).
O empilhamento na estrutura ser realizado at o algoritmo no conseguir
adicionar mais elementos na pilha, como mostra a Figura 21 (d), nesse momento a
parte amarela da pilha define um Caminho Hamiltoniano. Como a lista do topo da
pilha est vazia o algoritmo comea a fazer alguns desempilhamentos at encontrar
o primeiro elemento na pilha cuja lista no seja vazia.
Na Figura 21 (e), os elementos da pilha selecionados em vermelhos so
todos removidos no desempilhamento por terem listas vazias; depois, o
empilhamento comea novamente ao encontrar um elemento na pilha cuja lista no
seja vazia.
O caminho (definido pela parte amarela da estrutura pilha no exemplo da
Figura 21 (d)) exemplificado em uma rvore de estado, na Figura 21 (f). As aresta
em negrito definem o direcionamento do caminho, as arestas tracejadas definem as
opes de direcionamento de outros possveis caminhos.

39

Figura 21 Grafo Grade 3 x 3 (a); Construo do caminho (b), (c), (d) e (e); Exemplo de rvore de
Estado (f).

O Algoritmo 1 tem como entrada um Grafo Grade G que representa o


tabuleiro e como sada, apresenta uma ou mais de uma soluo 3. A linha 1 declara
uma estrutura tipo pilha. A linha 2 define o primeiro vrtice do grafo que ser
adicionado ao caminho, nesse caso o vrtice 0 (zero). A linha 3 executa um
procedimento para retornar a lista de vrtices adjacentes ao vrtice (v)
(procedimento disponvel na seo 4.3). A linha 4 adiciona na pilha o vrtice (v) no
primeiro compartimento e a lista com vrtices adjacentes (lista_v), no segundo
compartimento.

Uma soluo representada por dois vetores de inteiros, um para o caminho, outro para

as faces do dado e uma variavel nmerica para o somatrio das faces.

40

As linhas de nmeros 5 a 25 faro a busca de todas as solues para o


grafo que est sendo analisado. A linha 5 dar continuidade a busca das solues
se a pilha no estiver vazia. A linha 6, verificar a condio de empilhamento e
desempilhamento. O empilhamento ser feito entre as linhas 7 e 13; e o
desempilhamento, entre as linhas 20 e 23.
Caso a condio de empilhamento seja verdadeira, a linha 7 executa a
seleo do primeiro vrtice na lista do topo da pilha. A linha 8 remove da lista do
topo da pilha o vrtice selecionado, impede a seleo de vrtices repetidos em
iteraes futuras. A linha 9 verifica as condies de viabilidade do vrtice
selecionado (disponvel na seo 4). A linha 10 retorna os vizinhos do vrtice (v) e a
linha 11, adiciona o prximo elemento na pilha. Na linha 12, o grafo marcado com
o procedimento (descrito na seo 4.4.1). Nas linhas 9, 12, 16 e 21, o procedimento
(retorna_caminho( )) retorna um vetor de inteiros correspondente ao caminho
definido pela parte amarela da pilha.
As linhas de nmeros 14 a 18 faro a construo de uma soluo. A linha 14
verifica se o tamanho da pilha igual a quantidade vrtices do grafo; caso verdade,
a linha16 executa o procedimento (rolamento_dado(), disponvel na seo 4.6) para
construir uma soluo com base no caminho. A linha 16 executa o procedimento
(atualiza_solucoes(), disponvel na seo 4.7) para atualizar o vetor de solues.
E, as linhas de nmeros 20 a 23 faro o desempilhamento. Na linha 21, o
grafo marco com o procedimento da seo 4.4.2.

41

Algoritmo 1 Algoritmo Exato.

Exato_HikerDice ( )
Entrada: G(V, A)
Sada: v_solucao (vetor de solues)
0

// Inicio

Pilha pilha

v0

lista_v vertices_adjacentes (v, G)

pilha.add(0, lista_v)

Equanto(pilha ) faa

Se (pilha.topo.lista > 0) ento

v pilha.topo.lista.ponto_frente

pilha.topo.ponto_frente_remove

Se (ponto_isolamento (v, retorna_caminho(pilha), G) == T e


vertices_terminais(v, retorna_caminho(pilha), G) == T)

10

lista_v vertices_adjacentes (v, G);

11

pilha.add(v, lista_v)

12

marca_grafo1(G, retorna_caminho(pilha))

13

Fim_se

14

Se (pilha.tamanho == |V(G)|) faa

15

Solucao nova_s

16

nova_s rolamento_dado(retorna_caminho(pilha))

17

v_solucao atualizar_solucoes(v_solucao, nova_s)

18

Fim_se

19

Contrario

20

Se (pilha )) faa

21

marca_grafo2(G, retorna_caminho(pilha))

22

pilha.desempilhar_elemento

23
24

Fim_se
Fim_se

25 Fim_enquanto

42

ABORDAGEM HEURSTICA
Na seo 6.1, sero apresentados os Algoritmos Heursticos e na seo 6.2,

os operadores propostos para o problema Hiker Dice.

6.1

ALGORITMOS ADAPTADOS COM OS OPERADORES PROPOSTOS

6.1.1 Busca Local


Um algoritmo de Busca Local define para cada soluo uma vizinhana de
solues que apresentam caractersticas muito prximas da soluo corrente. O
algoritmo analisa na vizinhana a soluo com melhor valor objetivo (para um
problema de maximizao ou minimizao). Se tal soluo vizinha for encontrada,
torna-se a nova soluo corrente.
Um algoritmo de Busca Local inicia com uma soluo arbitrria e termina em
um mnimo local, onde no mais possvel qualquer tipo de melhoria. Pode-se
utilizar a Busca Local de melhor movimento, que substitui a soluo corrente por
uma soluo que melhora o custo aps a busca em toda a vizinhana; e a outra
possibilidade a busca local de primeira melhora, o qual aceita a primeira melhor
soluo (RUSSELLE; NORVIG, 2003).
O Algoritmo 2 (Buca_Local) tem como entrada uma soluo inicial (S*), os
parmetros (N e T) para o operador de reestruturao e, como sada, a melhor
soluo (S) encontrada no decorrer das iteraes.
A linha 2 declara uma varivel boleana (melhoria_it) para definir a busca
local com melhoria iterativa, enquanto tiver melhoria na vizinhana o algoritmo
executado.
As linhas de nmeros 3 a 19 executam as iteraes para encontrar melhoria
na vizinhana.
A linha 4 define a varivel (melhoria_it) como falso. A linha 6 define um vetor
(V) de solues para armazenar os vizinhos da soluo corrente (S*). As linhas de
nmeros 7 a 10 buscam uma quantidade de vizinhos da soluo corrente usando o
operador de reestruturao (Operador Reestruturao, disponvel na seo 6.2.1). A

43

linha 8 gera um vizinho usando o operador. A linha 9 adiciona o vizinho encontrado


no vetor de vizinhos (V).
Algoritmo 2 Busca Local.

Busca_Local()
Entrada:
S* (soluo inicial);
N (nmero de vizinhos a serem gerados);
T (valor para definir o tamanho do intervalo de reestruturao).
Saida: S (melhor soluo encontrada).

//inicio

melhoria_it verdade

Enquanto (melhoria_it == verdade) faa

melhoria_it falso

5
6

V (vetor para solues vizinhas)

Para (i 0 at N) faa

s_vizinha Operador.reestruturacao(S*,T ,G)

V.add (s_vizinha)

10

Fim_para

11
12
13

Para (i 0 at V.tamanho) faa


Se (S*.valor_objetivo < V[i].valor_objetivo) faa

14

S* V[i]

15

melhoria_it verdade

16
17

Fim_se
Fim_para

18
19

Fim_enquanto

As linhas de nmeros 12 a 18 fazem uma busca nos vizinhos encontrados


com o objetivo de atualizar a melhor soluo (S), a soluo corrente (S*) e a varivel
de melhoria iterativa (melhoria_it); caso a condio na linha 13 seja verdade.

44

6.1.2 GRASP (Greedy Randomized Adaptive Search Procedure)


O GRASP consiste na execuo de duas fases: primeiro cria uma soluo
inicial e depois efetua uma Busca Local para melhorar a qualidade da soluo inicial.
O diferencial deste algoritmo para outros est na gerao da soluo inicial, baseada
nas trs primeiras iniciais de sua sigla em ingls: gulosa (Greedy), aleatria
(Randomized) e adaptativa (Adaptive).
A primeira fase do GRASP garante em cada iterao uma soluo gerada de
forma gulosa adaptativa e aleatria. Os passos da construo da soluo inicial
(RESEND; RIBEIRO, 2003):
1. Definir a lista de candidatos (LC) com todos os componentes para a
formao da soluo;
2. Definir a lista de candidatos restrita (LCR), com base nos melhores
componentes da lista de candidatos (LC);
3. Selecionar na lista de candidatos restrita (LCR) algum componente que
ainda no tenha sido atribudo soluo;
4. Se a soluo no foi finalizada execute o passo 1; do contrrio, execute o
passo 5;
5. Fim de execuo.
A segunda fase consiste em uma Busca Local (com finalidade de encontrar
alguma melhoria), aplicada na soluo inicial.
O Algoritmo 3 (GRASP) tem como entrada o nmero de iteraes (It), os
parmetros (Alfa e Taxa_g) para o operador construtivo guloso aleatrio, e como
sada, a melhor soluo (S) encontrada no decorrer das iteraes.
As linhas de nmeros 2 a 12 executam nas iteraes as duas fases do
GRASP para encontrar uma boa soluo (S). A linha 3 define em cada iterao a
soluo (S*) construda pelo operador construtivo (Operador Construtivo Aleatrio,
disponvel na seo 6.2.3).
A linha 5 executa o algoritmo (Busca_Local) que corresponde a segunda
fase, esse algoritmo o mesmo definido na seo 6.1.1, mas com os parmetros
para o nmero de vizinhos e tamanho do intervalor de reestruturao fixos. As linhas
de nmeros 7 a 9 verificam se h melhoria na soluo.

45

Algoritmo 3 - GRASP adaptado com os operadores: Construtivo Guloso Aletorio e Reestruturao.

GRASP( )
Entrada:
It (nmero de iteraes);
Alfa (define o tamanho da lista de candidatos restrita no operador construtivo
guloso aleatrio);
Taxa_g (tamanho do caminho constuido de forma gulosa no operador construtivo
guloso aleatrio).
Saida: S (melhor soluo encontrada)
0

//inicio

iterao 1

Enquanto (iterao <= it) faa

S* Operador.contrucao_gulosa_aleatoria(alfa, taxa_g)

4
5

s_vizinha Busca_Local(S*, 5, 0.5)

6
7
8
9

Se (S.valor_objetivo < s_vizinha. valor_objetivo) faa


S s_vizinha
Fim_se

10
11
12

iterao iterao + 1
Fim_enquanto

6.1.3 Algoritmo Gentico


Algoritmos Genticos (AGs) so tcnicas de otimizao para encontrar
solues aproximativas, que usam princpios da biologia evolutiva, como: seleo
natural, recombinao e, mutao (GOLDBERG, 1989).
Linden (2008, p. 57), resume o algoritmo gentico atravs dos seguintes
passos:
1. Inicializar a populao de indivduos;
2. Avaliar cada indivduo na populao;
3. Selecionar os pais para gerar novos indivduos;

46

4. Aplicar os operadores de recombinao e mutao aos pais selecionados


com objetivo de gerar os indivduos da nova gerao;
5. Avalizar os novo indivduos e inseri-los na populao;
6. Se condio de parada satisfeita, finalizar no passo 7. Contrario, volte
para o passo 2.
7. Finalizar algoritmo.
O Algoritmo 4 (Genetico) tem como entrada uma populao, um valor de
probabilidade (P_r) para recombinao e, um valor probabilidade (P_m) para
mutao e, como sada, a melhor soluo (S) encontrada no decorrer das geraes.
A linha 1 executa o procedimento (melhor_individo()) para encontrar o
melhor indivduo da populao. A linha 2 define uma varivel (melhoria_it) para
definir o gentico com melhoria iterativa, se o algoritmo gentico no tiver melhoria
numa janela de 100 geraes, o algoritmo para a executado. As linhas de nmeros 4
a 36 sero executadas enquanto a condio de melhoria for vlida. As linhas 5 e 6
executam o procedimento (selecao_roleta()) para selecionar dois pais.
A linha 8 sorteia uma probabilidade para recombinao. Caso verdade, a
condio na linha 9, o algoritmo executar os procedimentos para reproduo. As
linhas 10 e 11 executam o procedimento (recombinacao(), disponvel na seo 6.2.2)
com objetivo de construir os filhos, a ordem dos pais passados como entrada no
procedimento influencia a primeira parte do material gentico na soluo filha.
A linha 13 sorteia a probabilidade de mutao. Caso verdade, a linha 14, os
procedimentos para mutao so aplicados em cada filho. As linhas 15 e 16
executam o procedimento (reestruturacao(), disponvel na seo 6.2.1) equivalente a
uma mutao.
As linhas 21 a 29 verificam se tem algum filho melhor que a soluo corrente
(S). Caso verdade, a melhor soluo corrente (S) ser atualizada na linha 22 ou
linha 27 por um filho, e o contador (contador) na linha 23 ou linha 28 ser tambm
atualizado para dar continuidade execuo do algoritmo.

47

Algoritmo 4 Gentico adaptado com os operadores: Recombinao e Reestruturao.

Genetico ()
Entrada:
Populacao (populao criada a partir de alguma regra);
P_r (probabilidade de recombinao);
P_m (probalidade de mutao).
Saida: S (melhor soluo encontrada).
0

//inicio

S melhor_individo (populacao)

melhoria_it verdade

contador 1

Enquanto (melhoria_it == verdade) faa

pai_1 selecao_roleta (populacao)

pai_2 selecao_roleta (populacao)

7
8

sorteio_r [0, 1]

Se (sorteio_r < P_r) faa

10

filho_1 Operador.recombinacao(pai_1, pai_2, G)

11

filho_2 Operador.recombinacao(pai_2, pai_1, G)

12
13

sorteio_m [0, 1]

14

Se (sorteio_m < P_m) faa

15

filho_1 Operador.reestruturacao (filho_1, 0.5, G)

16

filho_2 Operador.reestruturacao (filho_2, 0.5, G)

17
18

Fim_se
Fim_se

48

Continuao
21

Se (filho_1. valor_objetivo > S.valor_objetivo) faa

22

S filho_1

23

contador 0

24

Fim_se

25
26

Se (filho_2. valor_objetivo > S.valor_objetivo) faa

27

S filho_2

28

contador 0

29

Fim_se

30
31

atualizar_populacao (populacao, filho_1, filho_2, pai_1, pai_2)

32
33

contador contador +1

34

Se (contador == 100) faa

35
36
37

melhoria_it falso
Fim_se
Fim_enquanto

A linha 31 executa o procedimento (atualizar_populacao()) para atualizar a


populao atravs de um torneio entre os indivduos filhos e pais passados como
entrada. Na primeira regra, se os filhos gerados forem melhores que seus pais, a
populao substitui os pais por seus filhos. Na segunda regra, caso um filho seja
melhor que algum pai, a populao substitui esse pai por esse filho. Na terceira
regra, caso nenhum filho no seja melhor do que nenhum pai, a populao substitui
o pior pai pelo melhor filho com objetivo de garantir alguma diversidade.
A linha 33 incrementa a varivel contador. Entre as linhas 34 a 36 fazem a
condio de sada do lao. Caso verdade, a linha 34, significa que o algoritmo
gentico est h 100 geraes sem alguma melhoria. Ento, a linha 35, atualiza a
condio de sada do lao e logo em seguida, o algoritmo ser finalizado.

49

6.2

OPERADORES

6.2.1 Procedimento Reestruturao


O operador de reestruturao funciona trabalhando com uma soluo. Gera
uma nova soluo a partir do intervalo de reestruturao definido por dois pontos
extremos no caminho da soluo inicial. Como exemplo de reestruturao
considerado, na Figura 22, uma soluo construda a partir da posio inicial 0 (zero)
do grafo grade 4x4.
Figura 22 Grafo grade 4x4 e soluo inicial (S*).

Primeiro, o tamanho do intervalor de restruturao e o vrtice extremo inicial


so definidos para selecionar o intervalo de reestruturao no caminho da soluo
inicial (S*). No exemplo, na Figura 22 (b), supondo o tamanho do intervalo de
reestruturao com 60% dos vrtices do caminho e o extremo inicial (vrtice 0); logo,
temos o seguinte intervalo de reestruturao (0-1-2-6-10-9-5-4-8).
Segundo, o grafo grade 4x4 marcado com os vrtices do caminho do
intervalo de reestruturao (0-1-2-6-10-9-5-4-8). No exemplo, na Figura 23 (a), o
caminho da soluo inicial (S*) marcada no grafo grade 4x4, e na Figura 23 (b), as
relaes de vizinhana entre os vrtices do intervalo de reestruturao so
realizadas no grafo grade 4x4.

50

Figura 23 Relao de adjacncia do intervalo de reestruturao no grafo grade 4x4.

Terceiro, uma Busca em Profundidade realizada a partir do extremo inicial


0 (zero) do grafo grade 4x4, na Figura 23 (b), com finalidade de construir um novo
intervalo que ter os mesmos vrtices extremos (inicial e final) e o mesmo tamanho
do intervalo de reestruturao. No exemplo, o intervalo de reestruturao (0-1-2-610-9-5-4-8) pode ser modificado para o novo intervalo (0-4-5-1-2-6-10-9-8).
Por ltimo, o novo intervalo (0-4-5-1-2-6-10-9-8) substitui o intervalo de
reestruturao (0-1-2-6-10-9-5-4-8) no caminho da soluo inicial (S*); desta forma,
a soluo, Figura 24, construda.

Figura 24 Soluo reestruturada.

O Procedimento 1 (reestruturacao ()) tem como entrada uma soluo inicial


(S*), um grafo grade G (matriz de adjacncia), uma varivel numrica (T) que define
um valor porcentual para o tamanho do intervalo de reestruturao (assume valor
mximo de 0,5); como sada, uma nova soluo (Sr).
Na linha 1, a varivel numrica (tamanho_intervalo) guarda um valor para o
tamanho do intervalo de reestruturao. Na

linha

2,

varivel

numrica

51

(indice_inicial_maximo) guarda um valor correspondente ao ndice mximo para o


extremo inicial no caminho da soluo (S*).
Na linha 3, a varivel numrica (in_extremo_inicial) armazena o ndice com o
extremo inicial para o intervalo de reestruturao. Na linha 4, a varivel numrica
(in_extremo_final) armazena o ndice com o extremo final para o intervalo de
reestruturao.
Na linha 6, o procedimento (modificar_intervalo()) faz a reestruturao de um
novo intervalo. A linha 8 verifica o novo intervalo (novo_intervalo) diferente de vazio;
caso verdadeiro, o novo intervalo (novo_intervalo) substitudo pelo intervalo de
reestruturao no caminho da soluo (S*).
Na linha 9, o procedimento (novo_caminho()) substitui no caminho da
soluo (S*) o novo intervalo (novo_intervalo). A linha 10 executa o procedimento
(rolamento_dado(), disponvel na seo 4.6) para fazer o rolamento do dado sobre o
caminho (n_caminho). E, na linha 13, a nova soluo (Sr) retornada.

Procedimento 1 - Reestruturao

reestruturacao ()
Entrada: S* (Soluo inicial), T (define o tamanho do intervalo de reestruturao), G
(grafo grade)
Sada: Sr (Soluo reestruturada)
// Inicio
1
tamanho_intervalo S*.caminho_tamanho * T
2
indice_inicial_maximo S*.caminho_tamanho tamanho_intervalo
3
in_extremo_inicial [0, indice_inicial_maximo]
4
in_extremo_final in_extremo_inicial + tamanho_intervalo
5
6
novo_intervalo modificar_intervalo (in_extremo_inicial, in_extremo_final, S*, G)
7
8
Se(novo_intervalo )faa
9
n_caminho novo_caminho(novo_intervalo, S*.caminho, in_extremo_inicial,
in_extremo_final)
10
rolamento_dado(n_caminho, Sr)
11 Fim_se
12
13 Retorna Sr

52

O Procedimento 2 (modificar_intervalo ()) tem como entrada as variveis


numricas (in_inicial e in_final) para definir o intervalo de reestruturao no caminho
da soluo inicial (S*), um grafo grade G (matriz de adjacncia) e como sada, um
vetor de inteiros (intervalo_r) com o novo intervalo reestruturado.
Na linha 1, o procedimento (marca_caminho_no_grafo ()) marca o caminho
da soluo (S*) no grafo grade G, as arestas entre os vrtices do caminho da
soluo inicial (S*) tero marcao igual a -1 (menos um) e as demais arestas tero
marcao igual a 0 (zero).
Na linha 3, o vetor de inteiros (intervalo_r) declarado para definir o
intervalo a ser reestruturado. Nas linhas de nmeros 4 a 6, o vetor (intervalo_r)
armazena os vrtices entre os ndices (in_inicial e in_final) no caminho da soluo
inicial (S*).
Na linha 8, o procedimento (marca_intervalo_no_grafo ()) marca o vetor de
inteiros (intervalo_r) no grafo grade G; nessa marcao, as arestas entre os vrtices
do intervalo (intervalo_r) tero marcao igual a (1).
A linha 10 define a estrutura (Pilha) definida na seo 6. Na linha 11, a
varivel numrica (v) armazena o primeiro vrtice do vetor de inteiros (intervalo_r).
Na linha 12, a lista (lista_v) declarada para armazenar os vrtices adjacentes do
vrtice (v), com procedimento disponvel na seo 4.3. Na linha 13, o primeiro
elemento da pilha adicionada com o vrtice (v) e seus vrtices adjacentes (lista_v).
Na linha 15, a varivel numrica (K) declarada para guardar um valor igual
quantidade de vrtices do grafo grade G, esse valor controla o limite mximo de
execuo do lao na linha 17.
Nas linhas de nmeros 18 a 26, o empilhamento executado at a lista do
topo da pilha ficar vazia. Na linha 19, a varivel numrica (v) guarda o vrtice da lista
do topo da pilha que apresenta o maior grau no grafo grade G. Na linha 20, o vrtice
de maior grau selecionado ser removido da lista do topo da pilha para evitar ser
selecionado em iteraes futuras.
Na linha 21, o procedimento (ponto_isolamento(), disponvel na seo 4.2)
executado para verificar o vrtice (v) como vivel. Caso verdadeiro, na linha 22, a
lista (lista_v) armazena os vrtices adjacentes do vrtice (v); na linha 23, a pilha
adiciona o vrtice (v) e a lista (lista_v) com vizinhos, como prximo elemento da pilha

53

e; na linha 24, o procedimento (marca_grafo1(), disponvel na seo 4.4.1) marca o


vrtice (v) no grafo grade G.
Procedimento 2 Modificar Intervalo

modificar_intervalo ()
Entrada: in_inicial (ndice do extremo inicial), in_final (ndice do extremo final),
S* (soluo inicial), G (Grafo)
Sada: novo_intervalo (vetor de inteiros)
// Inicio
1
marca_caminho_no_grafo(S*.caminho, G)
2
3
intervalo_r
Para (i in_inicial; i <= in_final; i++) faa
4
5
intervalo_r.add(S*.caminho[i])
Fim_para
6
8
marca_intervalo_no_grafo(intervalo_r, G)
9
10 Pilha pilha
11 v intervalo_r.primeiro
12 lista_v pega_vizinhos(v, G)
13 pilha.add(v, lista_v)
15 K |G(V)|
16
17 Para (j 0 at K ) faa
Enquanto( pilha.topo.lista ) faa
18
19
v vertice_maior_grau(pilha.topo.lista)
20
pilha.topo.lista.remove(v)
Se (ponto_isolamento(v, retorna_caminho(pilha)) == T) faa
21
22
lista_v pega_vizinhos(v, G)
23
pilha.add(v, lista_v)
24
marca_grafo1(G, retorna_caminho(pilha))
Fim_se
25
Fim_enquanto
26
27
Se(pilha.tamanho == intervalo_r.tamanho) faa
28
Se(teste_intervalo(pilha) == verdadeiro) faa
29
30
novo_intervalo retorna_caminho(pilha)
31
jK
Fim_se
32
Contrario Se (pilha == ) faa
33
34
jK
Fim_se
35
36
Enquanto( pilha.topo.lista == ) faa
37

54

38
marca_grafo2(G, retorna_caminho(pilha))
39
pilha.desempilha
Fim_enquanto
40
41 Fim_para
42 Retornar novo_intervalo

As linhas de nmeros 28 a 35 verificam as condies de sada do lao mais


externo. A linha 28 verifica o tamanho da pilha igual quantidade de vrtices do
vetor (intervalo_r); caso verdadeiro, o procedimento (teste_intervalo()) verifica o
caminho definido pela pilha diferente do caminho (intervalo_r) e, os vrtices
extremos do caminho na pilha iguais aos vrtices extremos do caminho no vetor
(intervalo_r); se verdadeiro, o vetor (novo_intervalo) armazenar o intervalo
reestruturado definido pela pilha, e na linha 31, a varivel numrica (j) atualizada
com valor mximo para sair do lao.
A linha 33 verifica a pilha vazia; se verdadeiro, a varivel (j) armazena um
valor mximo para sair do lao.
O desempilhamento ocorre entre as linhas 37 a 40. Enquanto verdadeiro, a
linha 38 marca o grafo grade G, com o procedimento (marca_grafo2(), descrito na
seo 4.4.2). E, na linha 39, o desempilhamento realizado.

55

6.2.2 Procedimento Recombinao


O operador de recombinao funciona trabalhando com duas solues. A
nova soluo gerada atravs de um ponto de recombinao entre os caminhos
das duas solues envolventes.
Para um exemplo de recombinao so consideradas trs solues Hiker
Dice construdas sobre o tabuleiro 4x4, como mostram as Figura 25 (a), (b) e (c). Os
caminhos das solues Hiker Dice, na Figura 25 (a) e (b), so usadas para gerar o
caminho da nova soluo na Figura 25 (c).
Figura 25 Exemplo Recombinao.

Inicialmente, define-se a soluo dominante, essa soluo apresenta o


primeiro material gentico para o caminho da nova soluo. No exemplo, supondo
a soluo, ver Figura 25 (a), como dominante; logo, o caminho (0-1-2-3-7-6-5-4-8-910-11-15-14-13-12) disponibilizar a primeira parte gentica.
Segundo, seleciona-se no caminho da soluo dominante, a primeira parte
gentica para o caminho da nova soluo. No exemplo, supondo 50% do caminho

56

na soluo dominante; logo, o caminho da nova soluo ter os vrtices 0-1-2-37-6-5-4.


Terceiro, seleciona-se o ltimo vrtice no caminho da nova soluo (0-1-23-7-6-5-4). No exemplo, o vrtice (4) selecionado para ponto de recombinao
entre os caminhos das solues envolventes.
Quarto, verifica-se a viabilidade do ponto de recombinao selecionado
(vrtice 4) com duas condies: na primeira condio, por exemplo, o sucessor do
ponto de recombinao no caminho da soluo no-dominante (vrtice 8) no pode
estar presente no caminho da nova soluo (0-1-2-3-7-6-5-4), logo, a primeira
condio verdadeira; na segunda condio, o sucessor do ponto de recombinao
no caminho da soluo no-dominante (vrtice 8) no pode ser ponto de
isolamento, quando unido ao caminho da nova soluo (0-1-2-3-7-6-5-4), como
mostra a Figura 26, o grafo grade aps ser marcado pelo caminho ainda permite a
construo do caminho hamiltoniano, sendo assim, a segunda condio tambm
verdadeira.
Figura 26 Novo caminho no grafo grade 4x4.

Quinto, seleciona-se no caminho da soluo no-dominante a segunda


parte do material gentico. Ento, o caminho da nova soluo (0-1-2-3-7-6-5-4)
ser acrescentado com os vrtices sequenciais aps o ponto de recombinao
(vrtice 4) no caminho da soluo no-dominante (0-4-8-12-13-9-5-1-2-6-10-14-1511-7-3), desde que os vrtices sequenciais no ainda existam no caminho da nova
soluo e no se apresentem como pontos de isolamentos. No exemplo, o caminho
da nova soluo apresenta material gentico da soluo dominante e da soluo
no-dominante (0-1-2-3-7-6-5-4-8-12-13-9); o vrtice 5 (cinco) no caminho da
soluo no-dominante no pode ser adicionado por j existir no caminho da nova
soluo.

57

Por ltimo, repara-se o caminho da nova soluo com o procedimento


(repara_caminho(), disponvel na seo 6.2.4); e depois, faz-se o movimento de
rolamento do dado com o procedimento (rolamento_dado(), disponvel na seo
4.6).
O Procedimento 3 (recombinacao()) tem como entrada duas solues (S1 e
S1) para recombinao do novo caminho, o grafo grade G (matriz de adjacncia) e
como sada, uma nova soluo (Sr) recombinada.
A linha 1 declara um vetor de inteiros (v_caminho) para guardar o caminho
da nova soluo. A linha 2 declara uma varivel do tipo inteiro (tamanho) para
guardar um valor correspondente a quantidade de vrtices que definir a primeira
parte do material gentico para o caminho da nova soluo.
As linhas de nmeros 3 a 5 armazenam no vetor do tipo inteiro (v_caminho)
o material gentico no caminho da soluo (S1) para o caminho da nova soluo. O
lao, na linha 3, executar at atingir o valor limite (tamanho). A linha 4 adiciona no
vetor (v_caminho) os vrtices do caminho da soluo (S1).
As linhas de nmeros 7 a 15 identificam um ponto de recombinao valido
no vetor (v_caminho). Na linha 7, o lao executa a partir do ltimo vrtice localizado
no caminho (v_caminho). A linha 8 armazena na varivel (v) o ltimo vrtice do
caminho (v_caminho). Na linha 9, a varivel (s) armazenar o sucessor do vrtice (v)
que ser encontrado no caminho da soluo (S2). Na linha 10, o teste realizado pelo
procedimento (teste_s()) ser verdadeiro quando obedecer duas condies:
primeira, o vrtice (s) ainda no existe no caminho (v_caminho)); segundo, o
vrtice (s) quando unido ao caminho (v_caminho) no se apresentar como ponto
de isolamento. Se verdadeiro, a linha 11 finaliza a execuo do lao; contrario, a
linha 13 remove o ltimo vrtice do caminho (v_caminho).
As linhas de nmeros 17 a 24 localizam o ndice cujo vrtice sucessor do
ponto de recombinao. Na linha 19, o lao percorre os vrtices do caminho na
soluo (S2) at encontrar o ponto de recombinao; aps localizar o ponto de
recombinao, o ndice sucessor ao ponto de recombinao no caminho da soluo
(S2) armazenado na varivel (ndice).

58

Procedimento 3 - Recombinao

Recombinacao ( )
Entrada: S1 (Soluo 1), S2 (Soluo 2), G (grafo em matriz de adjacncia)
Sada: Sr (nova soluo)
//inicio
1
v_caminho
2
tamanho S1.caminho_tamanho * 0,5
Para (i 0; i < tamanho; i++) faa
3
4
v_caminho.add(S1.caminho[i])
Fim_para
5
6
Para (i v_caminho.tamanho; i > 0; --i) faa
7
8
v v_caminho[i]
9
s v_sucessor(v, S2)
Se (teste_s (v_caminho, s) == T) faa
10
11
Sair do lao
Contrario
12
13
v_caminho.remove_ultimo_vertice
Fim_se
14
15 Fim_para
16
17 Indice
18 ponto_r v_caminho.ultimo
19 Para (i 0; i < S2.caminho_tamanho; ++i) faa
Se (S2.caminho[i] == ponto_r) faa
20
21
indice i + 1
22
Sair do lao
Fim_se
23
24 Fim_para
25
26 Para (i indice; i < S2.caminho_tamanho; ++i) faa
27
v S2.caminho[i]
Se(teste_s (v_caminho, v) == T) faa
28
29
v_caminho.add(v)
Contrario
30
31
Sair do lao
Fim_se
32
33 Fim_para
34
35 marca_caminho_grafo(v_caminho, G)
36 v_terminais vertices_terminais (G)
37
38 Se (v_terminais.tamanho <= 2) faa
39
v_caminho repara_caminho(v_caminho, v_terminais, G)
40 Fim_se
41
42 Se (v_caminho.tamanho == |G(V)|) faa
43
rolamento_dado(v_caminho, Sr)
44 Fim_se
45
46 Retornar Sr

59

As linhas 26 a 33 armazenam no vetor de inteiros (v_caminho) o material


gentico do caminho da soluo (S2). Na linha 26, o lao executa a partir da varivel
(indice) at a ltima posio do caminho na soluo (S2); ou, encontrar um vrtice
no caminho da soluo (S2) que no pode ser adicionado ao caminho (v_caminho).
Na linha 27, a varivel (v) armazena o vrtice do caminho na soluo (S2).
Na linha 28, o teste realizado pelo procedimento (teste_s()) ser verdadeiro
quando obedecer duas condies: primeira, o vrtice (v) ainda no existe no
caminho (v_caminho); segundo, o vrtice (v) quando unido ao caminho (v_caminho)
no se apresentar como ponto de isolamento. Se verdadeiro, o vrtice (v)
adicionado ao caminho (v_caminho).
A linha 35 executa o procedimento (marca_caminho_grafo()) para marcar o
grafo grade G com os vrtices do caminho (v_caminho), seguindo a ideia
apresentada no procedimento da seo 4.4.1. Na linha 36, um vetor do tipo inteiro
(v_terminais) recebe os vrtices terminais (vrtices com grau 1) que possam surgir
no grafo grade G.
As linhas de nmeros 38 a 40 fazem a reparao do caminho (v_caminho)
com ajuda do procedimento (repara_caminho()). Na linha 38, se o tamanho do vetor
(v_terminais) menor ou igual a 2, ento o grafo grade G apresenta no mximo dois
vrtices terminais e assim, na linha 39, o procedimento (repara_caminho(),
disponvel na seo 6.2.4) ser executado.
A linha 42 verifica o caminho (v_caminho) com mesma quantidade de
vrtices do grafo grade G; caso verdadeiro, a linha 43 executa o procedimento
(rolamento_dado (), disponvel na seo 4.6), para fazer o rolamento do dado sobre
o caminho (v_caminho). E, a linha 46 retorna a soluo (Sr) construda por
recombinao.

60

6.2.3 Construtivo Guloso Aleatrio


O operador construtivo guloso aleatrio gera uma soluo, o caminho da
nova soluo gerado em trs nveis de construo sendo que os dois primeiros
nveis apresentam caractersticas gulosa e aleatria e, o terceiro nvel apresenta um
procedimento de reparao para o caminho hamiltoniano. Como exemplo, o
tabuleiro 4x4 usado para a construo de uma soluo, ver Figura 27 (a).
Primeiro, define-se a quantidade de vrtices para o caminho que ser
construdo no primeiro e segundo nvel que ter caracterstica gulosa e aleatria,
esse caminho poder apresentar entre 50 a 80% dos vrtices do grafo grade G.
Segundo, define-se a quantidade de vrtices para o caminho no primeiro
nvel e depois para o segundo nvel. No exemplo, supondo um caminho com
caracterstica gulosa e aleatria (com 70% dos vrtices no grafo grade G), ver Figura
27 (a), logo o caminho ter 11 vrtices; nesse caso, o caminho construdo no
primeiro nvel poder ter 5 vrtices e, no segundo nvel, o caminho poder ter o
acrscimo de 6 vrtices.
Figura 27 Exemplo Construo Primeiro Nvel.

61

Terceiro, o primeiro nvel constri um vetor com caminhos cujos


comprimentos so iguais a 5 vrtices; no exemplo, cada caminho construdo no
primeiro nvel iniciou no vrtice 0 do grafo grade G, como mostra a Figura 27 (b). O
vetor com caminhos ordenado decrescentemente pelo valor objetivo, ver Figura 27
(c). Um total de 40% dos caminhos com piores valores objetivos so removidos do
vetor, ver Figura 27 (d).
Quarto, seleciona-se aleatoriamente um caminho do vetor com caminhos de
primeiro nvel; no exemplo, o caminho (0-4-8-12-13) foi selecionado, ver Figura 28
(a). O segundo nvel constri um vetor com caminhos cujos comprimentos so iguais
a 6 vrtices; no exemplo, cada caminho construdo no segundo nvel iniciou no
vrtice 13 do grafo grade G, como mostra as Figura 28 (b) e (c). O vetor com
caminhos ordenado decrescentemente pelo valor objetivo, ver Figura 28 (d). Um
total de 40% dos caminhos com piores valores objetivos so removidos do vetor, ver
Figura 28 (e).
Figura 28 Exemplo Construo Segundo Nvel.

62

Quinto, seleciona-se aleatoriamente um caminho no vetor com caminhos de


segundo nvel, repara o caminho hamiltoniano e, realiza o rolamento do dado sobre
o caminho construdo. Na Figura 29 (a), o caminho (0-4-8-12-13-14-15-11-7-6-10) foi
selecionado no vetor com caminhos de segundo nvel. Na Figura 29 (b), o caminho
hamiltoniano reparado. E, na Figura 29 (c), uma soluo com caminho, faces do
dado sobre o caminho e somatrio das faces dado definida.
Figura 29 Exemplo Construo Terceiro Nvel.

O Procedimento 4 (construcao_gulosa_aleatoria()) tem como entrada a


varivel numerica (A) que define um valor porcentual para a lista de candidato
restrita, a varivel numerica (T) que define o tamanho dos caminhos com
caracterstica gulosa e aleatria, um grafo grade G (matriz de adjacncia) e, como
sada, uma soluo 4(S).
As linhas 1 e 2 declaram e iniciao as variveis numricas (nvel_1 e
nvel_2) para guardarem valores correspondentes ao total de vrtices nos caminhos
do primeiro e segundo nvel. A varivel (nvel_2) poder guardar um valor mximo
correspondente a 80% dos vrtices do grafo grade G. A varivel numrica (nvel_1)
guardar um valor correspondente a metade dos valores da varivel (nvel_2).

A soluo representada por dois vetores de inteiros, um para o caminho, outro para as

faces do dado e uma variavel numrica para o somatrio das faces.

63

A linha 4 declara um vetor (caminho_nivel_1) para armazenar os caminhos


construdos no primeiro nvel, cada elemento do vetor armazena dois tipos de
informaes, um para o caminho e o outro para o somatrio das faces do dado
desse caminho.
A linha 5 executa o procedimento (construir_caminho_nivel_1()) para
construir os caminos no primeiro nvel.
O lao mais externo entre as linhas de nmeros 7 a 17 ser executado at o
vetor (caminho_nivel_1) ficar vazio ou a soluo (S) ser construda. No pior caso, o
lao executa at o vetor ficar vazio, aqui, o lao executa 50 vezes, devido o vetor
apresentar no mximo esse valor. A cada iterao do lao mais externo, o
procedimento

(construir_caminho_nivel_2())

remove

um

elemento

do

vetor

(caminho_nivel_1).
A linha 9 declara um vetor (caminho_nivel_2) para guardar os caminhos
construdos no segundo nvel, cada elemento do vetor tambm armazena dois tipos
de informaes, um para o caminho e outro para somatrio das faces do dado desse
caminho. Na linha 10, o procedimento (construir_caminho_nivel_2()) construir os
caminos do segundo nvel.
O lao mais interno entre as linhas de nmeros 12 a 16 executar at o vetor
(caminho_nivel_2) ficar vazio ou a soluo (S) ser construda. No pior caso, o lao
executar at o vetor ficar vazio, aqui, o lao tambm executar 50 vezes, devido o
tamanho mximo do vetor (caminho_nivel_2). E, a cada iterao do lao, o
procedimento

(construir_caminho_nivel_3())

remove

um

elemento

do

vetor

(caminho_nivel_2).
Na linha 10, o procedimento (construir_caminho_nivel_3()) construir uma
soluo (S).

64

Procedimento 4 Construo gulosa aleatria.

construcao_gulosa_aleatoria ( )
Entrada:
A (varivel para definir o tamanho da lista de candidato restrita),
T (varivel para definir o tamanho do caminho no primeiro e segundo nvel),
G (Grafo)
Sada: S
1
nivel_2 |G(V)| * T
2
nivel_1 (nvel_2) / 2
3
4
caminho_nivel_1
5
caminho_nivel_1 construir_caminho_nivel_1(nivel_1, A, G)
6
7
Enquanto (caminho_nivel_1 E S.caminho == ) faa
8
9
caminho_nivel_2
10
caminho_nivel_2 construir_caminho_nivel_2(caminho_nivel_1,
nvel_2, A, G)
11
12
Enquanto (caminho_nivel_2 E S.caminho == ) faa
13
14
S construir_caminho_nivel_3(caminho_nivel_2, G)
15
Fim_enquanto
16
17 Fim_enquanto
18
19 Retonar S

O Procedimento 5 (construir_caminho_nivel_1()) tem como entrada a vaivel


numrica (nvel_1), que define o tamanho dos caminhos no primeiro nvel, a varivel
(A), que define um valor porcentual para a lista de candidato restrita, um grafo grade
G (matriz de adjacncia) e, como sada, um vetor (caminho_nivel_1) com os
caminhos no primeiro nvel.
A linha 1 declara a estrutura pilha definida na seo 5. A linha 2 declara a
varivel numrica (v) e inicializa com o vrtice 0 (zero) do grafo grade G. A linha 3
executa o procedimento (vertices_adjacentes(), disponvel na seo 4.1) para
selecionar os vrtices adjacentes do vrtice (v). E, na linha 4, o vrtice (v) e seus
vizinhos (lista_v) so adicionados na pilha.
Na linha 6, a varivel booleana (sada_enquanto) declara e inicializada
com valor verdadeiro. Entre as linhas de nmeros 7 a 36, o lao executar at a
condio na linha 32 ser satisfeita.

65

O empilhamento, entre as linhas 9 a 25, executa at a pilha atingir o


tamanho igual ao valor da varivel (nivel_1). A varivel (nivel_1) ter no mximo um
valor igual a 40% dos vrtices do grafo grade G.
Na linha 10, a varivel (v) armazena um vrtice selecionado aleatoriamente
na lista do topo da pilha; o vrtice selecionado removido, na linha 11, da lista do
topo da pilha para evitar ser selecionado em iteraes futuras.
Na linha 13, o procedimento (ponto_isolamento(), disponvel na seo 4.2),
verifica o vrtice (v) como vivel. Caso verdadeiro, a linha 14 armazena na lista
(lista_v) os vrtices adjacentes do vrtice (v), a linha 15 adiciona na pilha o vrtice
(v) e a lista (lista_v) e, na linha 16, o procedimento (marca_grafo1(), disponvel na
seo 4.4.1) marca o vrtice (v) no grafo grade G.
Na linha 19, o tamanho da pilha verificado igual ao valor da varivel
(nvel_1); caso verdadeiro, na linha 20, a estrutura soluo (S) declarada e, na
linha 21, o procedimento (rolamento_dado(), disponvel na seo 4.6) executa o
rolamento do dado, esse procedimento tem como entrada um caminho e, como
sada, uma soluo (S).
Na linha 23, um elemento adicionado no vetor (caminho_nivel_1), cada
elemento adicionado no vetor (caminho_nivel_1) apresenta um caminho construdo
no grafo grade G e o somatrio das faces.
O desempilhamento ocorre entre as linhas 27 a 30. Na linha 28, o grafo
grade G marcado com o procedimento (marca_grafo2(), disponvel na seo
4.4.2). E, na linha 29, um desempilhamento acontece na pilha.
As linhas de nmeros 32 a 34 verificam a condio de sada do lao mais
externo; caso verdadeiro, a linha 33 atualiza a varivel booleana (sada_enquanto)
com valor falso.
Na linha 38, o vetor (caminho_nivel_1) ordenado decrescentemente pelo
somatrio das faces do dado.
Na linha 40, a varivel (int_corte) declarada para definir o tamanho da lista
de candidato restrita. Na linha 41, o lao executa at o limite da varivel (int_corte),
na linha 42, o ltimo elemento do vetor (caminho_nivel_1) removido. E, na linha
45, o vetor (caminho_nivel_1) retornado.

66

Procedimento 5 Construo Primeiro Nvel.

construir_caminho_nivel_1 ( )
Entrada:
nvel_1 (varivel para definir o tamanho dos caminhos no primeiro nvel)
A (varivel para definir o tamanho da lista de candidato restrita),
G (Grafo)
Sada: caminho_nivel_1 (um vetor com os caminhos do primeiro nvel)
// Inicio
1
Pilha pilha
2
v0
3
lista_v vertices_adjacentes (v, G);
4
pilha.add(v, lista_v)
5
6
saida_enquanto verdade
Enquanto (sada_enquanto == verdade) faa
7
Enquanto (pilha.topo.lista E pilha.tamanho < nivel_1) faa
9
10
v seleciona_vertice_aleatorio(pilha.topo.lista)
11
pilha.topo.lista.remove(v)
12
Se (ponto_isolamento(v, retorna_caminho(pilha), G) == T ) faa
13
14
lista_v vertices_adjacentes (v, G);
15
pilha.add(v, lista_v)
16
marca_grafo1(G, retorna_caminho(pilha))
Fim_se
17
18
Se (pilha.tamanho == nvel_1) faa
19
20
Solucao S
21
rolamento_dado(retorna_caminho(pilha), S)
23
caminho_nivel_1.add(S.soma, S.caminho)
Fim_se
24
Fim_enquanto
25
26
Enquanto (pilha.topo.lista == OU pilha.tamanho > nivel_1) faa
27
28
marca_grafo2(G, retorna_caminho(pilha))
29
pilha.desempilha
Fim_enquanto
30
31
Se (caminho_nivel_1.tamanho == 50) faa
32
33
sada_enquanto falso
Fim_se
34
35
36 Fim_enquanto
37
38 ordena_decrescente (caminho_nivel_1)
39
40 int_corte caminho_nivel_1.tamanho * A
41 Para (i 1 at int_corte) faa
42
caminho_nivel_1.remove_ultimo
43 Fim_para
44
45 Retorna caminho_nivel_1

67

O Procedimento 6 (construir_caminho_nivel_2()) tem como entrada um vetor


(caminho_nivel_1) com os caminhos de primeiro nvel, a vaivel numrica (nvel_2)
que define o tamanho dos caminhos de segundo nvel, a varivel (A) que define um
valor porcentual para a lista de candidato restrita, um grafo grade G (matriz de
adjacncia) e, como sada, um vetor (caminho_nivel_2) com os caminhos de
segundo nvel.
Na linha 1, a varivel numrica (int_sorteio) guarda o ndice selecionado
aleatoriamente do vetor (caminho_nivel_1). O vetor (v_caminho), na linha 2,
declarado para guardar um caminho selecionado no vetor (caminho_nivel_1), de
acordo com o valor definido pelo ndice. E, na linha 3, o caminho selecionado no
vetor (caminho_nivel_1) removido.
Entre as linha de nmeros 6 a 10, o caminho selecionado (v_caminho)
carregado

na

estrutura

pilha.

Da

linha

12

em

diante,

procedimento

(construir_caminho_nivel_2()) executa os mesmos passos do procedimento


(construir_caminho_nivel_1()).
Procedimento 6 Construo Segundo Nvel.

construir_caminho_nivel_2 ( )
Entrada:
caminho_nivel_1 (vetor com caminhos de primeiro nvel)
nvel_2 (varivel para definir o tamanho dos caminhos no segundo nvel)
A (varivel para definir o tamanho da lista de candidato restrita),
G (Grafo)
Sada: caminho_nivel_2 (um vetor com os caminhos do primeiro nvel)
// Inicio
1
int_sorteio seleciona_aleatorio [0 - caminho_nivel_1.tamanho]
2
v_caminho caminho_nivel_1[int_sorteio].caminho
3
caminho_nivel_1.remove(int_sorteio)
4
5
Pilha pilha
Para (i 0 at v_caminho.tamanho) faa
6
7
v v_caminho[i]
8
lista_v vertices_adjacentes(v, G);
9
pilha.add(v, lista_v)
10 Fim_para
11
12 saida_enquanto verdade
13 Enquanto (sada_enquanto == verdade) faa
14
Enquanto (pilha.topo.lista E pilha.tamanho < nivel_2) faa
15
16
v seleciona_vertice_aleatorio(pilha.topo.lista)

68

17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51

pilha.topo.lista.remove(v)
Se (ponto_isolamento(v, retorna_caminho(pilha)) == T ) faa
lista_v vertices_adjacentes(v, G);
pilha.add(v, lista_v)
marca_grafo1(G, retorna_caminho(pilha))
Fim_se
Se (pilha.tamanho == nvel_2) faa
Solucao s
rolamento_dado(retorna_caminho(pilha), s)
caminho_nivel_2.add(s.soma, s.caminho)
Fim_se
Fim_enquanto
Enquanto (pilha.topo.lista == OU pilha.tamanho > nivel_1) faa
marca_grafo2(G, retorna_caminho(pilha))
pilha.desempilha
Fim_enquanto
Se (caminho_nivel_2.tamanho == 50) faa
sada_enquanto falso
Fim_se
Fim_enquanto
ordena_decrescente (caminho_nivel_2)
int_corte caminho_nivel_2.tamanho * A
Para (i 1 at int_corte) faa
caminho_nivel_2.remove_ultimo
Fim_para
Retorna caminho_nivel_2

O Procedimento 7 (construir_caminho_nivel_3 ()) tem como entrada o vetor


(caminho_nivel_2) com os caminhos de segundo nvel, um grafo grade G (matriz de
adjacncia) e como sada, uma soluo (S).
Na linha 1, a varivel numrica (int_sorteio) guarda o ndice selecionado
aleatoriamente do vetor (caminho_nivel_2). O vetor (v_caminho), na linha 2,
declarado para guardar um caminho selecionado no vetor (caminho_nivel_2), de
acordo com o valor definido pelo ndice. E, na linha 3, o caminho selecionado no
vetor (caminho_nivel_2) removido.

69

Na linha 5, o grafo grade G marcado com os vrtices do caminho


(v_caminho), seguindo a ideia do procedimento na seo 4.4.1. Na linha 6, o vetor
de inteiros (v_terminais) guarda os vrtices terminais (vrtices com grau 1) presentes
no grafo grade G, seguindo a ideia do procedimento na seo 4.1.
A linha 8 verifica o tamanho do vetor (v_terminais) no superior a 3
elementos. Caso verdadeiro, o grafo grade G apresenta menos de 3 vrtices com
grau igual a 1. Ento, na linha 9, o procedimento (repara_caminho (), disponvel na
seo 6.2.4) executado para finalizar a construo do caminho hamiltoniano no
grafo grade G.
A linha 11 verifica a quantidade de vrtices do caminho (v_caminho) igual a
quantidade de vrtices do grafo grade G. Se verdadeiro, na linha 12, o procedimento
(rolamento_dado (), disponvel na seo 4.6) executado para fazer o rolamento do
dado sobre o caminho (v_caminho). E, assim, uma soluo (S) definida com um
caminho, as faces do dado sobre o caminho e o somatrio das faces do dado.
Procedimento 7 Construo Terceiro Nvel.

Construir_caminho_nivel_3 ( )
Entrada:
caminho_nivel_2 (vetor com caminhos de segundo nvel)
G (Grafo)
Sada: S
//Inicio
1
int_sorteio seleciona_aleatorio [0 - caminho_nivel_2.tamanho]
2
v_caminho caminho_nivel_2[int_sorteio].caminho
3
caminho_nivel_2.remove(int_sorteio)
4
5
marca_caminho_no_grafo(v_caminho, G)
6
v_terminais localiza_vertices_terminais (G)
7
Se (vertices_terminais.tamanho < 3) faa
8
9
v_caminho repara_caminho(v_caminho, v_terminais, G)
10
Se (v_caminho.tamanho == |G(V)|) faa
11
12
rolamento_dado(v_caminho, S)
Fim_se
13
14
15 Fim_se
16
17 Retornar S

70

6.2.4 Procedimento de Reparao do Caminho Ramiltoniano


O Procedimento 8 (repara_caminho()) tem como entrada um vetor de
inteiros (v_caminho) com o caminho para ser reparado, outro vetor de inteiros
(v_terminais) com os vrtices de grau igual um, o grafo grade G (matriz de
adjacncia) e como sada, o vetor de inteiros (r_caminho) com o caminho
hamiltoniano.
A linha 1 declara a estrutura tipo pilha definida na seo 5. As linhas de
nmeros 2 a 4 armazenam na pilha os vrtices do caminho (v_caminho). A linha 3
adiciona na pilha os vrtices do caminho (v_caminho) at o penltimo vrtice.
A linha 6 adiciona na varivel (v) o ltimo vrtice do caminho (v_caminho). A
linha 7 adiciona na lista (lista_v) os vinhos do vrtice (v), com o procedimento
(vertices_adjacentes (), disponvel na seo 4.3). A linha 8 adiciona na pilha o ltimo
vrtice do caminho (v_caminho) com suas adjacncias.
A linha 10 define a varivel do tipo numrica (K) para guardar um valor igual
a quantidade de vrtices do grafo grade G, esse valor controla o limite mximo de
execues do lao mais externo.
O empilhamento entre as linhas 13 a 22 executam at a lista do elemento do
topo da pilha ficar vazia. A linha 14 armazena na varivel (v) o vrtice da lista do
topo da pilha que apresenta o maior grau no grafo grade G. Na linha 15, o vrtice de
maior grau selecionado ser removido da lista do topo da pilha para evitar ser
selecionado em iteraes futuras.
Na linha 16, dois procedimentos so executados para verifica o vrtice
selecionado

como

vivel

para

caminho.

No

primeiro,

procedimento

(ponto_isolamento(), disponvel na seo 4.2). No segundo, o procedimento


(vrtices_terminais(), disponvel na seo 4.1).
A linha 17 armazena na lista (lista_v) os vrtices adjacentes do vrtice (v). A
linha 18 adiciona na pilha o vrtice (v) e suas adjacncias na lista (lista_v). Na linha
19, o procedimento (marca_grafo1(), disponvel na seo 4.4.1), marca o vrtice (v)
no grafo grade G.

71

Procedimento 8 Reparao.de Caminho

repara_caminho( )
Entrada:
v_caminho (vetor de inteiros com caminho para ser reparado),
v_terminais(vetor de inteiros com os vrtices terminais),
G (grafo em matriz de adjacncia)
Saida: r_caminho (vetor de inteiros com caminho reparado)
//inicio
1
Pilha pilha
Para (i 0 at v_caminho.tamanho - 1) faa
2
3
pilha.add(v_caminho[i], )
Fim_para
4
5
6
v v_caminho.ultimo
7
lista_v vertices_adjacentes (v, G)
8
pilha.add(v, lista_v)
9
10 K |G(V)|
11
12 Para (j 0 at K ) faa
Enquanto( pilha.topo.lista ) faa
13
14
v vertice_maior_grau(pilha.topo.lista)
15
pilha.topo.lista.remove(v)
Se (ponto_isolamento(v, retorna_caminho(pilha), G) == T E
16
vertices_terminais(v, retorna_caminho(pilha), v_terminais, G) == T) faa
17
lista_v vertices_adjacentes (v, G)
18
pilha.add(v, lista_v)
19
marca_grafo1(G, retorna_caminho(pilha))
Fim_se
21
Fim_enquanto
22
23
Se(pilha.tamanho == |G(V)|) faa
24
25
r_caminho retorna_caminho(pilha)
26
jK
Contrario Se (pilha == ) faa
27
28
jK
Fim_se
29
30
Enquanto( pilha.topo.lista == ) faa
31
32
marca_grafo2(G, retorna_caminho(pilha))
33
pilha.desempilha
Fim_enquanto
34
35
36 Fim_para
37 Retorna r_caminho

72

As linhas de nmeros 24 a 29 verificam as condies de sada do lao mais


externo. A primeira condio de sada, na linha 24, verifica o tamanho da pilha igual
a quantidade de vrtices grafo grade G; caso verdadeiro, a linha 25 retorna o
caminho definido pelos vrtices na pilha e a linha 26 atualiza a varivel (j) com valor
mximo de iteraes para sair do lao. A segunda condio de sada, na linha 27,
verifica a pilha vazia; se verdadeiro, a linha 31 atualiza a varivel (j) com valor
mximo para sair do lao.
O desempilhamento ocorre entre as linhas 31 a 34. Enquanto verdadeiro, a
linha 32 marca o grafo grade G com o procedimento (marca_grafo2(), disponvel na
seo 4.4.2). E, a linha 33 realiza o desempilhamento.
A linha 37 retorna o vetor de inteiros (r_caminho) com um caminho
hamiltoniano; ou, um vetor vazio.

73

RESULTADOS
Os casos teste para o problema Hiker Dice foram os tabuleiros com

dimenso n x n. O dado foi posicionado no canto superior esquerdo dos tabuleiros


sempre com uma configurao conhecida: a face 1, voltada para baixo; a face 6,
para cima; a face 2, para frente; a faces 5, para trs; a face 4, para direita e; a face
3, para esquerda.
Este captulo descreve os resultados encontrados; na seo 7.1, sero
mostrados os resultados para o algoritmo exato e, na seo 7.3, sero mostrado os
resultados dos algoritmos heursticos.

7.1

RESULTADO EXATO
Na Tabela 1, a primeira coluna, indica o tabuleiro testado; a segunda coluna,

o nmero de solues encontradas; a terceira coluna, o melhor valor objetivo das


solues e; a ltima coluna, o tempo gasto em cada experimento.
No tabuleiro 4x4 foi encontrada uma soluo com valor objetivo 64 e tempo
de 0,57 segundos.
No tabuleiro 5x5 foram encontradas quatro (4) solues, com valor objetivo
100 e tempo de 0,60 segundos.
No tabuleiro 6x6 foi encontrada 1 soluo com 145 de valor objetivo e tempo
de 1,80 segundos.
No tabuleiro 7x7 foram encontradas 3 solues, com 203 de valor objetivo e
tempo de 2,16 minutos. E, no tabuleiro 8x8 foi encontrada uma (1) soluo com 268
de valor objetivo e tempo de 2,07 horas. As solues da Tabela 1 podem ser
analisadas no Apndice 2.
Tabela 1 Resultados exatos encontrados.

Tabuleiro
4x4
5x5
6x6
7x7
8x8

N Solues
1
4
1
3
1

Valor Objetivo
64
100
145
203
268

Tempo
0,57 s
0,60 s
1,80 s
2,16 m
2,07 h

74

7.2

REFINAMENTO DOS PARMENTROS PARA AS HEURSTICAS

7.2.1 Metodologia para Refinamento dos Parmetros


Uma das etapas mais importantes nos experimentos computacionais o
refinamento ou ajuste dos parmetros. nesta etapa que deve ser encontrado um
conjunto de parmetros que definem uma configurao para ser executada junto ao
algoritmo desenvolvido.
Um conjunto de parmetros para um algoritmo pode apresentar um mundo
de configuraes (combinaes dos parmetros diferentes); neste mundo, existe um
pequeno grupo de configuraes que maximizam o desempenho do algoritmo
desenvolvido.
Neste trabalho a metodologia para ajuste dos parmetros seguiu o padro:
1. Determinar uma faixa de valores para cada parmetro do algoritmo;
2. Realizar

execuo

de

todas

as

combinaes

dos

parmetros

(configuraes);
3. Filtrar as configuraes mais favorveis;
4. Usar teste no-paramtrico de Kruskal-Wallis para identificar diferenas
significativas nas configuraes selecionadas no passo anterior.

7.2.1.1 Exemplo de Faixa de Valores para os Parmetros


Imagine, um algoritmo qualquer para um problema qualquer com dois
parmetros: nmero de iteraes (N_ITERACAO) e um fator de construo de
soluo (W). Poderamos ter as seguintes faixas de valores: N_ITERACAO = {80,
100, 140} e W={0,3; 0,5}. Isto, em um processo combinatrio 3*2 = 6 configuraes
definidas pelas combinaes dos parmetros.
Uma combinao vlida com 100 iteraes e fator de construo de soluo
0,3 seria, por exemplo: a configurao (conf_it_100_w_3).

7.2.1.2 Exemplo de Filtragem das Configuraes


Seguidamente, cria-se uma tabela para selecionar as configuraes mais
favorveis. A tabela contm uma coluna configurao (descreve as configuraes),

75

uma coluna mediana (para listar as medianas pelo valor objetivo das trinta (30)
execues de cada configurao) e uma coluna mdia (para listar as mdias do
tempo das trinta (30) execues de cada configurao). A Tabela 2 mostra um
exemplo para os valores obtidos em um caso teste.
So usados dois critrios para selecionar uma quantidade arbitrria de
configuraes:
1. Maior mediana pelo valor objetivo;
2. Em caso das configuraes com mediana empatada usar a menor mdia
de tempo das configuraes.
Por exemplo, supondo uma quantia de 3 configuraes para serem
selecionadas.
Na Tabela 2, so selecionadas as configuraes (conf_80_w_4 e
conf_100_w_3) por causa das maiores medianas pelo valor objetivo, ainda precisase selecionar mais uma configurao para um total de 3, como as configuraes
(conf_80_w_3 e conf_140_w_3 ) esto empatadas pela mediana do valor objetivo, a
configurao (conf_80_w_3) selecionada por apresentar a menor mdia de tempo.
Tabela 2 Caso de Teste: tabuleiro 3x3.

Configurao

Mediana (V. O.) Media (tempo)

conf_80_w_3

30

0,02

conf_80_w_4

32

0,03

conf_100_w_3

32

0,07

conf_100_w_4

25

0,04

conf_140_w_3

30

0,03
V.O. (Valor Objetivo)

7.2.1.3 Teste no-paramtrico de Kruskal-Wallis (1952)


O processo de seleo das configuraes estabelecido pelos critrios no
passo anterior (estatstica descritiva) pode no apresentar um total mximo de
confiana na escolha da configurao para executar junto ao algoritmo. Por

76

exemplo, uma configurao pode apresentar alguma diferena significativa, seja


relacionada ao valor objetivo ou o tempo gasto pelo algoritmo.
Com objetivo de identificar essa possvel diferena no conjunto de
configuraes, utilizado o teste no-paramtrico de Kruskal-Wallis (1952)5, que
verificar a existncia de diferenas no conjunto de configuraes. A hiptese nula
indica que as configuraes no apresentam diferenas significativas, e qualquer
uma delas pode ser utilizada de forma indiscriminada. Na hiptese alternativa, indica
que existe pelo menos uma configurao que apresenta alguma diferena.
Primeiro, o teste de Kruskal-Wallis aplicado para os valores objetivos das
configuraes. Se verdade, a hiptese alternativa confirmada e existe a diferena
entre algum par de configuraes; desta forma, selecionar a configurao que
apresente maior mediana de valor objetivo.
Depois, o teste de Kruskal-Wallis aplicado aos tempos das configuraes.
Caso verdade, a hiptese nula confirmada e existe indiferena das configuraes
e, qualquer uma delas podendo ser selecionada indiscriminadamente. Caso
contrrio, a hiptese alternativa confirma a diferena significativa de tempo; nesse
caso, selecionar a configurao que apresente a menor mdia de tempo.

7.2.2 Ajuste dos Parmetros


Para cada algoritmo foi executado todas as configuraes definidas pelas
combinaes dos parmetros. Cada configurao foi executada num total de 30
vezes. O teste no-paramtrico de Kruskal-Wallis foi aplicado com nvel de
significncia de 5%. Os Resultados dos experimentos foram processados com ajuda
do software de anlise estatstica R6.

Segundo Cmara (2001, p. 57), "o objetivo do teste de Kruskal-Wallis (1952) ver se as

diferentes k amostras se originam da mesma populao".


6

R Core Team (2012). R: A language and environment for statistical computing. R

Foundation for Statistical Computing, Vienna, Austria. ISBN 3-900051-07-0, URL


project.org/.

http://www.R-

77

Os tabuleiros de ordem 6x6 a 8x8 foram os casos teste para o refinamento


dos parmetros. As configuraes testadas para cada algoritmo, nos tabuleiros 6x6
e 7x7, apresentaram poucas variedades de solues, que convergiam sempre para
o melhor resultado de cada tabuleiro. Desta forma, o caso teste referente ao
tabuleiro 8x8 foi selecionado para o ajuste dos parmetros dos algoritmos, devido a
maior variedade de solues encontradas.
Na seo 7.2.2.1, apresenta-se o refinamento do algoritmo Busca Local, na
seo 7.2.2.2, apresenta-se o refinamento do algoritmo GRASP e na seo 7.2.2.3,
apresenta-se o refinamento do algoritmo Gentico.

7.2.2.1 Busca Local


O algoritmo de Busca Local (seo 6.1.1) precisa ajustar os parmetros:
nmero de solues vizinhas (n_vizinhos) e; tamanho do intervalo que ser
reestruturado no caminho (taxa_in). As faixas dos valores dos parmetros so:
n_vizinhos = {8; 10; 15};
taxa_in = {0,5; 0,55; 0,6}.
Definida as faixas de valores para cada parmetro no algoritmo de Busca
Local, foram coletados os dados das 30 execues de cada configurao no caso
teste (tabuleiro 8x8). A Tabela 7, no Apndice 3, mostra as medianas pelo valor
objetivo e as mdias de tempo da coleta dos dados para todas as configuraes. Na
Tabela 3 apresentado um total de 5 configuraes selecionadas da Tabela 7 (ver
Apndice 3), seguindo a filtragem definida na seo 7.2.1.2.
Ao aplicar o teste de Kruskal-Wallis nas configuraes da Tabela 3: para os
valores objetivos foi encontrado o p-valor de 0,3435 (superior ao nvel de
significncia de 5%), mostrando-se significativamente indiferentes, desta forma, no
excluindo nenhuma configurao da tabela e; para os tempos das configuraes foi
encontrado o p-valor de 0,02702 (inferior ao nvel de significncia de 5%),
mostrando-se diferentes estatisticamente, e assim, a seleo da configurao sendo
realizada a critrio do menor tempo.

78

Tabela 3 - Configuraes filtradas para o Busca Local no Tabuleiro 8x8.

Configuo

Mediana (V.O)

Mdia (tempo)

bl_r05_v10

236

0,37

bl_r05_v15

239

0,52

bl_r055_v10

239

0,36

bl_r06_v15

237

0,53

bl_r06_v8

236

0,47
Valor Objetivo (V.O)

O teste estatstico mostrou diferenas significativas relacionadas aos tempos


das configuraes. Assim sendo, nenhuma das configuraes usada de forma
indiscriminada. Ento, a seleo da configurao na Tabela 3 realizada pela
anlise da menor mdia de tempo. Logo, a configurao (bl_r055_v10)
selecionada.

7.2.2.2 GRASP
O algoritmo GRASP (seo 6.1.2) precisa ajustar os parmetros: nmero de
iteraes (N_ITERACAO); tamanho da lista de candidatos restrita pelo operador
construtivo guloso aleatrio (ALFA) e; tamanho de construo do caminho de forma
gulosa pelo operador construtivo guloso aleatrio (TAXA_G):
N_ITERACAO = {100; 120; 140};
ALFA = {0,4; 0,5; 0,6};
TAXA_G = {0,5; 0,55; 0,6}.
Com as faixas de valores definidas para cada parmetro no algoritmo
GRASP, foram coletados os dados das 30 execues de cada configurao no caso
teste (tabuleiro 8x8). A Tabela 8, no Apndice 3, mostra as medianas pelo valor
objetivo e as mdias de tempo da coleta de dados. A Tabela 4 exibe um total de 6
configuraes selecionadas na Tabela 8, segundo a filtragem definida na seo
7.2.1.2.
Na execuo do teste Kruskal-Wallis, relacionado aos valores objetivos e
tempos nas configuraes da Tabela 4, foram observados os seguintes resultados:
para os valores objetivos foi obtido o p-valor de 0,08166 (superior ao nvel de
significncia de 5%), mostrando-se como indiferentes estatisticamente e; para os

79

tempos foi encontrado o p-valor de 0,001645 (inferior ao nvel de significncia de


5%), mostrando-se diferentes estatisticamente.
A existncia de diferenas significativas demostrado pelo teste estatstico
relacionado aos tempos no permite a seleo da configurao de forma arbitrria.
Portanto, a seleo de uma configurao na Tabela 4 realizada com a anlise da
menor mdia de tempo. Nesse caso, a configurao (grasp_it120_a06_ta06)
selecionada.
Tabela 4 - Configuraes filtradas para o GRASP no Tabuleiro 8X8.

Configurao

Mediana (V.O)

Mdia (Tempo)

grasp_it120_a05_ta06
grasp_it120_a06_ta055

252
252

7,96
6,87

grasp_it120_a06_ta06

253

6,76

grasp_it140_a05_ta06

253

9,62

grasp_it140_a06_ta055

253

8,93

grasp_it140_a06_ta06

253

7,45
Valor Objetivo (V.O)

7.2.2.3 Gentico
O algoritmo Gentico (seo 6.1.3) precisa ajustar os parmetros para: o
tamanho da populao; probabilidade de recombinao (P_RECOMBINACAO) e;
probabilidade de mutao (P_MUTACAO):
T_POPULACAO = {60; 80; 100};
P_RECOMBINACAO = {0,75; 0,8; 0,85};
P_MUTACAO = {0,25; 0,2; 0,15}.
Estabelecidas as faixas de valores para cada parmetro no algoritmo
Gentico, foram reunidos os dados das 30 execues de cada configurao para o
caso teste (tabuleiro 8x8). No Apndice 3, a Tabela 9, exibe as medianas pelo valor
objetivo e as mdias de tempo da coleta dos dados. Na Tabela 5, so mostradas 6
configuraes selecionadas na Tabela 9, de acordo com a filtragem na seo
7.2.1.2.

80

Ao efetuar o teste no-paramtrico (Kruskal-Wallis) relacionado aos valores


objetivos e tempos das configuraes na Tabela 5, apresentaram os resultados: para
os valores objetivos foi calculado o p-valor = 0,6886 (superior ao nvel de
significncia de 5%); quanto ao tempo, foi calculado o p-valor 0,08185 (inferior ao
nvel de significncia de 5%). Ento, os testes indicaram estatisticamente
indiferenas nos valores objetivos e tempos das configuraes. Desta forma, alguma
das configuraes na Tabela 5 poder ser selecionada para o algoritmo
desenvolvido de forma indiscriminada.

Tabela 5 - Configuraes filtradas para o Gentico no Tabuleiro 8x8.

Configurao

Mediana (V.O)

Mdia (Tempo)

gen_p80_r08_m015

242

0,27

gen_p80_r085_m025

241

0,34

gen_p80_r085_m015
gen_p100_r075_m025
gen_p100_r075_m02

240

0,29

240
240

0,30
0,29

gen_p100_r08_m015

240

0,31
Valor Objetivo (V.O)

81

7.3

RESULTADOS HEURSTICOS
Nessa seo sero apresentados os dados coletados pelas execues dos

algoritmos com as seguintes configuraes: para o Busca Local a configurao


(bl_r055_v10); para o GRASP a configurao (grasp_it120_a06_ta06) e; para o
Gentico a configurao (gen_p100_r075_m02).
Cada configurao selecionada foi executada 30 vezes em cada tabuleiro
testado.

7.3.1 Resultados dos Algoritmos


A Tabela 6 definida por trs colunas principais: a primeira, indica os
resultados heursticos do algoritmo de Busca Local; a segunda, indica os resultados
heursticos do algoritmo Gentico e; a terceira, indica os resultados do algoritmo
GRASP.
Cada coluna principal apresenta trs subcategorias de colunas: a primeira,
indica o nmero de solues (N.S) encontradas com o mesmo valor objetivo; a
segunda, indica o maior valor objetivo (V.O) da soluo encontrado pelo algoritmo e;
a terceira, indica o tempo gasto por um algoritmo no final da execuo.
Para comparao entre os algoritmos so usados os seguintes critrios:
primeiro, o valor objetivo mximo; segundo, o maior nmero de solues
encontradas e; terceiro, em caso de empate, o menor tempo gasto.
Os algoritmos no tabuleiro 5x5, ver Tabela 6, apresentam os valores
objetivos iguais (com somatrio de 100 unidades de faces do dado); entretanto, o
algoritmo GRASP sobressai em relao aos demais, devido o maior nmero de
solues encontradas.
Observando a Tabela 6, o algoritmo GRASP apresenta-se com os melhores
resultados relacionados aos valores objetivos, entre os tabuleiros 6x6 a 12x12;
porm, no quesito tempo, mostra-se mais custoso em relao aos demais
algoritmos, pelo fato de ser estruturado com dois operadores de solues. O
algoritmo GRASP no apresenta resultados heursticos a partir do tabuleiro 13x13.
O algoritmo Busca Local com valor objetivo (640) vence o algoritmo
Gentico com valor objetivo (624), no tabuleiro 13x13; todavia, no tabuleiro 14x14, o

82

algoritmo Gentico com valor objetivo (715) vence o algoritmo Busca Local com
valor objetivo (712).
Tabela 6 Resultados Heursticos.

Busca Local

Gentico

GRASP

Tabuleiro N.S

V.O

Tempo N.S

V.O

Tempo N.S

V.O

Tempo

5x5

100

0,94s

100

0,13s

100

1,27s

6x6

142

0,21s

137

0,17s

145

4,5s

7x7

185

0,19s

191

0,107s

197

3,36s

8x8

248

0,57s

244

0,319s

255

6,26s

9x9

307

0,36s

306

0,31s

325

4,67s

10x10

368

0,46s

368

0,32s

383

7,75s

11x11

449

0,54s

452

0,92s

456

2,80s

12x12

532

2,7s

540

0,49s

545

30,04m

13x13

640

2,2m

624

2,34m

14x14

712

3,2m

715

2,71m

Nmero de Solues (N.S), Valor Objetivo (V.O)

83

CONCLUSO
Nesta seo, ser apresentado a concluso desta pesquisa, identificando

todos os passos do trabalho, anlise, relacionamento e prova de finalizao dos


objetivos.
O primeiro passo deste trabalho foi a modelagem do problema Hiker Dice. O
tabuleiro foi representado pelo grafo grade G. O dado foi representado por uma
estrutura que permite realizar o movimento (rolamento) no tabuleiro.
Para buscar as solues exatas nos tabuleiros menores, foi construdo um
Backtrancking aparelhado com um retorno realizado atravs de regras lgicas e
limite da melhor soluo encontrada. O algoritmo executa em uma estrutura pilha
com elementos adaptados com dois compartimentos. O primeiro compartimento,
guarda uma posio corrente (casa do tabuleiro) do caminho em construo. O
segundo compartimento, uma fila com as ramificaes (vizinhos) da posio
corrente.
O algoritmo exato esgotado nos casos maiores em virtude da exploso em
tempo de processamento. Tornando-se necessrio o uso dos algoritmos heursticos
adaptados com operadores para o problema. Os operadores para o problema Hiker
Dice foram criados at trs, a saber: de reestruturao, de recombinao com duas
solues e construtivo guloso aleatrio. Estes, foram adaptados aos algoritmos
(Busca Local, Gentico e GRASP), para buscarem solues nos tabuleiros maiores
cujo algoritmo exato levaria muito tempo para encontrar a soluo.
Os experimentos nos tabuleiros 4x4 a 8x8 puderam ser finalizados pelo
algoritmo exato, encontrando no trmino de cada execuo as melhores solues.
Os resultados encontrados pelo algoritmo exato apresentaram em alguns tabuleiros
mais de uma soluo com o mesmo valor objetivo.
Os experimentos tambm foram realizados com os algoritmos (Busca Local,
GRASP e Gentico) adaptados com os operadores propostos. Os experimentos
foram realizados em trs etapas. Na primeira etapa, o ajuste dos parmetros,
adotando-se para cada algoritmo a melhor configurao encontrada por uma regra
de filtragem definida e o teste no-paramtrico (Kruskal-Wallis). Na segunda etapa,
execuo dos algoritmos heursticos com as configuraes encontradas pelo
processo de ajuste dos parmetros.

84

E, na terceira etapa, comparao entre os resultados encontrados pelos


algoritmos (Busca Local, Gentico e GRASP) nos tabuleiros 12x12 14x14. No
quesito, melhores valores objetivos encontrados, os resultados das comparaes
sugerem o GRASP com melhor potencial de desempenho, nos tabuleiros 5x5
12x12. Entretanto, no quesito, menores tempos gastos, o Gentico apresenta-se
com os melhores tempos, nos tabuleiros 5x5 a 14x14.

8.1

TRABALHOS FUTUROS
Algumas melhorias podem ser efetivadas no estudo realizado no presente

trabalho. A lista seguinte mostra algumas possibilidades:


1. Pesquisar estruturas de dados mais elaboradas para ajudar no processo
de construo do caminho hamiltoniano em grafos grade;
2. Criar uma nova verso do operador construtivo guloso aleatrio, agora
com 4 nveis de construo, onde os trs primeiros nveis apresentaram
caractersticas construtiva, gulosa e aleatria;
3. Criar um novo operador de recombinao para trs solues, agora
usando dois pontos de recombinao entre os caminhos das solues
envolventes;

4. Realizar experimentos em tabuleiros maiores.

APNDICE 1 - CONCEITOS BSICOS EM TEORIA DOS GRAFOS


Um grafo uma estrutura de abstrao bastante til na representao e
soluo de diversos tipos de problemas. Matematicamente um grafo formaliza
relaes de interdependncia existentes entre os elementos de um conjunto. As
relaes entre os elementos do conjunto so caracterizadas por traos ou setas
ligando os pontos e que so denominadas, respectivamente, arestas e arcos. Os
termos ns e vrtices so empregados na literatura usualmente como sinnimos.
Ser denominado por N, N={1,2,...,n} o conjunto que contm os n vrtices do grafo,
e por M, M={1,2,...,m} o que contm as m arestas. Um grafo pode ento ser definido
como uma dupla ordenada G = (N, M). Na Figura 30 o conceito de grafo e seus
componentes. As arestas do conjunto M so representadas pelos vrtices de suas
extremidades.
Figura 30 - Grafo (N, M).

Goldbarag e Goldbarg (2012), apresentam os sequintes conceitos sobre


grafos:
Um grafo G=(N,M) rotulado se existem atribuies associadas a suas
arestas ou vrtices (tanto numricas como alfabticas);
Um grafo G=(N,M) ponderado se existem valores numricos (pesos)
associados s suas arestas ou vrtices;
Um passeio ou percurso uma sequncia finita de vrtices e arestas x0,
a1, x1, a2, ..., xk-1, ak, xk comeando e terminando com vrtices tais que
xi-1 e xi so os vrtices terminais da aresta ai,1 i k.;
Uma Cadeia ou Trilha um passeio sem repetio de arestas. Um
Caminho uma cadeia sem repetio de vrtices;

86

Em um grafo G=(N,M), no ponderado, o comprimento de um caminho


o nmero de arestas desse caminho;
Em um grafo G=(N,M), ponderado, o comprimento de um caminho a
soma dos pesos das arestas desse caminho;
O grau d(xi), (ou valncia) de um vrtice xi em grafo no direcionado
igual ao nmero de arestas incidentes no vrtice;
Um grafo G = (N, M) dito bipartido quando seu conjunto de vrtice N
pode ser dividido em dois conjuntos N1 e N2 tais que N1 N2 = e N1 U
N2 = N e somente existem arestas em G ligando algum vrtice de N1 com
algum vrtice de N2 e vice-versa.
Um caminho Hamiltoniano um caminho em G que, passando por todos
os vrtices de G, os visite apenas uma vez;
Um ciclo hamiltoniano um caminho hamiltoniano fechado.
A Figura 31 exemplifica um caminho fechado marcando nos crculos a
sequncia de arestas que compem o caminho. Os arcos indicam o sentido do
caminho.
Figura 31 - Exemplo de Caminho fechado em um grafo G.

Um grafo grade um grafo G=(N,M) representado por uma grade retangular


completa, em que os encontros das grades so caracterizados por vrtices. A Figura
32 exemplifica um grafo grade.

87

Figura 32 Exemplo de um grafo grade.

Fonte: Adaptado de Almeida (2010).

Um grafo grade pode ser definido por um produto cartesiado de grafos


caminhos. Definem Goldbarg e Goldbarg (2012, p. 52): Dados os grafos G1 = (N1,
M1) e G2 = (N2, M2), N1 = {u1, ..., ur}, N2 = {u2, ..., us}, o produto cartesiano de G1 e G2
o grafo G = (N, M), onde N = {N1 x N2}, o produto cartesiano dos conjuntos N1 e
N2. A Figura 33 exemplifica um protudo cartesiano entre dois grafos caminhos.
Figura 33 - Produto cartesiano entre dois grafos caminhos resulta em grafo grade.

Fonte: Adaptado de Goldbarg e Goldbarg (2012, p. 52).

Um emparelhamento (matching) M em um grafo G um conjunto de arestas


no adjacentes par a par. Duas arestas de M no compartilham um mesmo vrtice.
Se todos os vrtices do grafo so incidentes a exatamente uma aresta, ento
teremos um emparelhamento perfeito. Explicam Goldbarg e Goldbarg (2012, p. 308):

88

Dado um grafo G = (N, M) um emparelhamento em G ou matching em G,


definido pelo conjunto E de arestas tal que nenhum vrtice de G seja incidente em
mais de uma aresta de E.
A Figura 34 representa um grafo grade 3x3 em uma matriz de adjacncia e
em uma lista de adjacncia. Para um problema especifico pode-se usar os dois tipos
de estrutura.
Figura 34 Grafo grade 3x3 em matriz e lista de adjacncia.

Fonte: Adaptado de Netto (2006).

89

APNDICE 2 - RESULTADOS EXATOS


C: Caminho
R: Faces do Dado
S: Soma das Faces

TABULEIRO 4x4

Soluo 1
C: 0 1 2 3 7 11 15 14 13 9 10 6 5 4 8 12
R: 0 4 6 3 2 4 5 6 2 4 6 5 4 2 6 5
S: 64
Tempo: 0.5736

TABULEIRO 5x5

Soluo 1
C: 0 1 2 3 8 7 12 11 6 5 10 15 20 21 16 17 22 23 24 19 18 13 14 9 4
R: 0 4 6 3 2 6 4 5 6 3 5 4 2 6 4 5 6 3 1 5 3 6 5 4 2
S: 100
Tempo: 0.57565

Soluo 2
C: 0 5 6 1 2 3 4 9 8 7 12 17 18 13 14 19 24 23 22 21 16 11 10 15 20
R: 0 2 4 1 5 6 2 4 6 3 5 4 6 5 3 6 4 5 3 2 6 5 4 6 3
S: 100
Tempo: 0.57565

Soluo 3
C: 0 5 10 11 16 15 20 21 22 17 18 23 24 19 14 13 8 9 4 3 2 1 6 7 12
R: 0 2 6 4 5 6 3 5 4 6 2 4 1 2 6 4 5 6 3 5 4 2 6 4 5

90

S: 100
Tempo: 0.57565

Soluo 4
C: 0 5 10 15 20 21 16 17 18 13 12 11 6 1 2 7 8 3 4 9 14 19 24 23 22
R: 0 2 6 5 1 4 5 6 2 3 6 4 5 3 6 5 4 6 2 4 5 3 2 6 5
S: 100

TABULEIRO 6x6

Soluo 1
C: 0 6 12 13 19 18 24 25 26 20 14 8 7 1 2 3 4 5 11 10 9 15 16 17 23 22 21 27 28 29
35 34 33 32 31 30
R: 0 2 6 4 5 6 3 5 4 6 3 1 5 4 1 3 6 4 5 6 2 3 6 4 5 6 2 3 6 4 5 6 2 1 5 6
S: 145
Tempo: 1.795719

TABULEIRO 7x7

Soluo 1
C: 0 1 2 3 10 9 8 7 14 21 22 15 16 23 30 37 36 29 28 35 42 43 44 45 46 47 48 41 34
33 40 39 38 31 32 25 24 17 18 19 26 27 20 13 6 5 4 11 12
R: 0 4 6 3 2 6 5 1 4 6 5 4 1 5 6 2 4 6 5 4 2 6 5 1 2 6 5 4 2 6 4 5 3 6 5 4 6 2 4 5 6 3 5 4
26546
S: 203
Tempo: 129.886441

Soluo 2
C: 0 1 2 3 10 9 8 7 14 21 22 15 16 23 30 37 36 29 28 35 42 43 44 45 46 47 48 41 34
33 40 39 38 31 32 25 24 17 18 19 26 27 20 13 6 5 12 11 4

91

R: 0 4 6 3 2 6 5 1 4 6 5 4 1 5 6 2 4 6 5 4 2 6 5 1 2 6 5 4 2 6 4 5 3 6 5 4 6 2 4 5 6 3 5 4
26456
S: 203
Tempo: 129.886441

Soluo 3
C: 0 1 2 3 10 9 16 15 8 7 14 21 22 23 30 29 28 35 42 43 36 37 44 45 38 31 24 17 18
11 4 5 6 13 12 19 20 27 26 25 32 33 34 41 40 39 46 47 48
R: 0 4 6 3 2 6 4 5 6 3 5 4 6 3 2 6 5 4 2 6 4 5 6 3 5 4 2 3 1 5 6 4 1 5 4 6 5 3 6 4 2 6 5 3
64265
S: 203
Tempo: 129.886441

TABULEIRO 8X8

Soluo 1
C: 0 8 16 24 32 33 34 35 27 19 18 26 25 17 9 1 2 10 11 3 4 12 20 21 13 5 6 7 15 14
22 23 31 39 38 30 29 28 36 37 45 44 52 53 54 46 47 55 63 62 61 60 59 51 43 42 41
49 50 58 57 56 48 40
R: 0 2 6 5 1 4 6 3 5 4 6 5 3 6 4 1 5 4 6 5 3 6 4 2 6 5 3 2 6 3 5 6 4 1 5 4 6 3 5 6 4 5 1 4
65364532463546536453
S: 268
Tempo: 9746.392253

92

APNDICE 3 - RESULTADOS DOS REFINAMENTOS DOS PARMENTROS

Tabela 7 Coleta de dados das configuraes aplicada ao Busca Local no Tabuleiro 8x8.

Configurao

Mediana (V. O.)

Media (Tempo/s)

bl_r05_v8

235

0,32

bl_r05_v10

236

0,37

bl_r05_v15

239

0,52

bl_r055_v8

235

0,40

bl_r055_v10

239

0,36

bl_r055_v15

236

0,60

bl_r06_v8

236

0,47

bl_r06_v10

236

0,50

bl_r06_v15

237

0,53
V. O. (Valor Objetivo)

93

Tabela 8 - Coleta de dados das configuraes aplicada ao GRASP no Tabuleiro 8x8.

Configuraes

Mediana (V. O.)

Media (Tempo/s)

grasp_it100_a04_ta05

250

5,7

grasp_it100_a04_ta055

251

5,6

grasp_it100_a04_ta06

250

6,15

grasp_it100_a05_ta05

250

5,61

grasp_it100_a05_ta055

250

6,5

grasp_it100_a05_ta06

250,5

6,7

grasp_it100_a06_ta05

250

5,43

grasp_it100_a06_ta055

251,5

4,98

grasp_it100_a06_ta06

251

5,51

grasp_it120_a04_ta05

250

6,88

grasp_it120_a04_ta055

251

7,24

grasp_it120_a04_ta06

250

9,07

grasp_it120_a05_ta05

250

8,17

grasp_it120_a05_ta055

251,5

8,07

grasp_it120_a05_ta06

252

7,96

grasp_it120_a06_ta05

250

6,30

grasp_it120_a06_ta055

252

6,87

grasp_it120_a06_ta06

253

6,76

grasp_it140_a04_ta05

250

9,8

grasp_it140_a04_ta055

251

10,1

grasp_it140_a04_ta06

250

9,55

grasp_it140_a05_ta05

250

7,78

grasp_it140_a05_ta055

251,5

8,28

grasp_it140_a05_ta06

253

9,62

grasp_it140_a06_ta05

250

9,26

grasp_it140_a06_ta055

253

8,93

grasp_it140_a06_ta06

253

7,45
V. O. (Valor Objetivo)

94

Tabela 9 - Coleta de dados das configuraes aplicada ao Gentico no Tabuleiro 8x8.

Configurao

Mediana (V. O.)

Media (Tempo/s)

gen_p60_r075_m025

239

0,41

gen_p60_r075_m02

239,5

0,42

gen_p60_r075_m015

239

0,41

gen_p60_r08_m025

240

0,49

gen_p60_r08_m02

240

0,44

gen_p60_r08_m015

240

0,50

gen_p60_r085_m025

240

0,49

gen_p60_r085_m02

240

0,54

gen_p60_r085_m015

240

0,48

gen_p80_r075_m025

238

0,32

gen_p80_r075_m02

239

0,28

gen_p80_r075_m015

238

0,26

gen_p80_r08_m025

240

0,36

gen_p80_r08_m02

240

0,32

gen_p80_r08_m015

242

0,27

gen_p80_r085_m025

241

0,34

gen_p80_r085_m02

239

0,30

gen_p80_r085_m015

240

0,29

gen_p100_r075_m025

240

0,30

gen_p100_r075_m02

240

0,29

gen_p100_r075_m015

240

0,32

gen_p100_r08_m025

238

0,37

gen_p100_r08_m02

238

0,32

gen_p100_r08_m015

240

0,31

gen_p100_r085_m025

240

0,36

gen_p100_r085_m02

239

0,34

gen_p100_r085_m015

238

0,35
V. O. (Valor Objetivo

95

APNDICE 4 - RESULTADOS HEURISTICOS DO BUSCA LOCAL


C: Caminho
R: Faces do Dado
S: Soma das Faces

TABULEIRO 5X5

Soluo 1
C: 0 5 10 15 20 21 16 17 18 13 12 11 6 1 2 7 8 3 4 9 14 19 24 23 22
R: 0 2 6 5 1 4 5 6 2 3 6 4 5 3 6 5 4 6 2 4 5 3 2 6 5
S: 100
Objetivo: 100
Tempo: 0.9456

TABULEIRO 6X6

Soluo 1
C: 0 1 2 3 9 8 7 6 12 18 24 25 26 20 19 13 14 15 16 10 4 5 11 17 23 22 21 27 28 29
35 34 33 32 31 30
R: 0 4 6 3 2 6 5 1 4 6 3 5 4 6 5 3 6 4 1 2 6 3 2 4 5 6 2 3 6 4 5 6 2 1 5 6
S: 142
Objetivo: 142
Tempo: 0.20736

TABULEIRO 7X7

Soluo 1
C: 0 1 2 3 4 5 6 13 12 11 10 9 8 7 14 15 16 17 24 23 30 31 32 25 18 19 20 27 26 33
34 41 40 39 38 37 36 29 22 21 28 35 42 43 44 45 46 47 48

96

R: 0 4 6 3 1 4 6 2 4 5 3 2 4 5 1 4 6 3 2 6 4 2 3 6 4 5 3 6 5 4 6 2 4 5 3 2 4 6 3 5 6 2 1 3
64136
S: 185
Objetivo: 185
Tempo: 0.19904

TABULEIRO 8X8

Soluo 1
C: 0 1 2 3 11 10 9 8 16 17 18 26 25 24 32 33 34 42 41 40 48 56 57 49 50 58 59 51
43 35 27 19 20 12 4 5 13 21 22 14 6 7 15 23 31 39 47 46 45 37 38 30 29 28 36 44
52 60 61 53 54 55 63 62
R: 0 4 6 3 2 6 5 1 4 5 3 6 5 1 4 5 3 6 5 1 4 6 5 4 1 5 3 1 4 6 3 1 2 4 5 6 4 1 2 4 5 6 4 1
36453654635423624564
S: 248
Objetivo: 248
Tempo: 0.57202

TABULEIRO 9X9

Soluo 1
C: 0 1 2 3 12 11 10 9 18 19 20 29 28 27 36 37 38 47 46 45 54 55 56 65 64 63 72 73
74 75 66 57 48 39 30 21 22 13 4 5 6 7 8 17 16 15 14 23 32 31 40 41 42 43 34 33 24
25 26 35 44 53 62 71 80 79 70 61 52 51 50 49 58 59 60 69 68 67 76 77 78
R: 0 4 6 3 2 6 5 1 4 5 3 6 5 1 4 5 3 6 5 1 4 5 3 6 5 1 4 5 3 2 1 5 6 2 1 5 4 6 3 2 4 5 3 6
5124563542645624532456413245146245146
S: 307
Objetivo: 307
Tempo: 0.36204

97

TABULEIRO 10X10

Soluo 1
C: 0 1 2 3 4 5 6 7 8 9 19 18 17 16 15 14 13 12 11 10 20 21 22 23 24 25 26 27 28 29
39 38 37 36 35 34 33 32 31 30 40 41 51 50 60 61 62 52 42 43 44 45 46 47 48 49 59
58 57 56 55 54 53 63 64 65 75 74 73 72 71 70 80 81 82 83 84 85 86 76 66 67 68 69
79 78 77 87 88 89 99 98 97 96 95 94 93 92 91 90
R: 0 4 6 3 1 4 6 3 1 4 2 1 5 6 2 1 5 6 2 1 3 2 4 5 3 2 4 5 3 2 6 3 1 4 6 3 1 4 6 3 5 6 4 5
146513641364562156236456215635423546324564124
56413641364
S: 368
Objetivo: 368
Tempo: 0.46084

TABULEIRO 11X11

Soluo 1
C: 0 1 2 3 4 5 6 7 8 9 10 21 20 19 18 17 16 15 14 13 12 11 22 23 24 25 26 37 36 35
34 33 44 45 46 57 56 55 66 67 68 79 78 77 88 89 100 99 110 111 112 113 102 101
90 91 80 69 58 47 48 49 38 27 28 29 30 31 32 43 42 41 40 39 50 51 52 53 54 65 64
63 62 61 60 59 70 71 72 73 74 75 76 87 86 85 84 83 82 81 92 93 94 95 96 97 98
109 120 119 108 107 106 105 104 103 114 115 116 117 118
R: 0 4 6 3 1 4 6 3 1 4 6 2 4 5 3 2 4 5 3 2 4 5 1 4 6 3 1 2 3 5 4 2 6 4 1 5 4 2 6 4 1 5 4 2
645635426456314621365126536413215624631463562
15624631463562156245642354264136
S: 449
Objetivo: 449
Tempo: 0.547803

TABULEIRO 12X12

98

Soluo 1
C: 0 12 24 36 37 25 13 1 2 3 4 16 15 14 26 27 28 40 39 38 50 49 48 60 61 62 63 51
52 64 76 75 74 73 72 84 85 86 87 88 100 99 98 97 96 108 109 110 122 121 120 132
133 134 135 123 111 112 124 125 113 101 89 77 65 53 41 29 17 5 6 7 8 9 10 11 23
22 34 35 47 46 45 33 21 20 32 44 43 31 19 18 30 42 54 66 78 79 67 55 56 57 58 59
71 70 69 68 80 81 82 83 95 94 93 92 91 90 102 103 104 105 106 107 119 118 117
116 128 129 130 131 143 142 141 140 139 127 115 114 126 138 137 136
R: 0 2 6 5 4 6 3 1 2 6 5 3 6 4 2 6 5 3 6 4 2 1 5 3 1 4 6 5 3 6 4 5 3 2 4 1 2 6 5 1 3 5 4 2
362142362153263562156215624532456426324635624
635621563541364562132456413642651263245146326
5123563126
S: 532
Objetivo: 532
Tempo: 2.672724

TABULEIRO 13X13

Soluo 1
C: 0 13 26 39 52 65 78 91 104 117 130 143 156 157 144 131 118 105 92 79 66 53
40 27 14 1 2 15 16 3 4 5 6 7 8 9 10 11 12 25 24 23 22 21 20 19 18 17 30 29 28 41
42 43 56 55 54 67 68 69 82 81 80 93 94 95 108 107 106 119 120 121 134 133 132
145 158 159 146 147 148 135 122 109 96 83 70 57 44 31 32 33 34 35 36 37 38 51
50 49 48 47 46 45 58 59 60 61 62 63 64 77 76 75 74 73 72 71 84 85 86 87 88 89 90
103 102 101 100 99 98 97 110 111 112 113 114 115 116 129 128 127 126 125 124
123 136 137 138 139 140 141 142 155 168 167 154 153 166 165 152 151 164 163
150 149 162 161 160
R: 0 2 6 5 1 2 6 5 1 2 6 5 1 4 5 3 2 4 5 3 2 4 5 3 2 4 6 2 3 6 5 1 2 6 5 1 2 6 5 3 6 4 1 3
641326546326546326546326546326542645314631463
126512653641364265126536413642651265364136426
51265364136426512653263564514213265
S: 640

99

Objetivo: 640
Tempo: 132.332

TABULEIRO 14X14

Soluo 1
C: 0 1 2 3 4 5 6 7 8 22 21 20 19 18 17 16 15 14 28 29 30 31 32 33 34 35 36 37 23 9
10 11 12 13 27 26 25 24 38 39 40 41 55 54 53 52 51 50 49 48 47 46 45 44 43 42 56
57 58 59 60 61 62 76 75 74 73 72 71 70 84 85 86 87 88 89 90 104 103 102 101 100
99 98 112 113 114 115 116 117 131 130 129 128 127 126 140 141 142 143 144 145
146 147 133 132 118 119 105 91 77 63 64 65 66 67 68 69 83 82 81 80 79 78 92 93
94 95 96 97 111 110 109 108 107 106 120 121 122 123 124 125 139 138 137 136
135 134 148 149 150 151 152 153 167 166 165 164 163 162 161 160 159 158 157
156 155 154 168 169 170 171 172 173 174 175 176 177 178 179 180 181 195 194
193 192 191 190 189 188 187 186 185 184 183 182
R: 0 4 6 3 1 4 6 3 1 2 3 5 4 2 3 5 4 2 6 4 1 3 6 4 1 3 6 4 2 3 1 4 6 3 2 6 5 1 4 5 3 2 6 3
146314631463562156246314635621562463146356215
645324514631463564512653245326314635621564532
451463142156213245326314631463146356215621562
15645324532453245
S: 712
Objetivo: 712
Tempo: 192.12

100

APNDICE 5 - RESULTADOS HEURISTICOS DO GENTICO


C: Caminho
R: Faces do Dado
S: Soma das Faces

TABULEIRO 5X5

Soluo 1
C: 0 5 10 15 20 21 16 17 18 13 12 11 6 1 2 7 8 3 4 9 14 19 24 23 22
R: 0 2 6 5 1 4 5 6 2 3 6 4 5 3 6 5 4 6 2 4 5 3 2 6 5
S: 100
Objetivo: 100
Tempo: 0.13692

TABULEIRO 6X6

Soluo 1
C: 0 6 12 18 24 30 31 25 19 13 7 1 2 8 9 3 4 5 11 10 16 17 23 22 21 15 14 20 26 32
33 27 28 34 35 29
R: 0 2 6 5 1 2 4 1 3 6 4 1 5 4 6 5 3 2 6 3 5 6 4 5 3 6 2 3 5 4 6 5 3 6 2 3
S: 137
Objetivo: 137
Tempo: 0.17434

TABULEIRO 7X7

Soluo 1
C: 0 1 2 3 4 5 6 13 12 11 18 19 20 27 26 25 24 17 10 9 8 7 14 15 16 23 30 31 38 37
36 29 22 21 28 35 42 43 44 45 46 39 32 33 34 41 40 47 48

101

R: 0 4 6 3 1 4 6 2 4 5 1 4 6 2 4 5 3 6 4 2 3 5 6 3 1 2 6 4 5 6 2 4 5 1 4 6 3 5 4 2 3 6 4 5
36546
S: 191
Objetivo: 191
Tempo: 0.107723

TABULEIRO 8X8

Soluo 1
C: 0 1 2 3 4 5 6 7 15 14 13 12 11 10 9 8 16 17 18 26 25 24 32 40 48 56 57 49 41 33
34 35 27 19 20 21 22 23 31 30 29 28 36 44 52 51 43 42 50 58 59 60 61 53 45 37 38
39 47 46 54 55 63 62
R: 0 4 6 3 1 4 6 3 2 6 5 1 2 6 5 1 4 5 3 6 5 1 4 6 3 1 5 3 2 4 6 3 5 4 1 3 6 4 5 6 2 1 3 6
45635463156245642632
S: 244
Objetivo: 244
Tempo: 0.31969

TABULEIRO 9X9
Soluo 1
C: 0 1 2 3 4 5 6 7 8 17 16 15 14 13 12 11 10 9 18 19 20 29 28 27 36 37 38 47 46 45
54 55 64 63 72 73 74 75 66 65 56 57 48 39 30 21 22 23 24 25 26 35 34 33 42 43 44
53 62 71 70 69 68 59 60 61 52 51 50 41 32 31 40 49 58 67 76 77 78 79 80
R: 0 4 6 3 1 4 6 3 1 2 3 5 4 2 3 5 4 2 6 4 1 5 4 2 6 4 1 5 4 2 6 4 5 6 3 5 4 2 6 4 5 6 3 1
4621562463562453641542641563542356215
S: 306
Objetivo: 306
Tempo: 0.31636

102

TABULEIRO 10 X 10

Soluo 1
C: 0 1 2 3 4 5 6 7 8 9 19 18 17 16 15 14 13 12 11 10 20 21 22 23 24 25 26 27 28 29
39 38 37 36 35 34 33 32 31 30 40 41 42 52 51 50 60 61 62 72 71 70 80 90 91 81 82
92 93 83 84 94 95 85 86 96 97 87 77 78 88 98 99 89 79 69 59 49 48 47 46 45 44 43
53 54 55 56 57 58 68 67 66 65 64 63 73 74 75 76
R: 0 4 6 3 1 4 6 3 1 4 2 1 5 6 2 1 5 6 2 1 3 2 4 5 3 2 4 5 3 2 6 3 1 4 6 3 1 4 6 3 5 6 2 4
635624635465362312415465135465126542354264136
45621563542
S: 368
Objetivo: 368
Tempo: 0.323702

TABULEIRO 11X11

Soluo 1
C: 0 1 2 3 4 5 6 17 16 15 14 13 12 11 22 23 24 25 26 27 28 39 38 37 36 35 34 33 44
45 46 47 48 49 50 61 60 59 58 57 56 55 66 67 68 69 70 71 72 83 82 81 80 79 78 77
88 89 90 91 92 93 94 105 104 103 102 101 100 99 110 111 112 113 114 115 116
117 118 119 120 109 98 87 76 65 54 43 32 21 10 9 8 7 18 19 20 31 30 29 40 41 42
53 52 51 62 63 64 75 74 73 84 85 86 97 96 95 106 107 108
R: 0 4 6 3 1 4 6 2 4 5 3 2 4 5 1 4 6 3 1 4 6 2 4 5 3 2 4 5 1 4 6 3 1 4 6 2 4 5 3 2 4 5 1 4
631462453245146314624532451463146314651265126
51463562463562463562463562463562
S: 452
Objetivo: 452
Tempo: 0.921894

TABULEIRO 12X12

103

Soluo 1
C: 0 1 2 3 4 5 6 7 8 9 10 11 23 22 21 20 19 18 17 16 15 14 13 12 24 25 26 38 37 36
48 49 50 62 61 60 72 73 74 86 85 84 96 97 98 110 122 121 109 108 120 132 133
134 135 123 111 99 87 75 63 51 39 27 28 29 30 31 32 33 34 35 47 46 45 44 43 42
41 40 52 53 54 55 56 57 58 59 71 83 95 107 106 105 117 116 115 114 113 101 89
77 78 79 91 90 102 103 104 92 80 81 93 94 82 70 69 68 67 66 65 64 76 88 100 112
124 125 126 127 128 129 130 118 119 131 143 142 141 140 139 138 137 136
R: 0 4 6 3 1 4 6 3 1 4 6 3 2 6 5 1 2 6 5 1 2 6 5 1 4 5 3 6 5 1 4 5 3 6 5 1 4 5 3 6 5 1 4 5
364563546315621562154235423513641364265126513
641563245364156451465135631562156314635423546
2456215621
S: 540
Objetivo: 540
Tempo: 0.490085

TABULEIRO 13X13

Soluo 1
C: 0 13 26 39 52 65 78 91 92 79 66 53 40 27 14 1 2 3 4 5 6 7 8 9 10 11 12 25 24 23
22 21 20 19 18 17 16 15 28 29 30 31 32 33 34 35 36 37 38 51 50 49 48 47 46 45 44
43 42 41 54 55 56 69 68 67 80 81 82 95 94 93 106 105 104 117 118 119 120 107
108 121 134 133 132 131 130 143 156 157 144 145 158 159 146 147 160 161 148
135 136 149 162 163 164 165 166 167 168 155 142 129 116 103 90 77 64 63 62 61
60 59 58 57 70 71 72 73 74 75 76 89 88 87 86 85 84 83 96 97 98 99 100 101 102
115 114 113 112 111 110 109 122 123 124 125 126 127 128 141 140 139 138 137
150 151 152 153 154
R: 0 2 6 5 1 2 6 5 4 6 3 1 4 6 3 1 2 6 5 1 2 6 5 1 2 6 5 3 6 4 1 3 6 4 1 3 6 4 2 6 5 1 2 6
512653641364136426536426536421531465364532413
214264563541563146315621562136413642651265364
13642651265364136426512653641321562
S: 624

104

Objetivo: 624
Tempo: 140.478055

TABULEIRO 14X14

Soluo 1
C: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 27 26 25 24 23 22 21 20 19 18 17 16 15 14 28 29
30 31 32 33 34 35 36 37 38 39 40 41 55 54 53 52 51 50 49 48 47 46 45 44 43 42 56
57 58 72 71 70 84 85 86 100 99 98 112 113 114 128 127 126 140 141 142 156 170
169 155 154 168 182 183 184 185 171 157 143 129 115 101 87 73 59 60 61 62 63
64 65 66 67 68 69 83 82 81 80 79 78 77 76 75 74 88 102 103 89 90 91 92 93 94 95
96 97 111 110 109 108 107 106 105 104 118 117 116 130 131 132 133 119 120 121
122 123 124 125 139 138 137 136 135 134 148 147 146 145 144 158 159 160 161
162 163 149 150 151 152 153 167 166 165 164 178 177 176 175 174 173 172 186
187 188 189 190 191 192 193 179 180 181 195 194
R: 0 4 6 3 1 4 6 3 1 4 6 3 1 4 2 1 5 6 2 1 5 6 2 1 5 6 2 1 3 2 4 5 3 2 4 5 3 2 4 5 3 2 6 3
146314631463562463562463562463562456426542364
136413651265126513542354235623651265126324532
451362354621562142354263146542354621564532146
31465423542365135
S: 715
Objetivo: 715
Tempo: 163.1280

105

APNDICE 6 - RESULTADOS HEURISTICOS DO GRASP


C: Caminho
R: Faces do Dado
S: Soma das Faces

TABULEIRO 5X5

Soluo 1
C: 0 5 6 1 2 3 4 9 8 7 12 17 18 13 14 19 24 23 22 21 16 11 10 15 20
R: 0 2 4 1 5 6 2 4 6 3 5 4 6 5 3 6 4 5 3 2 6 5 4 6 3
S: 100
Objetivo: 100
Tempo: 1.271162

Soluo 2
C: 0 5 10 15 20 21 16 17 18 13 12 11 6 1 2 7 8 3 4 9 14 19 24 23 22
R: 0 2 6 5 1 4 5 6 2 3 6 4 5 3 6 5 4 6 2 4 5 3 2 6 5
S: 100
Objetivo: 100
Tempo: 1.326712

Soluo 3
C: 0 1 2 3 8 7 12 11 6 5 10 15 20 21 16 17 22 23 24 19 18 13 14 9 4
R: 0 4 6 3 2 6 4 5 6 3 5 4 2 6 4 5 6 3 1 5 3 6 5 4 2
S: 100
Objetivo: 100
Tempo: 1.283673

TABULEIRO 6X6

Soluo 1

106

C: 0 6 12 13 19 18 24 25 26 20 14 8 7 1 2 3 4 5 11 10 9 15 16 17 23 22 21 27 28 29
35 34 33 32 31 30
R: 0 2 6 4 5 6 3 5 4 6 3 1 5 4 1 3 6 4 5 6 2 3 6 4 5 6 2 3 6 4 5 6 2 1 5 6
S: 145
Objetivo: 145
Tempo: 4.543126

TABULEIRO 7X7

Soluo 1
C: 0 1 2 3 10 9 16 15 8 7 14 21 22 23 24 17 18 19 12 11 4 5 6 13 20 27 26 25 32 33
34 41 48 47 40 39 46 45 38 31 30 29 28 35 36 37 44 43 42
R: 0 4 6 3 2 6 4 5 6 3 5 4 6 3 1 5 4 2 6 4 5 6 2 4 5 3 6 4 2 6 5 3 2 6 3 5 6 4 5 3 1 4 6 5
42146
S: 197
Objetivo: 197
Tempo: 3.363420

TABULEIRO 8X8

Soluo 1
C: 0 8 16 24 25 26 18 17 9 1 2 3 4 5 6 7 15 14 22 23 31 30 29 21 13 12 20 28 36 44
43 51 52 53 45 37 38 39 47 46 54 55 63 62 61 60 59 58 50 42 41 49 57 56 48 40 32
33 34 35 27 19 11 10
R: 0 2 6 5 4 2 6 4 5 3 6 4 1 3 6 4 5 6 3 5 1 3 6 5 1 4 5 3 2 4 6 5 4 2 6 5 3 2 6 3 5 6 4 5
32456236456214635426
S: 255
Objetivo: 255
Tempo: 6.263311

107

TABULEIRO 9X9

Soluo 1
C: 0 1 2 3 12 11 20 19 10 9 18 27 28 29 30 21 22 13 4 5 6 7 8 17 16 25 26 35 34 33
24 15 14 23 32 31 40 39 38 37 46 47 48 49 58 57 66 67 68 59 60 51 50 41 42 43 44
53 52 61 62 71 80 79 70 69 78 77 76 75 74 65 56 55 64 73 72 63 54 45 36
R: 0 4 6 3 2 6 4 5 6 3 5 4 6 3 1 5 4 6 3 2 4 5 3 6 5 4 6 2 4 5 6 2 3 6 4 5 1 3 6 4 2 6 5 1
35631546536415465326356413651453651267
S: 325
Objetivo: 325
Tempo: 4.662782

TABULEIRO10X10

Soluo 1
C: 0 1 2 3 4 14 13 12 22 21 11 10 20 30 31 32 33 23 24 25 15 5 6 7 8 9 19 18 17 16
26 27 28 29 39 38 37 36 35 34 44 43 42 41 40 50 51 52 53 54 55 45 46 56 57 67 77
76 66 65 64 63 62 61 60 70 71 81 80 90 91 92 82 72 73 83 93 94 84 74 75 85 95 96
86 87 97 98 99 89 88 78 79 69 68 58 59 49 48 47
R: 0 4 6 3 1 2 3 5 6 4 5 1 4 6 5 1 2 4 6 3 5 4 1 3 6 4 5 6 2 1 3 2 4 5 6 4 1 3 6 4 2 1 5 6
236413624653263542354653623562463562463564512
41546536235
S: 383
Objetivo: 383
Tempo: 7.748748

TABULEIRO 11X11

Soluo 1
C: 0 11 22 33 44 55 66 67 78 77 88 89 90 79 68 57 46 35 24 13 14 15 16 17 18 19
20 31 30 29 28 27 26 25 36 37 38 39 40 41 42 53 52 51 50 49 48 47 58 59 60 61 62

108

63 64 75 74 73 72 71 70 69 80 91 92 81 82 93 94 83 84 85 86 97 96 95 106 105 104


103 102 101 100 99 110 111 112 113 114 115 116 117 118 107 108 119 120 109 98
87 76 65 54 43 32 21 10 9 8 7 6 5 4 3 2 1 12 23 34 45 56
R: 0 2 6 5 1 2 6 4 5 6 3 5 4 6 3 1 4 6 3 1 2 6 5 1 2 6 5 3 6 4 1 3 6 4 2 6 5 1 2 6 5 3 6 4
136426512653641364236246541365321463146356215
62153654631463146354235423562156
S: 456
Objetivo: 456
Tempo: 168.376626

TABULEIRO 12X12

Soluo 1
C: 0 1 2 3 4 5 6 7 8 9 10 11 23 22 21 20 19 18 17 16 15 14 13 12 24 25 26 27 28 29
30 31 32 33 34 35 47 46 45 44 43 42 54 55 56 57 58 59 71 70 69 68 67 66 65 53 41
40 39 38 37 36 48 49 50 62 74 73 61 60 72 84 85 86 87 75 63 51 52 64 76 88 89 90
102 114 113 101 100 99 111 112 124 123 122 110 98 97 96 108 109 121 120 132
133 134 135 136 137 125 126 138 139 127 115 103 91 92 93 94 106 105 104 116
117 118 130 129 128 140 141 142 143 131 119 107 95 83 82 81 80 79 78 77
R: 0 4 6 3 1 4 6 3 1 4 6 3 2 6 5 1 2 6 5 1 2 6 5 1 4 5 3 2 4 5 3 2 4 5 3 2 6 3 1 4 6 3 5 6
215645324536423542641564514651245365124562465
145641563153654631465362354215645315645315623
5423641364
S: 545
Objetivo: 545
Tempo: 1802.565542

109

REFERNCIAS
ALMEIDA, A. R. Emparelhamento em Produto Cartesiano de Grafos e sua Aplicao
a Redes de Interconexo / Aline Ribeiro de Almeida. Rio de Janeiro: UFRJ/ IM/NCE,
2010. DispOnvel em: <http://teses2.ufrj.br/15/teses/760200.pdf> Acesso em: 20
OUtubro de 2013.
CMARA, F. G. Estatstica No Paramtrica-Testes de Hipteses e Medidas de
Associao. Universidade dos Aores, Departamento de Matemtica. 29 Junho de
2001.
Disponvel
em:
<http://www.amendes.uac.pt/monograf/
monograf01estatNparamt.pdf> Acesso em: 5 Junho de 2013
CORMODE, G. (2004). The hardness of the lemmings game, or Oh no, more NPcompleteness proofs. Proceedings of the International Conference on Fun with
Algorithms, 6576.
CHEN, S. D.; SHEN, H.; and TOPOR, R. (2002) An efficient algorithm for
constructing Hamiltonian paths in meshes, Parallel Computing. Theory and
Applications,
vol.
28,
no.
9,
pp.
12931305.
Disponvel
em:
<http://www.sciencedirect.com/science/article/pii/S0167819102001357>. Acesso em:
12 Junho de 2013.
DOR, D., ZWICK, U. (1999). SOKOBAN and other motion planning problems.
Computational Geometry: Theory and Applications, 13(4):215228.
FRAENKEL, A. S., LICHTENSTEIN, D. (1981). Computing a perfect strategy for nn
chess requires time exponential in n. Journal of Combinatorial Theory, Series A,
31:199214.
FRIEDMAN, E. (1992). Spiral Galaxies Puzzles are NP-complete. Disponvel em:
<http://www.stetson.edu/efriedma/articles/spiral.pdf> Acesso em: 10 fev 2010.
GOLDBERG, D E. Genetic Algorithms in Search, Optimization, and Machine
Learning. EUA: Addison-Wesley, 1989.
GOLDBARG, M. C.; OLIVEIRA, C. N. e GOLDBARG, E. F. G. Algoritmo Busca Tabu
Para a Soluo do Nonograma. XLIII Simpsio Brasileiro de PESQUISA
OPERACIONAL.
Ubatuba/SP.
Agosto
de
2011.
Disponvel
em:
<http://www.din.uem.br/sbpo/sbpo2011/pdf/87833.pdf> Acesso em: 10 Novembro de
2013.

110

GOLDBARG, M. C. Grafos: Conceitos, algoritmos e aplicaes / Marco Goldbarg,


Elizabeth Goldbarg. Rio de Janeiro: Elsevier, 2012.
GROPP, H. Hamiltonian Graphs from Kirkman to Konig. Electronic Notes in Discrete
Mathematics, volume 24, 15 July 2006, Pg., 81-88.
HOLZER, M., HOLZER, W. (2004). Tantrix rotation puzzles are intractable, Discrete
Applied Mathematics 144 (2004) 345 358.
HOOGEBOON, H. J. and KOSTERS, W. A. (2004). Tetris and Decidability.
Information Processing Letters, 89, 267272.
ISLAM, K., MEIJER, H., NEZ, Y., RAPPAPORT, D. & Xiao, H. (2007). Hamilton
Circuits in Hexagonal Grid Graphs, 19th Canadian Conference on Computational
Geometry, CCCG 2007, 20-22.
ITAI, A.; PAPADIMITRIOU, C. H; e SZWARCFITER, J. L. (1982) HAMILTON PATHS
IN CRID GRAPHS. SIAM J. Comput., volume 11, Issue 4, Pg., 676686.
KAYE, R. (2000). Minesweeper is NP-complete, Math. Intelligencer 22 (2):915.
Karen L. Collins, Lucia B. Krompart: The number of Hamiltonian paths in a
rectangular grid. Discrete Mathematics 169(1-3): 29-38 (1997). Geram a funo para
grafos grids com dimenses at 5 x 5.
KOROMILAS, L. Grid Hamiltonicity. Computer Science Department University of
Crete,
May
27,
2011.
Disponvel
em:
<
http://www.csd.uoc.gr/~
hy583/2010_presentations/Grid_Hamiltonicity.pdf > Acesso em: 08 de Abril de 2014
KIRKMAN, Th. P. (1856), On the enumeration of x-edra having triedral summits and
an (x 1)-gonal base, Philosophical Transactions of the Royal Society of London:
399411, JSTOR 108592.
KRAL, D., MAJERECH, V., SGALL, J., TICHY, T., and WOEGINGER, G. (2004). It is
tough to be a plumber. TCS: Theoretical Computer Science, 313(3): 473484.
KWONG, Y. H. E ROGERS D. G. (1994). A Matrix Method for Counting Hamiltonian
Cycles on Grid Graphs, European Journal of Combinatorics, Volume 15, Issue 3,
277283.

111

LAPORTE, G. (2006). La Petite et la Grande Histoire du Probleme du Voyageur de


Commerce,
Congres
de
la
ROADEF.
Disponvel
em:
<http://www.roadef.org/content/road/pdf/GLhistoirePVC.pdf>. Acesso em: 06 Junho
de 2013
LENHART, W; and UMANS, C. Hamiltonian cycles in solid grid graphs. Proceedings
of the 38th Annual Symposium on Foundations of Computer Science, pages 496
505. IEEE, 1997.
LINDEN, R. Algoritmos Genticos - Uma importante ferramenta da inteligncia
computacional. - 2 Edio. BR: Brasport, 2008. Captulo 9 - Outros Tipos de
Seleo.
LICHTENSTEIN, D., SIPSER, M. (1980). GO is polynomial-space hard. Journal of
the Association for Computing Machinery, 27(2):393401.
LUCAS, D. C. Algoritmos Genticos: uma Introduo. Maro, 2002.
Disponvelem:<http://www.inf.ufrgs.br/~alvares/INF01048IA/ApostilaAlgoritmosGeneti
cos.pdf> Acesso em: 01 Dezembro de 2013
LUCCIO, F., and MUGNIA, C. Hamiltonian paths on a rectangular chessboard.
Proceedings of the 16th Annual Allerton Conference, pp. 161173, 1978.
NETTO, P. O. B. Grafos: Teoria, Modelos, Algoritmos. Revista e Ampliada, 4
Edio, 2006. ISBN: 9788521203919
RESENDE, M. G. C.; e RIBEIRO, C. C. Greedy randomized adaptive search
procedures. In F. Glover and G. Kochenberger, editors, Handbook of Metaheuristics,
pp. 219249, Kluwer Academic Publishers, 2003.
RUSSELL, S. J.; e NORVG, P. (2003), Artificial Intelligence: A Modern Approach
(2nd ed.), Upper Saddle River, New Jersey: Prentice Hall, pp. 111114, ISBN 0-13790395-2.
STOYAN, R.; STREHL, V. Strehl: Enumeration of Hamiltonian Circuits in Rectangular
Grids. Journal of Combinatorial Mathematics and Combinatorial.Computing 21
(1996), 109-127
SALMAN, A. N. M.; Contributions to graph theory. Ph.D. thesis, University of Twente,
2005. ISBN: 90-365-2147-5.
STUCKMAN, J., ZHANG, G.-Q. (2006). Mastermind is NP-Complete. INFOCOMP
Journal of Computer Science, 5, pp. 2528.

112

SZWARCFITER, J. L. Grafos e Algoritmos Computacionais. Campus / Elsevier, 1


Edio, 1984. ISBN: 8570013418
THOMAS, H. C; CHARLES, E. L.; RONALD, R., R.,; CLIFF, S. (1990). Introduction to
Algorithms. Second Edition. MIT Press and McGraw-Hill, 2001. ISBN 0-262-03293-7.
UMANS, C. M. (1996). An Algorithm for Finding Hamiltonian Cycles in Solid Grid
Graphs, Thesis Degree Bachelorl of Arts, Willians College, USA.
WEISSTEIN, E. W. (2013) "Grid Graph." From MathWorld-A Wolfram Web Resource.
Disponvel em : <http://mathworld.wolfram.com/GridGraph.html> Acesso em: 10
Junho de 2013.
YATO, T. (2000). On the NP-Completeness of the Slither Link Puzzle. IPSJ
SIGNotes ALgorithms, 74,2532.
YATO, T., SETA, T. (2003). Complexity and Completeness of Finding Another
Solution and Its Application to Puzzles. IEICE TRANSACTIONS on Fundamentals of
Electronics, Communications and Computer Sciences, 86(5): 10521060.
ZAMFIRESCU, C.; and ZAMFIRESCU, T. Hamiltonian properties of grid graphs.
SIAM Journal on Discrete Mathematics, vol. 5, no. 4, pp. 564570, 1992.

Você também pode gostar