A New Algorithm for Finding All Tours and Hamiltonian Circuits in Graphs

A New Algorithm for Finding All Tours and Hamiltonian Circuits in Graphs J. L. C. Silva, L. Rocha and B. C. H. Silva Abstract— This paper presents a n...
4 downloads 0 Views 424KB Size
A New Algorithm for Finding All Tours and Hamiltonian Circuits in Graphs J. L. C. Silva, L. Rocha and B. C. H. Silva Abstract— This paper presents a new algorithm that finds all tours and Hamiltonian circuits in graphs. The algorithm makes the search for tours through the construction of n (number of nodes do graph) trees, one for each node of the graph. In the tree, all possible paths are configured from the initial node to the other nodes without repetition. The n-1 long paths are the tours of the graph. When a tour is in the tree and there is an edge in the graph connecting the end node to the start node of this tour, then a Hamiltonian circuit was found. The algorithm is easy to program and does not use recursion. The algorithm was applied to solve a problem of operational research within the graph theory. Several computational experiments were produced to measure the performance of the method in consolidated problem instances of literature. Keywords— Graph Theory, Operational Research, Flowshop Scheduling Problem, Permutation.

O

I. INTRODUÇÃO

SURGIMENTO da Teoria dos Grafos aconteceu no ano de 1736, quando o matemático Leonhard Euler estudou o problema das pontes de Konigsberg, uma cidade da antiga Prússia do século XVIII, atual Kaliningrado (Rússia), onde há duas ilhas que, juntas com a parte continental, eram ligadas por 7 pontes. O objetivo do problema era encontrar uma maneira de se atravessar todas as sete pontes sem repeti-las. Euler abordou o problema, transformando os caminhos das pontes em retas e suas interseções em pontos, o que para muitos (Fig. 1), resultou no primeiro grafo da história.

Figura 1. Esquema de Euler para o problema das Pontes de Konigsberg.

Baseado no fato de que em cada ponto deveria haver um número par de caminhos, os quais representariam a chegada e a saída, Euler concluiu que só seria possível atravessar o J. L. C. Silva, Universidade Federal do Ceará (UFC), Fortaleza, Ceará, Brasil, [email protected] L. Rocha, Universidade Estadual do Ceará (UECE), Fortaleza, Ceará, Brasil, [email protected] B. C. H. Silva, Universidade Estadual do Ceará (UECE), Fortaleza, Ceará, Brasil, [email protected].

caminho inteiro passando uma única vez em cada ponte se houvesse no máximo dois pontos de onde sairia um número ímpar de caminhos. Sendo assim, os dois pontos com caminhos ímpares, seriam referentes ao início e fim do percurso, pois estes não necessitavam de um caminho de chegada ou saída. Em [1] menciona-se que o interesse na utilização da teoria dos grafos, como instrumento de modelagem para diversos problemas, se deu a partir de 1847 através das pesquisas de Kirchhoff, cidadão de Konigsberg, sobre circuitos elétricos utilizando modelos de Árvore, um tipo de grafo bipartido, conexo e planar. Em 1852, Morgan relacionou a teoria dos grafos com a formulação do Problema das 4 Cores, cuja premissa é definir a quantidade mínima de cores para colorir um mapa de tal forma que países de fronteira comum possuam cores diferentes. Em 1859, Hamilton estudou os problemas dos caminhos mínimos e, em 1869, Jordan buscou estabelecer certo formalismo matemático à Teoria das Árvores de Kirchhoff. Com a aplicabilidade da teoria dos grafos em problemas de otimização e o interesse crescente que se deu pela Pesquisa Operacional nos anos pós 2ª guerra mundial, muitos estudos foram feitos acerca de algoritmos em grafos. Dois algoritmos foram considerados fundamentais durante muito tempo em grafos são eles: o Depth First Search (DFS) e Breadth First Search (BFS). Ambos serviram de base para o desenvolvimento de novos algoritmos em grafos encontrados na literatura [2]. O algoritmo DFS, também denominado como método de Busca em Profundidade, tem por objetivo explorar os nós de um grafo. Para isso, este algoritmo começa num nó raiz (selecionando algum nó como sendo a raiz, no caso de um grafo) e explora cada uma de suas conexões (arestas) tanto quanto possível, antes de retroceder (backtracking). No algoritmo BFS, também denominado como método de Busca em Largura, a busca inicia em um vértice raiz e explora todos os vértices vizinhos. Para cada um desses vértices mais próximos, são explorados os seus vértices vizinhos inexplorados e assim por diante, até que se encontre o alvo da busca. O funcionamento deste algoritmo produz uma árvore em extensão onde o nível em que se encontra um vértice representa exatamente a sua distância (ou número de arestas) até o vértice inicial, conforme [2]. Na literatura há vários algoritmos na Teoria dos Grafos baseados nos métodos DFS e BFS: Algoritmo de Dijkstra, Algoritmo de Bellman-Ford, Algoritmo de Prim e o Algoritmo Ford-Fullkerson. Os primeiros trabalhos brasileiros sobre a Teoria dos Grafos no Brasil foram apresentados no I Simpósio Brasileiro de Pesquisa Operacional, em 1968, informa [1]. Em [3] foi mencionado que um dos problemas importantes de ser tratado na atualidade é determinar um bom algoritmo

