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.     Sobre o curso no SGEN:

 

     Diversas matérias cursadas no IME foram importantes. 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.

 

     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 Álgebra Booleana mostrou-me o conceito de reticulados booleanos e ilustrou um caso particular de sistema dinâmico que foi implementado no simulador.

 

     A matéria 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.

 

 

6.     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.

    O trabalho foi dividido em equipes que trabalharam em duas frentes do simulador: a entrada e o núcleo. O fato de, durante o curso do BCC, fazermos muitos trabalhos em duplas, facilitou muito esse trabalho em equipe.