• Nenhum resultado encontrado

2.2 O Processo Experimental

2.2.5 Análise dos Dados

Após a execução da implementação do algoritmo e a coleta dos resultados, dá-se prosseguimento à análise para extração de informações.

Muitas vezes, os dados produzidos pelos testes fornecem poucas informações, ou informações sobre as quais não é possível fazer afirmações bem embasadas, fazendo com que o preenchimento das lacunas geradas entre a análise e os resultados sejam deixadas para preenchimento pela imaginação do leitor. Para evitar tal situação, recomenda-se:

• Executar mais testes: talvez a forma mais simples de produzir conclusões mais bem

embasadas é ter um número de resultados relativamente grande.

do fator é pequena quando comparado à variação, aumentar a faixa dos valores testados para ele pode melhorar a resposta. Infelizmente, por restrições de tempo e de hardware, não podemos conduzir experimentos com os níveis de fator desejados.

• Não resumir os dados prematuramente: os programas de teste devem sempre gerar

valores “crus”, mostrando os resultados de cada teste, para que a distribuição desses dados possa ser analisada. Posteriormente, podemos definir estatísticas como variância ou média amostrais, por exemplo.

• Reduzir (ou aumentar) os dados amostrais para o tamanho certo: evitar produzir

muitos (ou muito poucos) dados nos testes. Uma quantidade pequena de dados pode ocultar propriedades importantes enquanto muitos dados podem tornar difícil enxergar o que realmente importa (reportar o valor de uma variável em cada iteração de um laço de repetição, ao invés de reportar apenas o valor na saída do laço, por exemplo).

• Não usar indicadores de desempenho que podem resumir ou ocultar propriedades:

em nosso caso, poderíamos definir nossos algoritmos para reportar apenas os valores médios dos testes executados, mas isso poderia ocultar discrepâncias ou outras informações importantes. Assim, cada execução tem seus dados individuais reportados e o cálculo médio é realizado posteriormente.

• Usar indicadores de desempenho específicos: indicadores de desempenho específicos

concentram-se em uma parte do algoritmo, fazendo assim com que seja mais fácil analisar ou identificar certas propriedades ligadas ao identificador. Variações de resultado identificadas através de indicadores de desempenho amplos podem ser resultado de um agregado de propriedades, cujo relacionamento nem sempre é claro.

2.2.5.1 Experimento Dobrado

O conceito de Experimento Dobrado (Doubling Experiment) foi inicialmente

pro-posto em (SEDGEWICK; SCHIDLOWSKY, 1998). Esse experimento pode ser empregado

no início do processo experimental, para colhermos informações sobre o desempenho do algoritmo. Basicamente o que o autor propõe é que podemos estimar a taxa de crescimento da função de custo de muitos algoritmos comparando um indicador de desempenho a medida que o tamanho da entrada dobra. Além disso, podemos verificar se as presunções

de desempenho feitas na teoria são traduzidas para a prática. Podemos interpretar os resultados da seguinte forma:

• Se os valores resultantes do indicador de desempenho não mudam com o aumento

do nível de n, a função de custo é constante;

• Se os valores do indicador são incrementados por uma constante, a função de custo

é θ(log n)

• Se ao dividirmos cada resultado do indicador de desempenho por n e os valores

aumentarem de forma constante, a função de custo é θ(n log n)

• Se o custo dobra a medida que n dobra, a função de custo é linear.

• Se o custo quadruplica a medida que n dobra, a função de custo é θ(n2)

Utilizamos uma versão simples desta ideia durante a análise dos resultados dos grafos de

Moon-Moser, na Seção 4.3.

2.2.5.2 Técnicas de Redução de Fatores

Abordamos no início deste capítulo Design Fatorial Completo, que fornece um

meio de definirmos quais os níveis e pontos dedesignque usaremos nos testes. Um problema com essa abordagem é que a quantidade de testes demandados cresce de forma exponencial em função do número de fatores. O exemplo citado mostra que caso sejam identificados

três fatores, teremos oito pontos de design. Se adicionarmos mais 2 fatores, passamos

a ter 25 = 32 fatores. Digamos então que escolhemos 20 pontos de design para serem

testados e que vamos executar o programa de testes 3 vezes para cada ponto de design.

Temos um total de 1.920 execuções do programa de testes a serem feitas. Caso o programa de teste seja de execução rápida, isso não representa um grande problema, mas caso tenhamos um programa de teste que demanda uma grande quantidade de tempo para executar, devemos buscar alternativas para não gastarmos uma quantidade exagerada (da qual muitas vezes não se dispõe) de tempo. Apresentamos algumas opções para reduzir o tamanho do conjunto de fatores:

• Unir fatores similares: caso dois fatores possuam um efeito similar sobre o desempenho, podemos tratá-los como um único fator, realizando testes apenas em casos onde o

• Usar dados de rastreamento para inferir os efeitos de fatores omitidos: podemos modificar o código para que ele reporte estados de variáveis em determinados pontos de forma que possamos tirar conclusões sobre o efeito do “ex-fator"sobre o funcionamento do algoritmo;

• Converter fatores para parâmetros de ruído: ao invés de definir explicitamente os

níveis para um fator, podemos deixar que ele varie de acordo com uma distribuição de probabilidade simples e reportar seu valor em testes aleatórios. Temos assim um conjunto de níveis e medidas de desempenho que podem ser usadas posteriormente.

• Limitar o escopo do experimento: através da fixação de fatores e redução do número

de níveis. Se os resultados não variam muito de nível para nível, podemos aplicar um espaçamento maior entre os valores de nível, por exemplo. Utilizamos essa técnica

3 ANÁLISE EXPERIMENTAL

Neste capítulo, aplicamos os conceitos apresentados no Capítulo 2para comparar

diversos algoritmos para o problema da clique máxima. Apresentamos três experimentos diferentes, cada um envolvendo uma família de instâncias diferente, descritas na Seção 3.2.

Inicialmente apresentamos na Seção3.1o ambiente dehardwareesoftwareutilizado

nos experimentos. Apresentamos nas Seções 3.2 e 3.3 as classes de grafos e algoritmos

usados, respectivamente. Finalmente, apresentamos na Seção 3.4 os modelos de design

também divididos por tipos de instância. Elementos comuns são descritos apenas uma única vez, como o ambiente de testes e os algoritmos analisados.

Documentos relacionados