Seja
Este é o trabalho de conclusão de curso da minha graduação em Ciência da Computação e o TCC contém mais informações detalhadas sobre a pesquisa e os resultados.
informações sobre as instâncias
Instâncias Mcclure com o limite inferior (lb) e o limite superior (ub) da resposta.
Instâncias Hufsky com o limite inferior (lb) e o limite superior (ub) da resposta.
Instâncias Chimani com o limite inferior da (lb) e o limite superior (ub) da resposta.
- g++ com suporte ao c++17
- programa make
- Execute o comando make na pasta com arquivo makefile com: make
- Execute: ./[programa] [arquivo com as instâncias]
- Exemplo: ./sa ../../instancias/mcclure_tar/McClure-582-20-10-141.csp
O algoritmo consiste em gerar uma string em que cada posição 1
No algoritmo 1 para cada coluna 1
O algoritmo 2 que foi baseado no trabalho feito por (SANTOS, 2018) em seu mestrado segue uma estratégia gulosa para a construção da cadeia e para isso escolhe para cada posição um dos caracteres mais frequentes nessa posição de forma aleatória.
No algoritmo 2 para cada coluna 1
O algoritmo 3 consiste em gerar uma string
No algoritmo 3, a sequência S da entrada tem a ordem de suas strings embarahadas (linha 1), a permutação com elementos de 1 até
O algoritmo 4 consiste em gerar uma string T mesclando as strings da entrada
em uma ordem pré-definida. Sendo que cada mescla destina
No algoritmo 4 a sequência
No algoritmo 5, uma string é gerada pelo algoritmo de solução inicial (linha 1), a
maior distância de hamming entre a candidata à solução e uma das strings da entrada é
encontrada (linha 3), uma posição (posicao) entre [1,
Algoritmos de solução inicial 1, 2, 3 e 4
-
$\epsilon$ =$10^{-3}$ -
$\rho$ =$0.99$ -
$T_0$ = 500
Os testes foram realizados em um computador rodando o Ubuntu 18.04.3 LTS, com um processador Intel Core i7-3770 com CPU 3.40GHz e memória de 8Gb, a linguagem de programação utilizada foi a C++ versão 17, o compilador foi o g++ 7.4.0 e as flags de compilação usadas foram: -O3, -funroll-loops, -march=native, -mtune=native, -lpthread.
Cada instância foi executada três vezes para se obter a média aritmética dos resultados e dos tempos.
A tabela 4.4 apresenta uma coluna instância que possui os nomes dos arquivos
com os dados da entrada, a coluna
A tabela 4.5 apresenta uma coluna instância que possui os nomes dos arquivos
com os dados da entrada, a coluna
A tabela 4.6 apresenta uma coluna instância que possui os nomes dos arquivos
com os dados da entrada, a coluna
A tabela 4.7 apresenta uma coluna instância que possui os nomes dos arquivos
com os dados da entrada, a coluna
A tabela 4.8 apresenta uma coluna instância que possui os nomes dos arquivos
com os dados da entrada, a coluna
A tabela 4.9 apresenta uma coluna instância que possui os nomes dos arquivos
com os dados da entrada, a coluna
Executa
Os testes foram realizados em um computador rodando o Ubuntu 18.04.3 LTS,
com um processador Intel Core i7-3770 com CPU 3.40GHz e memória de 8Gb, a
linguagem de programação utilizada foi a C++ versão 17, o compilador foi o g++
7.4.0 e as flags de compilação usadas foram: -O3, -funroll-loops, -march=native,
-mtune=native, -lpthread e
Cada instância foi executada três vezes para se obter a média aritmética dos resultados e dos tempos.
A tabela 4.10 apresenta uma coluna instância que possui os nomes dos arquivos
com os dados da entrada, a coluna
A tabela 4.11 apresenta uma coluna instância que possui os nomes dos arquivos
com os dados da entrada, a coluna
A tabela 4.12 apresenta uma coluna instância que possui os nomes dos arquivos
com os dados da entrada, a coluna
A tabela 4.13 apresenta uma coluna instância que possui os nomes dos arquivos
com os dados da entrada, a coluna
A tabela 4.14 apresenta uma coluna instância que possui os nomes dos arquivos
com os dados da entrada, a coluna
A tabela 4.15 apresenta uma coluna instância que possui os nomes dos arquivos
com os dados da entrada, a coluna
- POSIX
Cada uma das soluções iniciais préviamente propostas 1, 2, 3 e 4 são utilizados para gerar primeira solução ocasionando em 4 versões do ILS e o Simulated Annealing 5 é usado a fim de realizar a busca local.
Algoritmos de solução inicial 1, 2, 3 e 4
- MAX_ITERACOES = 100
- MAX_VEZES = 10
O Simulated Annealing em 5 foi ligeiramente modificado para ser a busca local do ILS. A diferença entre os dois algoritmos é que nesta versão a temperatura se torna dinâmica a fim de minimizar a complexidade.
-
$\rho$ = 0.99 -
$\epsilon$ =$10^{-2}$ -
$\beta$ =$0.3$
Caso a temperatura seja constante, a escolha de uma que seja agradável para várias instâncias pode ser difícil de encontrar, além disso em um cenário específico o valor pode estar muito acima do ideal. Por isso, um método que forneça a temperatura de acordo com cada instância é sempre uma boa opção e por isso optamos em usar o algoritmo proposto por (SOUZA, 2006) o 9 para realizar essa tarefa.
-
$\alpha$ = 1.1 -
$\epsilon$ =$10^{-2}$ -
$\zeta$ = 0.95
- SSE
- SSE2
- SSE3
- SSE4.1
- SSSE4.2
- POSIX
Os testes foram realizados em um computador rodando o Ubuntu 18.04.3 LTS, com um processador Intel Core i7-3770 com CPU 3.40GHz e memória de 8Gb, a linguagem de programação utilizada foi a C++ versão 17, o compilador foi o g++ 7.4.0 e as flags de compilação usadas foram: -O3, -funroll-loops, -march=native, -mtune=native, -lpthread.
Cada instância foi executada três vezes para se obter a média aritmética dos resultados e dos tempos.
A tabela 4.16 apresenta uma coluna instância que possui os nomes dos arquivos
com os dados da entrada, a coluna
A tabela 4.17 apresenta uma coluna instância que possui os nomes dos arquivos
com os dados da entrada, a coluna
A tabela 4.18 apresenta uma coluna instância que possui os nomes dos arquivos
com os dados da entrada, a coluna
A tabela 4.19 apresenta uma coluna instância que possui os nomes dos arquivos
com os dados da entrada, a coluna
A tabela 4.20 apresenta uma coluna instância que possui os nomes dos arquivos
com os dados da entrada, a coluna
A tabela 4.21 apresenta uma coluna instância que possui os nomes dos arquivos
com os dados da entrada, a coluna
A abordagem utilizada é inspirada no Algoritmo Genético (GA) de (FESTA; PARDALOS, 2012) que consiste em trabalhar com uma população dividida em três camadas a cada geração: a elite que possui as melhores soluções, a mediana que possui as melhores soluções que não estão na elite e que é preenchida por strings obtidas pelo crossover e a baixa que contém a parcela restante composta por strings aleatórias.
-
$\lambda$ =$\frac{\sqrt{m}}{m}$ -
$populacao$ =$|S|$ -
$elite$ = 0.3 -
$media$ = 0.5 -
$baixa$ = 0.2
Algorimo de solução inicial 1
Cada indivíduo
O crossover entre dois indivíduos ao contrário do que é comumente adotado,
a divisão da string em duas partes e a intercalação, adotamos uma divisão entre
subconjuntos pelo fato dos caracteres serem independentes entre si, ou seja, um
caractere não afeta na contribuição de outro na distância de hamming.
Com isso, o crossover se resume em selecionar um subconjunto de posições de
cada string de tal forma que sejam disjuntos e a união seja {1, 2, 3, ...,
A permutação {1,2,3, ...,
A mutação utilizada foi proposta em (COLEY, 1999) e ocorre individualmente em
cada posição da string de acordo com uma probabilidade
O valor real aleatório entre [0, 1] é selecionado (linha 2),
Os testes foram realizados em um computador rodando o Ubuntu 18.04.3 LTS, com um processador Intel Core i7-3770 com CPU 3.40GHz e memória de 8Gb, a linguagem de programação utilizada foi a C++ versão 17, o compilador foi o g++ 7.4.0 e as flags de compilação usadas foram: -O3, -funroll-loops, -march=native, -mtune=native, -lpthread.
Cada instância foi executada três vezes para se obter a média aritmética dos resultados e dos tempos.
A tabela 4.22 apresenta uma coluna instância que possui os nomes dos arquivos
com os dados da entrada, a coluna ga com a resposta encontrada pelo GA, a coluna
t com o tempo em segundos da execução do algoritmo sobre a instância, coluna
A tabela 4.23 apresenta uma coluna instância que possui os nomes dos arquivos
com os dados da entrada, a coluna ga com a resposta encontrada pelo GA, a coluna
t com o tempo em segundos da execução do algoritmo sobre a instância, coluna
A tabela 4.24 apresenta uma coluna instância que possui os nomes dos arquivos
com os dados da entrada, a coluna ga com a resposta encontrada pelo GA, a coluna
t com o tempo em segundos da execução do algoritmo sobre a instância, coluna
[^1] BOUCHER, C. Closest string with outliers. BMC Bioinformatics, v. 12, p. 1471–2105, 02 2011.
[^2] CHIMANI WOSTE, B. A closer look at the closest string and closest substring problem. ALENEX 11: Proceedings of the Meeting on Algorithm Engineering & Expermiments, Society for Industrial and Applied Mathematics, p. 13–24, 2011.
[^3] COLEY, D. A. An Introduction to Genetic Algorithms for Scientists and Engineers.
- ed. [S.l.]: World Scientific Publishing Co. Pte. Ltd, 1999.
[^4] FESTA, P.; PARDALOS, P. Efficient solutions for the far from most string problem. Ann Oper Res, v. 196, p. 663–682, 2012.
[^5] FRANCES, M.; LITMAN, A. On covering problems of codes. Theory of Computing Systems, v. 30(2), p. 113–119, 1997.
[^6] HUFSKY, F. et al. Swiftly computing center strings. LNBI, Spring, v. 6293, p. 325–336, 2010.
[^7] KIRKPATRICK, S.; GELATT, C.; VECCHI, M. Optimization by simulated annealing. Science (New York, N.Y.), v. 220, p. 671–80, 06 1983.
[^8] LI, M.; MA, B.; WANG, L. On The Closest String and Substring Problems. arXiv, 2000. Disponível em: https://arxiv.org/abs/cs/0002012.
[^9] MCCLURE MARCELLA, A.; VASI, T.; FITCH WALTER, M. Comparative analysis of multiple protein-sequence alignment methods. Molecular biology and evolution, v. 11 4, p. 571–92, 1994.
[^10] METROPOLIS, N. et al. Equation of state calculations by fast computing machines. Journal of Chemical Physics, v. 21, p. 1087–1092, June 1953.
[^11] REINSMA PUCA HUACHI VAZ PENNA, M. J. F. S. J. Um algoritmo simples e eficiente para resolução do problema do caixeiro viajante generalizado. L SIMPóSIO BRASILEIRO DE PESQUISA OPERACIONAL, 2018.
[^12] SANTOS, A. F. M. Algoritmos heurísticos para a solução do Problema da Cadeia de Caracteres Mais Próxima. Dissertação (Mestrado) — CEFET-MG, 2018.
[^13] SOUZA, M. J. F. Inteligência Computacional para Otimização. [S.l.], 2006. Disponível em: <http://www.decom.ufop.br/prof/marcone/Disciplinas/ InteligenciaComputacional/SA.PPT>.