que encontre todos os circuitos hamiltonianos em um grafo qualquer. O termo circuito hamiltoniano deve-se a Willian Rowan Hamilton, matemático Inglês, criador do jogo Icosian played em 1856, que consiste em iniciando em um nó dado, encontrar um caminho de nós consecutivos ao longo das arestas do grafo, visitando todos os nós exatamente uma vez e retornar ao nó inicial para completar um circuito, conforme [4]. O problema geral de encontrar circuitos hamiltonianos em grafos arbitrários pode ser muito difícil. Neste caso, os nós podem ser representados pelos n pontos geográficos de localização das cidades, enquanto as arestas são as vias que ligam diretamente as cidades. Em 1952, Dirac [5] propôs uma condição que garante a existência de um circuito hamiltoniano em um grafo G (n ≥3). Ela determina que há circuito hamiltoniano no grafo quando o grau de qualquer nó do grafo deve ser maior ou igual a n/2. Entretanto, pode haver grafo com ciclo hamiltoniano sem que esta condição seja verdadeira. Em 1972, Karp [6] mostrou que o problema de encontrar circuito hamiltoniano (respectivamente tours) em grafos é NP-Completo. Desta forma, a existência ou não de um algoritmo para decidir quando um circuito hamiltoniano existe em um grafo qualquer dado, resolveria um dos mais importantes dos problemas abertos em matemática e computação: P x NP [7]. Ashay [8] propôs um algoritmo para o problema que depende da condição de Dirac como pré-requisito para o grafo dado. Neste trabalho propomos um algoritmo eficiente e eficaz para encontrar tours e circuitos hamiltonianos, denominado TG, em um grafo qualquer dado sem pré-requisito. O algoritmo é muito fácil de programar e não é recursivo, apesar de produzir várias árvores. O algoritmo proposto foi aplicado na resolução do problema de seqüenciamento clássico, conhecido na literatura como Flowshop Scheduling Problem (FSP). O FSP pertence a classe dos Problemas de Otimização Combinatória Permutacional (POCP) da Pesquisa Operacional. O algoritmo poderia ser aplicado a qualquer problema dessa classe sem perda de generalidade. As próximas seções deste artigo estarão organizadas da seguinte forma: na seção 2 será apresentado um estudo sobre o FSP. Enquanto na Seção 3 será descrito o algoritmo TG aplicado no FSP. Na seção 4, são descritos os resultados dos experimentos computacionais realizados. Por fim, na seção 4 estarão as considerações finais. II. O FSP As empresas de manufatura enfrentam a difícil tarefa de determinar a melhor sequência de processamento de seus produtos em suas máquinas que atenda aos objetivos competitivos do negócio. A Pesquisa Operacional denomina este problema como Scheduling Problem (SP), na literatura, e o define como: dado um conjunto de tarefas e um conjunto de máquinas, determinar uma sequência específica de tarefas que otimize uma função objetivo. Existem vários tipos de SP, por exemplo, o single machine scheduling problem, multiple machine scheduling problem e

