CAPÍTULO 5 EXPERIMENTAÇÃO E ANÁLISE DOS RESULTADOS
5.2 Metodologia de Experimentação
Seqüências biológicas referem-se ao encadeamento de resíduos que formam a estrutura
primária de determinadas macromoléculas que fazem parte do metabolismo dos seres
vivos. Elas são polímeros formados pelo encadeamento de 4 nucleotídeos ou de 20
aminoácidos. Dentre e as de maior interesse estão as proteínas e os ácidos nucléicos
(ácidos ribonucléicos - RNA - e ácidos desoxirribonucléicos - DNA). As moléculas
(seqüências) de de DNA contém subseqüencias denominadas genes que codificam a
informação necessária para a fabricação das proteínas do organismos. Várias moléculas
de DNA são agrupadas para formarem os cromossomas, e o conjunto de todos os
cromossomas formam o genoma de um organismo.
Das estatísticas publicadas pelo Swiss-Prot group (2004) sabe-se que as moléculas de
proteínas, anotadas e contidas no banco de dados Swiss-Prot, são compostas em média
por seqüências de 368 aminoácidos, sendo a menor seqüência composta por 2
aminoácidos e a maior por 8.797 aminoácidos. Veja na Figura 5.1 a seguir o gráfico da
distribuição do tamanho das seqüências de proteínas. Esses dados motivam a realização
FIGURA 5.1 - Distribuição do tamanho das seqüências de proteínas.
de experimentos para o alinhamento de seqüências biológicas relativamente pequenas.
FONTE: Adaptada de figura do Swiss-Prot group (2004).
Segundo 01) o
tamanho médio de um gene consiste do encadeamento de 3.000 bases, formando uma
dados do Human Genome Mangement Information System (1992 e 20
seqüência primária. O maior gene humano conhecido, o dystrophin, é composto por 2,4
milhões de bases. As moléculas de DNA no genoma humano são arranjadas em 24
cromossomas distintos com tamanhos variando de 50 a 250 milhões de pares de bases.
Os genomas dos diferentes organismos possuem uma grande variação em tamanho, o
menor genoma conhecido contêm cerca de 600 mil pares de bases (bactéria), enquanto
os genomas do rato e do homem contêm cerca de 3 bilhões de pares de bases. Esses
dados motivam a realização de experimentos para o alinhamento de seqüências
biológicas relativamente grandes, pois já se fala em comparação de genomas inteiros.
Foi adotada nesse trabalho uma posição semelhante àquela adotada por Tarnas e
Hughey (1998), pag. 404: “... Para SAM rodando numa workstation, foi decidido que o
algoritmo de nível , que reduz o uso de espaço pela raiz quadrada do
comprimento da seqüência, deveria ser suficiente ...”. Pois experimentos, para a análise
de performance a posteriori, com algoritmos de PD com 2-níveis de checkpoints,
permitirão comparações com a análise de performance a posteriori já realizadas e
relatadas por Grice et al. (1995 e 1997), Tarnas e Hughey (1998) e Wheeler e Hughey
(2000).
2
=
L
Tendo como base os relatos em Grice et al. (1995 e 1997), Tarnas e Hughey (1998) e
Wheeler e Hughey (2000) e a pesquisa efetuada nesse trabalho, pode-se concluir que,
quando o interesse reside justamente na utilização dos algoritmos de PD de L-níveis de
checkpoints em computações que exijam retrocedimento completo, a escolha deve
recair naqueles com checkpoints unidimensionais por linhas ou por colunas. Isto é o
melhor que se pode vislumbrar até o momento, a não ser que alguma percepção nova
lance luz sobre o assunto, pois as demais versões são mais dispendiosas em termos de
espaço e de tempo – exigem o dobro de memória e adicionam mais complexidade no
tratamento e armazenagem dos checkpoints e nas re-computações das seções da matriz
de PD. Entretanto, os resultados da análise a priori dos algoritmos de L-níveis de
checkpoints bidimensionais indicam que esses assintoticamente requerem menos espaço
do que os algirmos de checkpoints por linhas e apresentam menor queda de
desempenho.
Desta forma os experimentos para análise de performance a posteriori se concentraram
somente nos algoritmos de Viterbi com L-níveis de checkpoints, particularmene nos de
2-níveis de checkpoints.
Os algorimos de PD que adotam o paradigma de checkpoints como estratégia, ou
método de economia de espaço, permitem uma amplitude de escolhas dentro do
intervalo de espaço disponível, que possibilitam fazer o balanceamento (tradeoff) entre
requerimentos de espaço e de tempo para computar uma determinada matriz de PD.
Para HMMs com um determinado número de nós e tamanhos de seqüências a serem
analisadas, a penalidade de performance pode ser escolhida, conforme o número níveis
de checkpoints adotados, levando-se em consideração toda a hierarquia de memória e,
principalmente, a quantidade de memória de trabalho disponível – primariamente a
memória RAM e secundariamente a memória cache.
Os experimentos objetivaram comparar o desempenho dos seguintes algoritmos, no
alinhamento de seqüências biológicas pequenas (seqüências de proteínas com tamanho
médio de 368 símbolos e um alfabeto de 20 símbolos) e grandes (seqüências de DNA
contendo milhôes de símbolos e um alfabeto de 4 símbolos): o de Viterbi básico; o de
Viterbi com 2-níveis de checkpoints por linhas e particionamento móvel de memória; o
de Viterbi com 2-níveis de checkpoints bidimensionais por linhas e colunas com
retrocedimento restrito e particionamento fixo de memória; e o de Viterbi com 2-níveis
de checkpoints por diagonais com retrocedimento restrito e particionamento móvel de
memória.
No alinhamentos de seqüências grandes pretendeu-se verificar como os algoritmos
desempenham até o início de paginação. Também pretendeu-se verificar para que
tamanhos de seqüências esses algoritmos causam paginação excessiva num PC típico,
inviabilizando a obtenção de resultados para seqüência acima deste tamanho.
Finalmente, verificar se o algoritmo de Viterbi com checkpoints bidimensionais por
linhas e colunas com retrocedimento restrito e particionamento fixo de memória utiliza
eficientemente o sistema de memória, particularmente no uso da memória cache.
Entretanto o interesse maior residiu justamente na comparação entre o algoritmo de
Viterbi com 2-níveis de checkpoints bidimensionais por linhas e colunas com
retrocedimento restrito e particionamento fixo de memória e o algoritmo de Viterbi com
2-níveis de checkpoints por diagonais com retrocedimento restrito e particionamento
móvel de memória.
Para uma melhor discriminação na comparação entre esses dois algoritmos de interesse
primário nos experimentos foram utilizadas duas configurações de requerimentos de
memória. Primeiro, foi utilizada, pelo menos em suposição, uma mesma quantidade de
memória para os dois algoritmos, justamente a quantidade mínima de memória
requerida pelo algoritmo de Viterbi com 2-níveis de checkpoints por diagonais com
retrocedimento restrito e particionamento móvel de memória. Segundo, a memória do
algoritmo de Viterbi com 2-níveis de checkpoints bidimensionais por linhas e colunas
com retrocedimento restrito e particionamento fixo de memória será reduzida pela
metade.
Esperou-se mostrar com os experimentos, que o algoritmo de Viterbi com 2-níveis de
checkpoints bidimensionais por linhas e colunas com retrocedimento restrito e
particionamento fixo de memória seja mais rápido, também em aplicações práticas, que
o algoritmo de Viterbi com checkpoints por diagonais com retrocedimento restrito e
particionamento móvel de memória tanto para o alinhamento seqüências pequenas, com
tamanhos médios de cerca de 368 resíduos (proteínas), quanto para seqüências de
comprimentos variando de 2.000 a centenas de milhares de resíduos (DNAs,
cromossomas, genomas).
Foram realizados três conjuntos de experimentos com esses algoritmos, nos quais são
considerados os tempos de CPU e os tempos totais de execução (wall time). No
primeiro experimento foi considerado um HMM com 2.000 nós e seqüências de de
comprimentos crescentes, dados por uma progressão aritmética com razão 2.000,
iniciando-se com uma seqüência de 2.000 resíduos. No segundo experimento foi
considerado um HMM com 2.000 nós e seqüências com comprimentos crescentes,
dados por uma progressão geométrica de razão 2, iniciando-se com uma seqüência de
2.000 resíduos. No terceiro experimento foi considerado um HMM com 368 nós e
seqüências com comprimentos crescentes de 100 a 1000 símbolos, dados por uma
progressão aritmética com razão 100.
Pode ser considerado a possibilidade do encadeamento ou concatenação de várias
seqüências de proteínas para serem comparadas de uma única vez a um HMM,
formando assim uma seqüência grande de resíduos de aminoácidos. Desta forma,
unicamente para facilitar e simplificar a programação e a experimentação foi
considerado nesses experimentos somente o alfabeto de aminoácidos, contendo 20
símbolos. Os dados usados como amostras nesses experimentos foram gerados
aleatoriamente com um alfabeto composto de 20 símbolos, de forma semelhante àqueles
dados dos experimentos efetuados por Powell et al. (1999). As strings para o
treinamento dos HMMs foram geradas da seguinte forma: primeiro uma string A foi
gerada aleatoriamente com probabilidades dadas pelas freqüências f(i) (freqüências de
Dayhoff) de occorrência dos 20 aminoácidos (função massa de probabilidade para
aminoácidos) obtidas do Banco de Dados SwissProt 34, considerando 21.210.388
raidicais (Eddy, 2003) e, então, as demais strings, as strings Bs, foram geradas de A
com probabilidades fixas de 0,2 para mudança, de 0,1 para inserção e de 0,1 para
remoção (serão permitidas discordâncias para o mesmo caractere).
As strings usadas nos experimentos para alinhamento contra os HMMs foram geradas
aleatoriamente com probabilidades dadas pelas freqüências f(i) (freqüências de
Dayhoff) de occorrência dos 20 aminoácidos (função massa de probabilidade para
aminoácidos) obtidas do Banco de Dados SwissProt 34, considerando 21.210.388
raidicais (Eddy, 2003).
Foi realizado, também, uma simulação do comportamento assintótico dos requerimentos
de espaço dos algoritmos considerados nos conjuntos de experimentos 1 e 2.
Os experimentos deste trabalho foram realizados num PC rodando o sistema
operacional Linux Slackware 9.1, sob o ambiente KDE 3.1, com processador Atlhom
K7 de 800 MHz , 512 Mb de RAM, 256 Kb de cache L2 e 64 Kb de cache L1 – 32 Kb
para dados e 32 Kb para instruções, e com espaço reservado para swap limitado em
2.048 Mb. Os programas foram escritos em C ANSI e compilados usando a versão
3.2.2 do Compilador GCC da GNU.
No documento
ALGORITMOS DE PROGRAMAÇÃO DINÂMICA USADOS EM MODELOS MARKOVIANOS OCULTOS (HMMs)
(páginas 147-152)