Aluno: Fábio Massaaki Katayama
Professor Orientador: Marco Dimas Gubitoso
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.
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.