manpower scheduling problem. Este trabalho trata do multiple machine scheduling problem mais conhecido na literatura como Flowshop Scheduling Problem. O primeiro artigo publicado sobre este problema foi de Johnson [9] em 1954, que formulou e resolveu o two-machine flowshop problem. Em [10] foi descrito que de 1954 a 2004 mais de 1.200 artigos foram publicados abordando diferentes aspectos do FSP. O FSP é definido como um fluxo unidirecional de n tarefas em m máquinas, i.e., a ordem de processamento de todas as tarefas nas m máquinas é a mesma. Considerando o caso geral do FSP, o número de sequências possíveis e distintas é igual a n!. Mesmo para problemas com n e m pequenos, a enumeração completa de todas as soluções possíveis e distintas torna-se impraticável. São dados no FSP: um conjunto de n tarefas J1, J2, ..., Jn, onde cada tarefa deve ser processada em m máquinas M1, M2, ..., Mm. Cada tarefa demanda m operações, com uma operação representando o tempo de processamento da tarefa por máquina. As tarefas seguem o mesmo fluxo de operações nas máquinas, i.e., para qualquer j=1, 2, ..., n, a tarefa Jj deve ser processada primeira na máquina M1, depois na máquinaM2, e assim por diante até a última máquina, no caso a máquina Mm. Caso a tarefa Jj não utilize todas as máquinas, o seu fluxo continua sendo o mesmo, todavia com o tempo de operação sendo igual a zero para as máquinas que ela não vai utilizar. Uma máquina pode processar somente uma operação de cada vez, e iniciada uma operação, ela deve ser processada até a sua conclusão. O número de sequências distintas possíveis para realização das tarefas nas máquinas é grande, i.e., O (n!). O problema consiste em realizar todas as n tarefas no menor tempo possível (makespan). Um input do FSP é dado por n, m e uma matriz P(n × m) de elementos não negativos, onde Pij denota o tempo de processamento da tarefa Jj na máquina Mi. O FSP pertence à classe dos problemas NP-completo, no sentido forte, quando m for maior que 3, conforme [11]. No caso em que m for menor ou igual a 3, o problema pode ser solucionado em tempo polinomial. Um Problema de Otimização Combinatória Permutacional (POCP) pode ser definido por um terno (S, g, n), onde S é o conjunto de todas as soluções do problema, g é uma função ou procedimento que aplica a cada solução viável s ∈ S um número real e n é uma instância do problema. O número de soluções existentes para um POCP é representado por |S| (cardinalidade de S) e igual a n!. O objetivo é encontrar uma solução s* ∈ S que otimize um dado critério de desempenho representado pela função ou procedimento g. O FSP pode ser modelado como um POCP da seguinte forma: Um elemento s do conjunto de soluções viáveis S é representado por uma permutação das n tarefas, com a ordem de s determinando a sequência na qual as tarefas serão processadas; e o procedimento g, dado na Fig. 2 a seguir, determina o valor do tempo gasto (g) para processar as n tarefas dada pela sequência s, mais precisamente tem-se que g é o tempo utilizado no processamento da última tarefa de s na última máquina Mm.

Figura 2. Procedimento que determina o makespan de uma solução do FSP.

Um exemplo do FSP com n=5 e m=3 é dado na Tabela I, a seguir, onde encontram-se os tempos de processamento (em horas) das tarefas nas máquinas. Por sua vez, a Fig. 3 mostra a distribuição das tarefas nas máquinas de uma solução ótima do exemplo dado, através do gráfico de Gant, onde é possível ver que o makespan é igual a 15 horas. TABELA I INSTÂNCIA DO FSP COM 5 TAREFAS E 3 MÁQUINAS.

P(i,j) J1 J2 J3 J4 J5 2 4 1 3 2 M1 1 2 2 1 4 M2 3 1 3 2 1 M3

Figura 3. Ilustração de uma solução ótima do exemplo dado.

Neste exemplo, existem 120 (5!) soluções distintas para o problema, sendo 17 soluções ótimas (14,2%) com makespan igual a 15 horas; e 103 soluções não ótimas com o makespan variando de 16 a 20 horas. III. O ALGORITMO TG APLICADO AO FSP A Teoria dos Grafos é uma área do conhecimento científico que trata de objetos combinatórios denominados Grafos, baseada na matemática e na computação. Grafos são representados por pontos dispostos em posições arbitrárias denominados de nós, ou vértices, conectados por curvas chamadas de arestas. Deste modo, um Grafo com n nós e m

