3.3 RESULTADOS
3.3.2 Análise de Tempo
Esta subseção destina-se a apresentar os resultados obtidos quanto a análise da complexidade do algoritmo implementado. A versão da GLP codificada foi analisada ao solucionar o problema do Clique Máximo, bem como encontrar 𝑘-cliques em grafos pertencentes a uma família mista.
3.3.2.1 Análise do Clique Máximo
A análise do Clique Máximo se utilizou de instâncias da família DIMACS para verificar a aceitação do algoritmo codificado. Os resultados dos testes foram analisados e comparados aos resultados descritos por Grosso, Locatelli e Pullan (2007) em seu trabalho e podem ser verificados na Tabela 1. Nesta tabela, para cada instância é apresentado o número de vértices (n), o número de arestas (m), a melhor solução conhecida (ω(G)), a solução média obtida (CLQavg), seguido pelo menor e maior valor encontrado, e o tempo médio em segundos (t(s)).
Tabela 1. Resultados GLP Original x GLP Implementado.
Grafo GLP Original GLP Implementado
Nome n m ω(G) CLQavg t(s) CLQavg t(s)
brock200_1 200 14834 21 21 *0,00 21 0,06
brock200_2 200 9876 12 12 0,04 12 0,43
brock200_3 200 12048 15 15 0,25 15 5,21
brock200_4 200 13089 17 17 0,13 17 2,99
brock400_1 400 59723 27 26,28 (25, 27) 130,77 26,5 (25, 27) 4772,00
brock400_2 400 59786 29 29 29,53 29 1252,00
brock400_3 400 59681 31 31 3,83 31 129,31
brock400_4 400 59765 33 33 1,83 33 51,67
* valor menor que 0,00 (0,002)
A partir dos resultados apresentados, é possível perceber que o tempo de execução da heurística original é mais eficiente em relação à desenvolvida neste trabalho. Este contraste se dá, possivelmente, pelas estruturas e detalhes de implementação que se diferem na heurística original e no algoritmo desenvolvido. No entanto, o algoritmo encontrou as melhores soluções conhecidas, pelo menos uma vez, para todas as instâncias testadas. O gráfico da Figura 24 permite uma visualização mais clara da diferença de tempo entre os algoritmos. Ao analisar as
amostras, identificou-se que o algoritmo encontrou dificuldades nas instâncias brock mais difíceis, como relatado por Grosso, Locatelli e Pullan (2007).
Figura 24. Comparação GLP Original x GLP Implementado.
Os resultados apresentados por Grosso, Locatelli e Pullan (2007) mostram que a instância brock400_1 apresentou complexidade de tempo consideravelmente superior em relação a outras instâncias. Isto também foi observado nos experimentos realizados para este trabalho, conforme observado na Figura 24.
Apesar da diferença de tempo em relação à heurística original, a implementação do algoritmo GLP foi capaz de encontrar as melhores soluções conhecidas em tempo polinomial, possibilitando sua utilização para cumprir com o objetivo principal deste trabalho.
3.3.2.2 Análise do Clique
Esta subseção tem por objetivo apresentar resultados de tempo em relação ao algoritmo GLP modificado, o qual se destina a encontrar 𝑘-cliques. Os testes se utilizaram de instâncias mistas de grafos, variando no número de vértices e densidade de arestas. Desta forma, são apresentados os resultados da análise experimental e o processo de regressão linear realizado para identificar a complexidade do algoritmo.
Análise Experimental
A Tabela 2 apresenta alguns resultados obtidos na análise experimental do algoritmo.
Os testes consideraram 75 instâncias de uma família mista, descrita na subseção 3.3.1 , buscando encontrar 10-cliques, ou seja, cliques contendo 10 vértices. Na tabela, a coluna n indica o número de vértices, m indica o número de arestas, CLQavg indica o clique médio obtido, seguido pelo menor e maior valor encontrado, enquanto a coluna t(s) apresenta o tempo médio em segundos necessário para a obtenção do resultado.
Tabela 2. Resultados GLP Modificado 10-clique.
Grafo GLP Modificado
Nome n m CLQavg t(s)
gr128_0.1.gr 128 1651 6 0,1167
gr128_0.5.gr 128 8136 10 0,0000
gr128_1.gr 128 16256 10 0,0000
gr256_0.1.gr 256 6556 6,3 (6,7) 0,2687
gr256_0.5.gr 256 32591 10 0,0000
gr256_1.gr 256 65280 10 0,0001
gr512_0.1.gr 512 26215 7 0,7528
gr512_0.5.gr 512 131009 10 0,0000
gr512_1.gr 512 261632 10 0,0000
gr1024_0.1.gr 1024 104708 7,4 (7,8) 2,1060
gr1024_0.5.gr 1024 522781 10 0,0012
gr1024_1.gr 1024 1047552 10 0,0009
gr2048_0.1.gr 2048 418659 8 6,4772
gr2048_0.5.gr 2048 2094886 10 0,0029
gr2048_1.gr 2048 4192256 10 0,0027
gr4096_0.1.gr 4096 1675520 8,4 (8,9) 19,0792
gr4096_0.5.gr 4096 8386185 10 0,0088
gr4096_1.gr 4096 16773120 10 0,0078
gr8192_0.1.gr 8192 6709786 9 42,9030
gr8192_0.5.gr 8192 33552207 10 0,0220
gr8192_1.gr 8192 67100672 10 0,01990
gr16384_0.1.gr 16384 26844120 9,1 (9,10) 94,6916
gr16384_0.5.gr 16384 134208365 10 7,7304
A partir dos resultados apresentados, é possível identificar que o algoritmo demanda maior complexidade computacional para instâncias esparsas, onde não há muitas conexões entre os vértices. Para estas instâncias o algoritmo dificilmente encontra um 10-clique, pois pode não haver tal clique no grafo. Nestes casos, o algoritmo termina apenas ao atingir o limite
de seleções especificado, fazendo com que o mesmo demande maior tempo computacional. A Figura 25 representa graficamente esta característica, permitindo compreender melhor os dados da tabela.
(a)
(b)
Figura 25. Comparação de Tempo de Execução Para Diferentes Densidades.
Os gráficos da Figura 25 mostram a relação de tempo e quantidade de vértices para as densidades de 10, 50 e 100%, onde (a) apresenta a comparação entre 50 e 100%, enquanto (b) reflete a comparação de 50 e 100 em relação a 10%. É possível observar que grafos de baixa densidade demandam maior complexidade computacional, apresentando tempo consideravelmente superior em relação a densidades superiores. Isto reforça a dificuldade de encontrar 𝑘-cliques em grafos esparsos. Para melhor compreender a complexidade do algoritmo, foi realizada uma regressão linear nos resultados, para auxiliar na obtenção da função de complexidade. Esta regressão é apresentada de forma mais detalhada na sequência.
Regressão Linear
A regressão linear foi realizada para estimar a função de complexidade amortizada para o algoritmo. Para tal, foi utilizada a ferramenta GNU R, que consiste em um ambiente de software para cálculos de computação estatística e gráficos. Desta forma, foi possível realizar a regressão, obtendo a relação entre quantidade de vértices, arestas e o tempo computacional resultante dos testes.
Foram submetidos três modelos de regressão, permitindo identificar a função de complexidade mais próxima do comportamento experimental do algoritmo. Estes modelos foram: (i) utilizando tempo e quantidade de vértices; (ii) tempo e número de arestas; e (iii) tempo, quantidade de vértices e de arestas.
A Tabela 3 apresenta os resultados obtidos através da regressão linear para cada modelo, onde: (i) "Modelo" se refere ao modelo de regressão submetido; (ii) "Resultado" indica a função de complexidade resultante; e (iii) "Erro Residual" consiste na distância entre os dados experimentais em relação ao que é previsto pela função obtida.
Tabela 3. Resultados de Regressão Linear para Função de Complexidade.
Modelo Resultado Erro Residual
tempo (t) e vértices (n) Θ(𝑒0.03243𝑛0.39904) 2.768 tempo (t) e arestas (m) Θ(𝑒3.71019𝑚−0.03846) 2.811 tempo (t), vértices (n) e arestas (m) Θ(𝑒−6,334𝑛6,918𝑚−3,044) 1.637
Considera-se como complexidade experimental do algoritmo a função 𝛩(𝑛6,918 𝑚−3,044), descartando-se a constante 𝑒, pois esta representa a constante equivalente à infraestrutura/tecnologia utilizada durante os experimentos. A escolha desta função se deve ao
menor erro residual encontrado entre os modelos utilizados. A análise da função corrobora com o que foi levantado no tópico de "Análise Experimental", exibido anteriormente: quanto maior o número de arestas, menor a demanda de tempo computacional.