MAC499 - Trabalho de Formatura Supervisionado

Monografia

SGEN – Simulator for Gene Expression Networks

 

 

Aluno: Fábio Massaaki Katayama

Professor Orientador: Marco Dimas Gubitoso

 

 

 

1.     Introdução

 

     Em abril de 2000, foi formado um grupo para a implementação de um simulador para uma rede de genes. Esta monografia descreverá os conceitos deste simulador, o SGEN – Simulator for Gene Expression Networks.

 

 

2.     O SGEN

 

     Fenômenos são tão complexos que, historicamente, disciplinas biológicas dificilmente chegam a um estágio profundo de conhecimento descritivo. Um atual desafio é a integração de conhecimentos disciplinares para modelar um fenômeno biológico real.

 

    Conjecturas e dados disponíveis levam à noção de que uma rede genética complexa controla o programa de expressão gênica. Para acessar experimentalmente essa rede genética, o controle do ciclo da célula deve ser analisado como um sistema dinâmico. A tecnologia de DNA-microarray fornece uma boa aproximação para essa análise. Essa tecnologia permite observar padrões temporais de ativação e inibição de centenas de genes.

 

     Sobre o ponto de vista matemático, uma rede genética pode ser modelado como um sistema dinâmico estocástico, onde cada projeção do vetor de estados representa a expressão de um dado gene. Achar um sistema dinâmico que modela uma rede genética é um problema não-linear de identificação de sistemas.

 

 

3.     Sistemas Dinâmicos

 

     Um sistema dinâmico é representado por um vetor de funções de transição que descreve seu comportamento no tempo. O estado do sistema é representado por um conjunto de variáveis. Esse conjunto de variáveis é chamado de vetor de estados. A transformação do vetor de estados pode ser manipulada por uma entrada. Essa transformação é chamada de função de saída e o vetor resultante dessa transformação é chamado de saída.

 

     Uma cadeia é um conjunto completamente ordenado. Um sistema dinâmico sobre cadeias é um sistema dinâmico no qual estados são vetores de elementos da cadeia. Um exemplo de sistema dinâmico sobre cadeias é um sistema discreto, onde o tempo e o conjunto de valores são discretos. Uma Rede Booleana é uma rede discreta. Neste caso, o estado do sistema é representado por um vetor de variáveis booleanas.

 

     A função de transição Φ e a função de saída Ψ são representadas por fórmulas parametrizadas. Quando esses parâmetros mudam com o tempo, o sistema é chamado de interpretação não invariante. Em particular, quando esses parâmetros mudam de acordo com uma lei estocástica, o sistema é chamado de sistema dinâmico estocástico.

 

3.1 Definição:

 

     Seja L uma cadeia finita em Z. Sejam i e n inteiros não negativos, ou seja, i, n Î Z+. Sejam x[i] e u[i] vetores de tamanho n de elementos da cadeia finita, isto é, x[i], u[i] Î Ln. Seja y[i] um vetor de tamanho m, onde m Î [1, n], de elementos da cadeia finita, ou seja, y[i] Î Lm. Seja N um inteiro não negativo. Seja Φi um mapeamento de L2(N+1)n para Ln e Ψi um mapeamento de L2(N+1)n para Lm.

 

     Um sistema dinâmico sobre cadeias S de janela de tempo N é definido pelas seguintes equações:

x[i+1] = Φi (x[I-N], … ,n[I], u[I-N], ... , u[i])

y[i] =  Ψi (x[I-N], … ,n[I], u[I-N], ... , u[i]),

para todo i Î Z+.

 

     O índice i é chamado de tempo discreto. Em particular, i = 0 corresponde ao tempo inicial. Os vetores x[i] e u[i] são chamados, respectivamente, de estado de S no tempo i e entrada de S no tempo i e entrada de S no tempo i. O vetor y[i] é a saída de S no tempo i. Os mapeamentos Φi e Ψi são respectivamente uma função de transição e um a função de saída. O inteiro n é a dimensão do estado e da entrada enquanto m é a dimensão da saída.

 

     Em particular, L = {0, 1} é chamada de cadeia booleana e os sistemas dinâmicos correspondentes são chamados de Sistemas Dinâmicos Booleanos.

 

     Sejam A um conjunto finito de funções de L2(N+1)n para Lm e PA uma distribuição de probabilidade em A. Uma função aleatória a é uma par (A, PA) e realizações de a são escolhas aleatórias em A de acordo com PA.

    

     Um Sistema Dinâmico Estocástico sobre Cadeias S de memória N é um Sistema Dinâmico em que Φj e Ψk são funções aleatórias. 

 

4.     O simulador

 

    O SGEN (Simulador para uma Rede de Expressão Gênica) é um programa que considera que o comportamento de cada gene pode ser expresso como funções que dependem dos estados anteriores dos genes do sistema. Os tempos e o intervalo de valores do estado de cada gene são discretos.