arestas pode ser representado por G = (V, E), onde V={1, 2,, 3, …, n}, E={e1, e2, …, em} e cada ek=(i,j), com 1≤k≤m e 1≤i, j≤n. Quando as arestas de um grafo têm direção associada ou sentido, elas são chamadas de arcos e o respectivo grafo é chamado de grafo orientado ou dígrafo. Quando há pesos associados às arestas ou aos nós do grafo, classifica-se este grafo como valorado ou ponderado. Quaisquer nós v e w, são ditos adjacentes se uma aresta e liga-os diretamente, neste caso, a aresta e é classificada como incidente dos nós v e w. O número de nós adjacentes a um nó é chamado de grau do nó, dessa forma, o grau de um nó v em um grafo G é o número de arestas incidindo em v e se todos os nós possuírem o mesmo grau, o grafo é classificado como regular. Uma sequência alternada, de nós e arestas, que começa no nó vi e termina no nó vj é denominada passeio de vi até vj. Se todos os nós que compõem um passeio, forem distintos, denomina-se esse passeio como caminho. Um caminho é classificado como sendo um ciclo se o primeiro e o último nó da sequência são iguais. De forma efêmera, um ciclo pode ser expressado como um caminho vi,..., vj, sendo vi = vj. Grafos que não possuem ciclos são ditos acíclicos. Se para quaisquer que sejam os nós vi e vj distintos em um grafo, existe sempre um passeio que os une, então este grafo é classificado como conexo. Um caminho que permite passar por cada nó do grafo uma única vez é denominado caminho hamiltoniano (tour), assim, um ciclo, cuja sequência de nós vi,..., vj seja um tour, será chamado de ciclo hamiltoniano. Se um grafo G possuir um ciclo hamiltoniano, então, G será classificado como um grafo Hamiltoniano. Existem várias formas de representar um grafo, a mais tradicional delas é através da matriz adjacente (Adj) de dimensão n×n, onde Adjij é igual a 1, se existe no grafo a aresta (i,j). Caso contrário, Adjij é igual a 0. O FSP na Teoria dos Grafos consiste em: 1º) Construir um Grafo a partir de uma matriz M, com os melhores parceiros para cada tarefa, descrita adiante; 2º) Encontrar vários caminhos (tours) que passam por todos os nós do grafo; 3º) Apresentar o caminho com o melhor desempenho como sendo a solução do FSP. O FSP pode ser descrito por um Grafo G=(V, E): V = {J1, J2, …, Jn} é o conjunto de todas as n tarefas a serem processadas nas m máquinas; E é o conjunto de arestas obtidas a partir dos elementos das matrizes A e S, obtidos a partir da matriz M, onde Mvl é a folga no processamento sequencial das tarefas Jv e Jl na última máquina, sendo que; - Na linha v da matriz A, as melhores tarefas antecessoras imediatas da tarefa Jv encontram-se ordenadamente; - Na linha v da matriz S, as melhores tarefas sucessoras imediatas da tarefa Jv encontram-se ordenadamente. Define-se como melhor tarefa de Jv, a tarefa Jk processada imediatamente antes ou depois de Jv com a menor folga. A Fig. 4 a seguir ilustra como é realizado o cálculo de alguns valores da matriz M, com base no exemplo do FSP dado.

d) O método encerra a adição de novas arestas ao grafo e a busca por tour quando o grafo atual apresentar tour(s);

Figura 4. Ilustração de como obter valores da matriz M. Figura 5. Ilustração do Grafo do FSP dado na Tabela I.

A Tabela II mostra os valores da matriz M, enquanto a Tabela III mostra os valores das matrizes A e S. Em cada linha Jv da matriz A encontra-se os melhores parceiros para ser processados imediatamente antes da tarefa Jv, obtidos em ordem crescente. Idem para matriz S, sendo que em cada linha Jv tem-se os melhores parceiros para ser processados imediatamente após a tarefa Jv. TABELA II VALORES DA MATRIZ M PARA O EXEMPLO DADO NA TABELA I.

M(v,l) J1 J2 J3 J4 J5

J1 J2 J3 J4 J5 - 2 0 0 2 0 - 1 1 3 0 1 - 0 1 0 3 0 - 3 0 1 1 0 TABELA III

MATRIZES A E S COM BASE NOS VALORES DA MATRIZ M DA TABELA II.

A J1 J2 J3 J4 J5

2 3 1 1 3

3 5 4 3 1

4 1 2 5 2

5 4 5 2 4

S J1 J2 J3 J4 J5

3 1 1 1 1

4 3 4 3 4

2 4 2 2 2

5 5 5 5 3

Uma forma de resolver o FSP através da Teoria dos Grafos é determinar e avaliar (calcular o makespan) todos os caminhos (tours) que passam por todos os nós do grafo G=(V,E), construído a partir das matrizes A e S. Tomar o tour (solução s) com o melhor desempenho e apresentar como solução do problema, onde: a) Inicialmente, as arestas existentes no grafo serão aquelas com as menores folgas entre duas tarefas quaisquer; b) Na 1ª iteração, E={ (v, S(v,1)), (A(v,1),v) / para todo v=1,...,n}; c) Em cada iteração seguinte, 2n novas arestas são adicionadas ao grafo atual, verificando se o novo grafo possui tour(s);

Figura 6. Pseudo-código do Algoritmo TG.

Um tour representa uma sequência de processamento das n tarefas nas máquinas. A Fig. 5, dada anteriormente, mostra o grafo construído a partir das matrizes A e S. A Fig. 6 apresenta o Pseudo-código do Algoritmo TG, proposto por nós, para encontrar tour e circuito hamiltoniano em um grafo qualquer. O algoritmo constrói n árvores, sendo cada uma delas iniciada por um nó do grafo dado. Todos os caminhos possíveis, do nó inicial da árvore a todos os demais nós do grafo, são determinados e explicitados na árvore construída. O caminho, sem nó repetido, de comprimento igual a n-1 forma um tour, sendo destacado na árvore. O circuito hamiltoniano dar-se-á quando existe, no grafo, uma aresta do nó final ao nó inicial do tour encontrado. Caso o primeiro Grafo do problema não apresente tour, farse-á a inserção de 2n novas arestas em G, sendo n arestas compostas pelos dados da matriz S e n arestas vindas da

matriz A, dada por: (v, S(v,2)) e (A(v,2), v), para v=2. O valor de v pode variar de 2 até k, onde o k-éssimo Grafo é o primeiro grafo a apresentar tour. As arestas adicionadas ao Grafo estão concentradas somente na coluna v de cada matriz S e A. A Fig. 7 ilustra a árvore da primeira iteração do algoritmo TG aplicado ao Grafo do FSP da Fig. 5. Neste exemplo, TG encontrou: 0 (zero) tour no primeiro grafo construído; e 25 tours no segundo grafo construído, sendo 6 soluções ótimas.

soluções a serem avaliadas no problema atacado. Para cada tour (solução s que é uma permutação) encontrado no grafo, n-1 novas soluções do problema são geradas e analisadas da seguinte forma: seja s= um tour encontrado, então foram geradas e avaliadas as soluções , , e . Cada uma das n-1 novas soluções muda a ordem de processamento da primeira tarefa seguindo a ordem do tour encontrado. TABELA IV. RESULTADOS DOS EXPERIMENTOS COMPUTACIONAIS.

Figura 7. Ilustração da árvore da primeira iteração (i=1) do algoritmo TG.

IV. EXPERIMENTOS COMPUTACIONAIS Os experimentos computacionais foram realizados num PC Dell, com 4 GB de RAM e Clock de 3.20 GHz, nos 90 problemas do FSP, através de instâncias consolidadas na literatura, benchmark de Taillard [12]. As instâncias foram divididas em 9 Classes, com 10 problemas cada, conforme os valores de n (20, 50, 100) e m (5, 10, 20). As Classes estão definidas por: C1 (m=5), C2 (m=10) e C3 (m=20), com n=20; C4 (m=5), C5 (m=10) e C6 (m=20), com n=50; e C7 (m=5), C8 (m=10) e C9 (m=20), com n=100. A Tabela IV contém os resultados dos experimentos computacionais realizados, com as seguintes informações: Desempenhos dos algoritmos PAL [13], CDS [14] e HP [15]; Desempenho e tempo de execução do método proposto (TG) com um limite no número máximo de soluções geradas e avaliadas, por iteração, igual a 100 mil (TG1), 1 milhão (TG2) e 10 milhões (TG3). O desempenho é dado por 100*(z-z’)/z’, onde z é o makespan da melhor solução encontrada e z’ é o valor ótimo do problema atacado. A Fig. 8, abaixo, mostra o gráfico do desempenho de cada algoritmo por classe e a média geral. As linhas mínimo e máximo da tabela informam o intervalo de desempenho de cada algoritmo. Na linha melhor, o número de instâncias que o algoritmo teve melhor desempenho são reportados. TG1, TG2 e TG3 tiveram também um limite no tempo de máximo de execução, que foi de 3600 segundos (1 hora). Um novo procedimento foi adicionado somente a TG3 sempre que ele encontrou um tour, com o intuito de aumentar o número de