O programa recebe como entrada uma descrição de um Sistema Dinâmico Estocástico e simula a evolução no tempo desse sistema.

 

4.1 Arquitetura

A estrutura do SGEN é dividida em vários módulos. Cada módulo é responsável por uma funcionalidade do sistema.

 

4.1.1        Entrada

     O módulo de entrada consiste na descrição do sistema. Na implementação atual é permitida somente a especificação por texto (que será explicada mais adiante). Futuras implementações apresentarão interfaces gráficas entre outros.

 

4.1.2        Teste de Consistência

Este módulo consiste em verificar se, após a descrição do sistema dinâmico, o sistema está consistente. Para um sistema estar consistente é necessário satisfazer algumas restrições:

 - A soma das probabilidades das funções de transição na definição de um gene deve ser igual a 1.

 - Os valores de cada nível da árvore que representa a função de transição não podem estar sobrepostos

- Os parâmetros (genes) declarados na definição de um gene devem estar definidos

- Os estados dos genes, necessários para a simulação, devem estar definidos no seu histórico.

 

4.1.3        Banco de Dados

O Banco de dados é uma estrutura de tabela de Hash que funciona como uma tabela de símbolos, ou seja, ela guarda todas as informações do sistema.

 

4.1.4        Controle

O módulo Controle é a interface do sistema. É a partir Controle que o usuário consegue pedir uma simulação, acrescentar, editar ou remover novos genes e funções, carregar ou salvar um sistema.

 

4.1.5        Kernel

O módulo Kernel realiza a simulação propriamente dita. Ele recebe sinais do Controle e realiza a simulação. Para cada gene do sistema, o Kernel calcula seus estados através das funções de transição e do histórico de cada gene.

 

4.1.6        Saída

Nesta versão, a saída mostra o grau de ativação de cada gene.

 

  4.2 Especificação da entrada

     Para especificar um sistema na versão atual é necessário fornecer o vetor de estados x, as funções de transição e as condições iniciais. O vetor g = [g1 , g2 , ... , gn]t de genes define o estado do sistema. O valor do gi em um dado tempo é chamado de grau de ativação do gene.

 

4.2.1        Definição de Gene

Um gene corresponde a um componente do vetor x. A declaração Gene define um novo gene. A sintaxe para declaração de um novo gene é a seguinte:

 

Gene nome : {

                       Prob1 Função1 Lista_de_Argumentos;

                       Prob2 Função2 Lista_de_Argumentos;

                       ...

                       };

 Funçãoi identifica uma função de transição. Probi é um número entre 0 e 1. A soma das probabilidades de cada função de transição na declaração do gene deve ser 1. Lista_de_Argumentos tem o seguinte formato:

gene[delay] ... gene[delay]

onde gene é o nome de um gene e delay é o tempo em relação ao atual que se deve pegar o estado desse gene.

 

 

4.2.2        Definição de Funções

A declaração def define uma nova função. Uma função Ψ(x, y), com dois argumentos, com valores da função e dos argumentos no conjunto {-2, -1, 0, 1, 2}, pode ser representada como uma matriz 2x2 onde cada eixo representa um argumento. O valor para cada região é mostrado na figura abaixo:

 

 

-2

-1

0

1

2

-2

2

2

2

1

1

-1

2

2

2

1

1

0

2

2

2

1

1

1

-1

-1

0

0

0

2

-1

-1

0

0

0

 

O eixo vertical representa o primeiro argumento e o eixo horizontal representa o segundo argumento da função Ψ(x, y). Por exemplo, Ψ(0, 0) = 2 e Ψ(-2, 2) = 1.

Como regiões próximas na matriz geralmente apresentam valores próximos, o SGEN guarda essa função como uma árvore de decisão. A representação da árvore para o exemplo acima é a seguinte:

 

 

onde cada nível da árvore representa um parâmetro na função Ψ. Por exemplo, para se achar o valor da função Ψ(0, 2) deve-se pegar o primeiro parâmetro e procurar em que nó do primeiro nível se encontra o valor 0. A partir dessa sub-árvore (com raiz no nó encontrado), deve-se procurar o nó em que se encontra o segundo parâmetro, no caso 2. O valor na folha é o valor da função Ψ(0, 2).

 

A representação textual dessa árvore é a seguinte:

 

def funcao1 : Lista_de_Intervalo;

 

onde cada intervalo pode ser de dois tipos:

[inicio..fim] : valor ou 

[inicio..fim] : Intervalo

 

A descrição textual do exemplo acima é a seguinte:

def f1:

           [-2..0]: {

[-2..0]: 2

                       [  1..2]: 1

                                          }

                             [ 1..2]: {

                                         [-2..-1]: -1

                                         [ 0.. 2 ]:  0

                                         }

                   ;

           

                  

 

4.2.3        Histórico dos genes