Instância C1 (ta00110) C2 (ta01120) C3 (ta02130) C4 (ta03140) C5 (ta04150) C6 (ta05160) C7 (ta06170) C8 (ta07180) C9 (ta08190) Média Mínimo Máximo Melhor

PAL

CDS

HP

TG1

TG2

TG3

10,82

9,49

9,07

6,19

4,37

2,93

15,28

12,13

13,25

9,53

8,07

6,32

16,34

9,64

11,10

7,44

6,30

5,47

5,34

6,10

6,55

9,04

8,95

4,34

14,03

12,99

16,85

17,12

17,09

13,40

17,95

15,77

21,57

21,07

20,91

18,39

2,51

5,13

7,18

8,60

8,60

5,41

9,14

9,15

13,93

14,93

16,14

11,71

15,55

14,19

21,31

21,08

21,06

18,11

11,88 0,70 24,75 26

10,51 1,80 18,42 23

13,42 3,24 25,25 0

12,78 1,49 25,05 0

12,39 0,63 25,41 1

9,56 0,07 22,04 40

Figura 8. Ilustração gráfica do desempenho de cada algoritmo.

Nas Classes C1 a C3 (n=20), cada problema tem 20! soluções (2,43 pentalhões) e TG3 gerou e avaliou, para cada um deles, no máximo 200 milhões de soluções, isto é bem menos de 1% do total de soluções do problema. Nas demais Classes (C4 a C9), o percentual de soluções geradas é menor ainda, daí o fato de TG3 não ter tido melhores desempenhos nestas 6 classes. Ainda nas Classes C4 a C9, o critério tempo evitou a avaliação das 10 milhões de soluções, por iteração de TG3, onde o máximo alcançado foi de: 4 milhões para n=50 e 2 milhões para n=100. TG3 teve o melhor desempenho entre

todos os outros métodos, alcançando desvio médio geral de 9,56%. TG3 obteve melhor desempenho em 40 (44,4%) dos 90 problemas testados, depois vieram PAL com 26 (28,8%) e CDS com 23 (25,5%). O melhor desempenho por classe deuse da seguinte forma: TG3 com 4; CDS com 3; e PAL com 2. TG3 obteve o menor mínimo e CDS obteve o menor máximo. É fácil ver o bom desempenho de TG3 pelo gráfico da Fig. 8. V. CONCLUSÃO O nosso principal objetivo, nesta pesquisa, foi alcançado: desenvolver, testar e validar um método (TG) para encontrar tour e circuitos hamiltonianos num grafo qualquer. Na literatura, não encontrou-se um algoritmo tão simples de implementar quanto TG, para este fim. Não foi possível comparar os tempos de execução de TG com os outros métodos, porque eles foram executados em máquinas distintas. TG não obteve melhor resultado que os demais métodos, nas instâncias C5 a C9 (n≥50), devido o tempo de processamento ter sido limitado há no máximo 1 hora. Com este tempo, TG não consegue avaliar se quer todas as soluções do primeiro grafo construído com tour para essas instâncias, de ordem exponencial. Sugestões para trabalhos futuros: a) Aplicar TG a outros tipos de problemas de otimização combinatória permutacional da Pesquisa Operacional; b) Implementar TG usando processamento paralelo ou distribuído com intuito de diminui bastante o tempo máximo de execução do algoritmo, podendo aumentar bastante o número de soluções geradas e avaliadas; c) Implementar TG com outro tipo de matriz M aplicado ao FSP, gerando outra configuração de grafo para o problema e busca; d) Aumentar o tempo de execução de TG para a resolução de problemas de grande porte, como o FSP com n≥50, o algoritmo deve ser executado com pelo menos 2 horas para cada problema, dobrando o número de soluções geradas e avaliadas, consequentemente melhorando o seu desempenho. REFERÊNCIAS [1] [2] [3] [4] [5] [6] [7]

P. O. Boaventura Netto, “Grafos: teoria, modelos e algoritmos”, Edgard Blucher, São Paulo-SP, 2003. T. H. Cormen, C. E. Leiserson, R. L. Rivest and C. Stein, “Introduction to Algorithms”, Second Edition, The MIT Press, Cambridge, MA, USA, 2001. M. Goldbarg and P. L. Luna, “Otimização Combinatória e Programação Linear“, 2a. edição, Editora Campus, Rio de Janeiro, 2005. C. B. Cunha, U. D. E. Bonasser and F. T. M. Abrahão, “Experimentos computacionais com heurísticas de melhorias para o problema do caixeiro viajante”, Anais do XVI Congresso da ANPET, Natal, 2002. G. A. Dirac, “Some theorems on abstract graphs”, Proceedings London. Mathematic Society, 2, 1952. R. M. Karp, “Reducibility among combinatorial problems”, Complexity of Computer Computations, Plenum Press, 1972. S. Cook, “The P versus NP Problem”, Official Problem Description, Millennium Problems, Clay Mathematics Institute, 2000.

[8] [9] [10] [11] [12] [13] [14] [15]

A. Dharwadker, “A new algorithm for finding Hamiltonian circuits”, Institute of Mathematics, India, Amazon, 2004. S. M. Johnson, “Optimal two and three stage production schedules with setup times included”, Naval Research logistics Quarterly1, p. 61–68, 1954. J. N. D. Gupta and E. F. Stafford Jr, “Flowshop scheduling research after five decades”, European Journal of Operational Research, v.169, p. 699–711, 2006. M. R. Garey and D. S. Johnson, “Computers and Intractability: a Guide to the Theory of NP-completeness”, W.H. Freeman and Company, San Francisco, CA, 1979. E. Taillard, “Benchmarks for basic scheduling problems”, European Journal of Operational Research, vol. 64, p. 278-285, 1993. D. S. Palmer, “Sequencing jobs through a multistage process in the minimum total time - a quick method of obtaining a near optimum”, Operational Research Quartetly, vol. 16, p. 101-107, 1965. H. G. Campbell, R. A. Dudek and M. L. Smith, “An heuristic algorithm for n job m machine sequencing problem”, Management Science, vol.16, p. 630-637, 1970. J. L. C. Silva and N. Y. Soma, “A heristic for Permutation Combinatorial Optimization Problems”, Proceedings of the XXXIII SBPO (in Portuguese), Campos do Jordão-SP, Brazil, 2001.

José Lassance de Castro Silva tem graduação em Matemática, pela Universidade Federal do Ceará (1990), e Web-Design e Programação, pela Universidade do Sul de Santa Catarina (2010), Especialização em Engenharia de Sistemas e Computação pela Universidade Federal do Rio de Janeiro (1992), Mestrado em Matemática Aplicada pela Universidade Federal do Ceará (1996) e Doutorado em Engenharia Eletrônica e Computação pelo Instituto Tecnológico de Aeronáutica (2002). É professor associado da Universidade Federal do Ceará, desde 1992. Consultor ad hoc do MEC/INEP e da CAPES. Revisor das revistas: IEEE Transactions on Evolutionary Computation, Produção (ABEPRO), Produção OnLine (ABEPRO), IEEE Latim America Transaction, Gestão & Produção (UFSCar), entre outras. Possui experiência na área de Ciência da Computação, com ênfase em análise e complexidade de algoritmos, otimização combinatória, heurísticas, meta-heurísticas, programação linear inteira/mista e desenvolvimento de sistemas para internet/intranet. Leonardo Rocha é bacharel (2007) e mestre (2009) em Ciência da Computação, pela Universidade Federal do Ceará, e doutor (2012) em Informatique pela Université de NiceSophia Antipolis, da França. Desde 2013 é Professor Adjunto da Universidade Estadual do Ceará, vinculado ao Curso de Computação do Centro de Ciências e Tecnologia. Atua como revisor dos periódicos: Algorithmica, Discrete Applied Mathematics e Discrete Mathematics & Theoretical Computer Science. É consultor ad-hoc da Fundação Cearense de Amparo a Pesquisa (FUNCAP). Tem experiência nas áreas de Ciências da Computação, Algoritmos, Análise de Algoritmos e Teoria da Computação e Teoria dos Grafos. Breno de Castro Honorato Silva nasceu na cidade de Fortaleza, estado do Ceará, Brasil, em 09 de dezembro de 1992. É graduado (2013) em Análise e Desenvolvimento de Sistemas, pela Faculdade Integrada do Ceará (FIC). Está concluindo o curso de Mestrado em Ciências da Computação da Universidade Estadual do Ceará (UECE). Tem experiência no desenvolvimento de sistemas computacionais com ferramentas modernas para internet e intranet. Atualmente suas pesquisas se concentram na área de banco de dados, desenvolvimento de sistemas computacionais e linguagem de programação Java, C++ e PHP.

Suggest Documents