É a condição inicial dos genes. Consiste em um vetor de estados anteriores para cada gene definido. A sintaxe é a seguinte:

 

hist gene: [Lista_de_Valores]

 

Lista_de_Valores contém uma série de valores dos estados anteriores do gene. Nesta lista, é necessária a existência de valores suficientes para o maior delay declarado na definição dos genes.

 

 

 

 

5.     Divisão de Trabalho:

    

      O grupo, em abril de 2000, era inicialmente formado por cinco pessoas: Marina Andretta, Fabiana Guarsoni Rocha, Ricardo Hideo Sahara, Rafael Pereira Luna e eu.

 

     Inicialmente foram realizadas reuniões semanais onde os professores Gubi e Junior Barrera apresentaram a idéia geral de como o simulador funcionaria e o que era um sistema dinâmico. Com algumas reuniões e o simulador relativamente especificado, o grupo foi dividido em duas frentes diferentes: uma que trabalharia na criação de um módulo responsável pela entrada do simulador e outra que construiria o núcleo do simulador. O Rafael e o Ricardo ficaram trabalhando na primeira frente e eu, a Marina e a Fabiana fizemos o núcleo. Todo o simulador foi implementado na linguagem C.

 

     No nosso subgrupo, nós sempre trabalhamos juntos, ou seja, não dividimos as tarefas para integrarmos tudo depois. Nós nos adaptamos bem a esse esquema por estarmos acostumados a fazer os EPs dessa maneira.

 

     No nosso subgrupo, implementamos a estrutura de genes, de funções e a estrutura do histórico dos genes e criamos as funções que faziam as simulações.

 

    Com o término dos dois módulos, os dois grupos se reuniram para o término da primeira versão do simulador.

 

 

 

6.     Desafios e Frustrações:

    

      Uma dificuldade em que sempre tivemos no projeto é o fato de não trabalharmos com o auxílio de uma ferramenta de controle de versão. Isso se deve ao fato de, no início, sempre trabalharmos juntos e não sentimos a necessidade de utilizar tal ferramenta, porém, mais tarde, vimos que era necessário.

 

     Outra dificuldade foi a de escolher a melhor ferramenta de documentação do sistema. O simulador tinha uma boa documentação de código, ou seja, os arquivos fontes do simulador estavam bem comentados. Porém não existia uma documentação de alto nível.

  

      Como mencionado anteriormente, o grupo foi formado em abril de 2000. Nessa época, minha única ocupação era o IME. Em junho de 2000, surgiu uma oportunidade de estagiar na PR&A e assim comecei a trabalhar. Assim começou meu maior desafio na Iniciação Científica. Eu desejava fazer as duas coisas: estagiar e terminar a Iniciação Científica, além de concluir o curso do BCC. E foi desse grande desafio que surgiu também grandes frustrações. No início eu consegui manter as duas tarefas (o estágio e o projeto de IC) até terminar a primeira versão do simulador. Porém, mais tarde, com EPs e provas do curso, eu sempre acabava adiando as minhas tarefas do projeto da iniciação. Consciente de que não estava me dedicando suficientemente ao simulador, deixei o grupo no último trimestre de 2001.

 

 

 

7.     Disciplinas Relevantes para a IC:

 

      Diversas matérias cursadas no IME foram importantes. MAC 211 e MAC 242 - Laboratório de Programação I e II foram as mais importantes, pois me forneceram uma boa noção de como implementar um projeto relativamente grande desde o início.

 

      MAC 323 - Estrutura de Dados também teve grande importância, pois, nela, obtive vários conceitos utilizados no projeto, como árvores, listas ligadas e tabelas de Hash.

 

      A matéria MAC 329 - Álgebra Booleana e Aplicações mostrou-me o conceito de reticulados booleanos e ilustrou um caso particular de sistema dinâmico que foi implementado no simulador.

 

      A matéria MAC 332 - Engenharia de Software deveria ter sido uma matéria importante para o projeto. O fato de o projeto não possuir uma definição exata nos impossibilitou de fazer uma modelagem do sistema, já que alterações no conceito do projeto eram feitas ao longo da implementação.

 

 

8.     Conclusão:

 

      Este projeto foi uma experiência de grande importância, pois participei dele desde a discussão do sistema até a implementação da atual versão e isso está sendo muito útil no meu estágio.

 

      Pretendo fazer pós-graduação no IME. Este tema é bastante interessante e o prof. Gubi já havia comentado da possibilidade de usa-lo para o mestrado. Mas ainda não tenho certeza em qual área eu seguirei no mestrado.

 

 

9.     Bibliografia:

 

      Para esta monografia eu utilizei o “paper” publicado pelo prof. Gubi sobre o SGEN.

 

      Para a implementação do simulador, nós usamos, como bibliografia, as “man-pages” do linux e tutoriais On-Line sobre a linguagem C.