invisible(Sys.setlocale("LC_CTYPE", "pt_BR.UTF-8"))
invisible(Sys.setlocale("LC_ALL", "pt_BR.UTF-8"))
RPubs
O objetivo é entender como a natureza funciona.
Este entendimento é obtido com:
A realidade é sempre virtual
A física origina-se na antiguidade como o estudo da filosofia natural na tentativa de descrever o universo:
Os fenômenos são descritos em termos da relação matemática entre
quantidades (varíaveis) que representam atributos observáveis do mundo
natural.
Tudo…
… é
física,
… pode ser descrito pela matemática e
… depende de
modelos
… porque não podemos conhecer o mundo físico
senão
através de modelos.
Modelos são idealizações,
“Representações convenientes de coisas importantes” (Prof. Eduardo Massad)
nos quais incluímos somente elementos relevantes.
Solução:
analítica
computacional
\[{{dX(t)}\over{dt}}={-\beta X(t)
Y(t)}\] \[{{dY(t)}\over{dt}}={\beta
X(t) Y(t)}\] Solução analítica:
\[Y(t) = { {X(0) e^{\beta \cdot X(0)
\cdot t}} \over {{X(0) e^{\beta \cdot X(0) \cdot t}} +
X(0)} } \]
\[~\]
\[~\]
\[~\]
Cada ponto cria dois pontos na linha seguinte:
Está disponível o Rscript pontos.R para que você recrie este exemplo. Pode ser executado de dentro do RStudio ou com
em um terminal R, respondendo assim: Número inteiro: quantas repetições? 1 Número inteiro: quantas gerações? 100 Regra 1: cada ponto gera 2 pontos em suas diagonais na próxima linha Regra 2: pontos gerados conflitam? (s/n): n Novos pontos gerados não entram em conflito. Regra 3: probabilidade de falha ao gerar novo ponto? [0,1]: 0 Todos os novos pontos são gerados |
Número inteiro: quantas repetições? 5 [...] Regra 3: probabilidade de falha ao gerar novo ponto? [0,1]: 0.01 Todos os novos pontos são gerados
Repetindo 5 vezes porque, agora, cada vez é única. Verá que, ocasionalmente, um ponto falhará e, dependendo de onde a falha ocorre, pequenas partes da figura que dependem deste ponto não são geradas.
Pontos que conflitam são eliminados:
Curiosamente, neste exemplo, a única diferença ocorre na geração 3, mas a geração 4 continua a mesma. Tente imaginar qual é a figura que resulta da execução repetida destas duas regras.
Está disponível o Rscript pontos.R para que você recrie este exemplo. Pode ser executado de dentro do RStudio ou com
em um terminal R, respondendo assim: Número inteiro: quantas repetições? 1 Número inteiro: quantas gerações? 100 Regra 1: cada ponto gera 2 pontos em suas diagonais na próxima linha Regra 2: pontos gerados conflitam? (s/n): s Novos pontos gerados entram em conflito. Regra 3: probabilidade de falha ao gerar novo ponto? [0,1]: 0 Todos os novos pontos são gerados |
A figura resultante, descrita neste artigo da Wikipedia, é conhecida como Triângulo de Sierpinki. O algorítmo proposto para sua geração é mais complicado do que foi proposto aqui, pois faz a construção da imagem dentro de um triângulo previamente delimitado, na forma de um fractal.
Da mesma forma que fizemos com a falha de 1% ou 20%, imagine o que acontecerá com a figura a ser gerada.
Será que você aprendeu a prever?
Vamos experimentar fazendo com que os pontos, agora, sejam gerados nas quatro direções. Quando não há conflito entre os novos pontos gerados, é fácil imaginar como será a figura resultante:
O Rscript pontos4.R implementa este exemplo. Execute-o com
source(“pontos4.R”)
e configure:
Número inteiro: quantas repetições? 1 Número inteiro: quantas gerações? 40 Regra 1: cada ponto gera 2 pontos em suas diagonais na próxima linha Regra 2a: novos pontos gerados conflitam entre si? (s/n): n Novos pontos gerados não entram em conflito entre si. Regra 2b: novos pontos gerados conflitam com os antigos? (s/n): n Novos pontos gerados não entram em conflito com a geracao anterior. Regra 3: probabilidade de falha ao gerar novo ponto? [0,1]: 0
Note que, agora, existe uma regra nova, 2b, que discutiremos adiante. |
Qual é a possível expectativa, no entanto, se os novos pontos entram em conflito. Algo assim?
Pare ver este exemplo em ação basta alterar a regra 2a para sim:
Número inteiro: quantas repetições? 1
Número inteiro: quantas gerações? 40
Regra 1: cada ponto gera 2 pontos em suas diagonais na próxima linha
Regra 2a: novos pontos gerados conflitam entre si? (s/n): s
Novos pontos gerados não entram em conflito entre si.
Regra 2b: novos pontos gerados conflitam com os antigos? (s/n): n
Novos pontos gerados não entram em conflito com a geracao anterior.
Regra 3: probabilidade de falha ao gerar novo ponto? [0,1]: 0
É improvável que antecipe o padrão que aparece.
Experimente incluir falha de geração de 20% dos pontos, alterando a regra 3:
Número inteiro: quantas repetições? 1
Número inteiro: quantas gerações? 40
Regra 1: cada ponto gera 2 pontos em suas diagonais na próxima linha
Regra 2a: novos pontos gerados conflitam entre si? (s/n): s
Novos pontos gerados não entram em conflito entre si.
Regra 2b: novos pontos gerados conflitam com os antigos? (s/n): n
Novos pontos gerados não entram em conflito com a geracao anterior.
Regra 3: probabilidade de falha ao gerar novo ponto? [0,1]: 0.20
Como um ponto, aqui, gera outros quatro, o padrão resiste a probabilidades ainda maiores. Experimente.
Vamos utilizar a regra2b. Note que, gerando pontos nas 4 direções, há pontos que são gerados sobre as posições da geração anterior, coisa que não acontecia com a figura triangular, que só ia adicionando linhas abaixo da posição atual. O que acontece se, por exemplo, fizermos com que os pontos da geração anterior sejam apagados quando pontos da geração seguinte conflitam com eles?
Experimente:
Número inteiro: quantas repetições? 1
Número inteiro: quantas gerações? 40
Regra 1: cada ponto gera 2 pontos em suas diagonais na próxima linha
Regra 2a: novos pontos gerados conflitam entre si? (s/n): s
Novos pontos gerados entram em conflito entre si.
Regra 2b: novos pontos gerados conflitam com os antigos? (s/n): s
Novos pontos gerados entram em conflito com a geracao anterior.
Regra 3: probabilidade de falha ao gerar novo ponto? [0,1]: 0
Todos os novos pontos são gerados
Também é interessante ter uma visão mais panorâmica dos padrões que aparecem, aumentando o número de gerações (ao preço de ter que esperar mais tempo para o computador gerá-las). Por exemplo, use 80. |
Por fim, como último experimento determinístico, sugerimos que experimente desligar a regra 2a, mantendo a regra 2b. Qual é o padrão que espera ver com:
Número inteiro: quantas repetições? 1 Número inteiro: quantas gerações? 40 Regra 1: cada ponto gera 2 pontos em suas diagonais na próxima linha Regra 2a: novos pontos gerados conflitam entre si? (s/n): n Novos pontos gerados entram em conflito entre si. Regra 2b: novos pontos gerados conflitam com os antigos? (s/n): s Novos pontos gerados entram em conflito com a geracao anterior. Regra 3: probabilidade de falha ao gerar novo ponto? [0,1]: 0 Todos os novos pontos são gerados
Finalmente, sugerimos que utilize as combinações das regras 2a, 2b e 3 com diferentes probabilidades de falha na geração dos pontos.
pode
escrever:
SELECAO
uma palavra com 7 caracteres.
Assumindo que utilizará o teclado modificado, acima, com 68 teclas, tem as seguintes probabilidades de produzir esta palavra:
\[\text{Para 1 letra}: {{1} \over {68}}\] \[\text{Para 2 letras}: {{1} \over {68^2}}\] \[\text{Para 7 letras}: {{1} \over {68^{7}}} \approx {{1} \over {6.72 \cdot 10^{12}}}\] Considerando que o universo existe há 13 bilhões de anos:
\[1.3 \cdot 10^{10} \text{anos} \approx 4.10 \cdot 10 ^ {17} \text{s}\]
e assumindo que uma tentativa é feita por segundo (nosso macaco é um digitador eficiente e incansável), haverá um acerto, em média, a cada \(6.72 \cdot 10^{12} \text{s}\), o que corresponde a um pouco mais que \(213\) mil anos.
O tempo pode parece exagerado para uma palavra com apenas 7 letras. O que aconteceria com SELECAO NATURAL que tem 15 letras (contando o espaço em branco). Faça os cálculos e descobrirá que o tempo, em média, para um macaco que digite 15 letras por segundo, é equivalente a 7.5 bilhões de vezes o tempo de duração do universo. Experimente com frases.R (necessita baixar o programa, ter duas libraries instaladas em seu computador (png e graphics ) e da imagem que está em
monkey.png
|
Um ensaio rápido mostra que existe um ótimo para a mutação.
Para que exista seleção (artificial ou natural) dois componentes são fundamentais:
Implementamos em selecao.R um modelo minimalista. Para experimentar com ele, pegue também a função implementada em eiras.friendlycolor.R.
Neste modelo criamos uma simulação por agente. Inicia-se com indivíduos de 6 cores diferentes em um ambiente que tem uma destas cores. A cada ciclo da simulação existe uma probabilidade para cada indivíduo morrer que é mínima se o indivíduo tiver a mesma cor do fundo, e tanto maior quanto mais discrepante for sua cor. É um modelo minimalista: o tamanho da população é fixo, os novos nascidos são repostos por reprodução assexuada de um dos sobreviventes selecionados ao acaso e, então, existe a probabilidade de mutarem para uma outra cor. A cada certo número de ciclos, a cor do fundo é alterada. Você pode alterar a configuração da simulação alterando os valores no trecho indicado no início do Rscript:
# tamanho da populacao populacao <- 200 # tamanho do ambiente env.x <- 240 env.y <- 240 # distância máxima da variação da posicao do individuo por ciclo shaking <- 2 # probabilidade de morte (minima e máxima) probmorte.min <- 0.01 probmorte.max <- 0.06 # probabilidade de mutacao para o novo individuo probmutacor <- 0.01 # duracao total da simulacao ciclos <- 50000 # cada quantos ciclos a cor de fundo muta ciclosmutaback <- 800 # a cada quantos ciclos exibe o ambiente ciclosshow <- 1
Este é o modelo mais simples, e que será mais detalhado adiante, sobre evolução social.
“PREFACE
Social evolution occurs when there is a tension between conflict and cooperation. The earliest replicating molecules inevitably competed with their neighbors for essential resources. They also shared a common interest in using local resources efficiently; otherwise, more prudent cartels would eventually drive overly competitive groups out of business. The conflicts and shared reproductive interests among cells within a complex organism, or among members of a honey bee colony, also qualify as social phenomena.”O nome do jogo é uma alegoria. Este modelo não é sobre a competição entre duas espécies, mas a descrição de dois comportamentos na disputa por recursos comuns:
Uma forma de descrever os três tipos de encontro (díades \(HH\), \(HD\) ou \(DH\) e \(DD\)) é montar uma tabela de recompensas. O recurso em disputa em cada encontro tem valor \(v\); quando existe luta (a qual só ocorre em \(HH\)), o perdedor tem custo \(c\):
|
H |
D |
H |
\({v-c} \over {2}\) |
\(v\) |
D |
\(0\) |
\({v} \over {2}\) |
Este tipo de tabela descreve os ganhos e custos considerando como focal o agente que aparece nas linhas. Lê-se:
A questão é saber qual das estratégias é mais vantajosa, i.e., com muitas interações, qual delas tem maior ganho líquido ao conseguir mais recursos evitando os custos.
Suponha que \(v\) e \(c\) sejam números positivos. Caso \(v < c\), como por exemplo \(v=2\) e \(c=3\), a tabela oferece:
|
H |
D |
H |
\(-{{1} \over {2}}\) |
\(2\) |
D |
\(0\) |
\({{2} \over {2}} = 1\) |
Esta tabela dá a impressão de que \(H\) ganha, em média, \(1.5\) enquanto \(D\) ganha 1; portanto, com o tempo, \(H\) deve sobreviver e \(D\) deve desaparecer. No entanto, as coisas são mais complexas: isto só é verdade se as proporções de \(H\) e \(D\) em uma população forem iguais. Se houver excesso de \(H\)s, tornando as díades \(HH\) muito frequentes, os \(H\) enfrentarão custos com maior frequência e perderão \(-{1 \over 2}\) repetidamente e, raramente encontrarão \(D\) de onde poderão receber \(2\).
No caso oposto, por exemplo com \(v>c\), (e.g., \(v=3\) e \(c=2\)) a tabela resultaria em
|
H |
D |
H |
\({1} \over {2}\) |
\(3\) |
D |
\(0\) |
\({3} \over {2}\) |
Neste caso, \(H\) sempre tem ganho líquido positivo e, portanto, é fácil perceber que terão vantagem em uma população com qualquer proporção de \(H\) e \(D\), além de terem ganhos maiores do que os indivíduos \(D\). Por outro lado, os ganhos de \(D\) também são sempre positivos e é difícil saber, somente por esta tabela, se a população evoluirá para um equilíbrio com um misto de \(H\) e \(D\) ou se a estratégia \(D\) será extinta.
Como este é um modelo simples, existe solução analítica, que não abordaremos agora (será vista em outro capítulo). A solução analítica tem algumas vantagens, especialmente porque provê uma solução demonstrável, utiliza uma linguagem de fácil comunicação e, após ter sido encontrada a solução, oferece o resultado imediatamente.
Em geral, nas soluções analíticas, buscando simplificar o sistema, as subpopulações são tratadas como proporções e a população total é 1 (100%). Complicações ambientais são abstraídas: a população é infinita, todos os indivíduos contatam outros somente dependendo de suas proporções e sem restrições causadas pela distância (panmixia), os indivíduos não têm localização espacial, pois o próprio ambiente não tem dimensões e é visto como infinito; em suma, todas as mudanças de estado dos indivíduos dependem de funções matemáticas pré-concebidas que podem utilizar quaisquer dados, ainda que não reflitam elementos que um organismo poderia acessar.
A principal desvantagem da solução analítica, no entanto, é que mostrará o desfecho final (condições para equilíbrio ou extinção de alguma das estratégias) mas não lhe trará percepções sobre as trajetórias que estas subpopulações, \(H\) e \(D\), seguirão ao longo do tempo. Além disto, como já vimos, só é possível em sistemas relativamente simples.
Usando estratégia similar ao modelo de seleção dos indivíduos de acordo com a cor de fundo, podemos criar uma arena na qual indivíduos \(H\) e \(D\) se movimentem. Como este tipo de modelo cria uma imitação simplificada do sistema que procura representar, diversos problemas precisam ser resolvidos. A arena é finita e os indivíduos, também finitos e geralmente em número relativamente pequeno, são representados nela e adquirem, inevitavelmente, certas configurações espaciais que podem distorcer os resultados em comparação com a solução analítica: há efeitos de proximidade e de bordas que complicam a solução do problema.
Ainda assim, o modelo deve incorporar os elementos mais essenciais que atendam as premissas do problema a ser resolvido. São elas:
A população tem que ser finita, mas não precisa ter tamanho fixo. Por isso, associamos a reprodução e a sobrevivência do indivíduo aos recursos que adquirir. Vários outros cuidados podem ser levados em conta: como o problema original não considera efeitos da dispersão geográfica e supõe que os encontros entre \(H\) e \(D\) dependem somente de suas respectivas proporções, \(\text{shaking}\) deve ser considerável em relação às dimensões da arena para que as subpopulações de \(H\) e \(D\) misturem-se bastante; \(d\) precisa ser relativamente pequeno em relação às dimensões da arena para que díades não sejam formadas entre indivíduos distantes entre si; para evitar efeitos de ordem, cada indivíduo participa somente de uma díade em cada ciclo e a ordem que a simulação segue para a formação das díades precisa ser aleatorizada a cada ciclo.
Embora não sejam parte da formulação analítica, duas outras implementações foram feitas:
Na solução analítica, recursos são adquiridos quando disputados pelas díades. Caso somente isto fosse feito, criaríamos uma situação em que cada indivíduo depende da presença de outro para se alimentar, o que não reflete a biologia. Situação ainda mais extrema pode ser ilustrada com a tabela de recompensas quando \(v=2\) e \(c=3\), imaginando-se uma população composta exclusivamente por falcões: esta população sempre iria à extinção porque cada falcão somente se alimentaria na presença de outro falcão, em média perdendo alimento em cada confronto. Ao contrário, o que se pretende modelar aqui é o ganho ou perda diferencial vindo das disputas quando díades são formadas, mas deve existir uma fonte independente. Isto foi alcançado fazendo com que o alimento não disputado, caso esteja ao alcance de algum indivíduos, seja também consumido.
Este consumo cria o problema oposto. Como alimento é fornecido, adquirido pelos indivíduos e passado aos descendentes sem que exista consumo ou perda, estas unidades alimentares serão continuamente acumuladas pela população. A única forma de um indivíduo ser retirado deste ambiente é se não conseguir adquirir alimento, o que não basta, pois o indivíduo nasce com uma quantidade inicial de recursos, não tem perda ou consumo, não envelhece e somente utiliza de sua reserva quando tem excedente (são, em outras palavras, eternos acumuladores de alimento). Como resultado, a população sairá do controle, crescendo continuamente. É preciso, portanto, que exista uma saída do alimento deste ambiente. Duas formas simples para fazer isto são: (1) debitar uma certa quantidade de todos os indivíduos a cada ciclo (metabolismo, fazendo o alimento total da população reduzir-se) ou (2) ter uma probabilidade para remover o indivíduo a cada ciclo (mortalidade extrínseca, removendo o alimento acumulado junto com o indivíduo que o porta). Os dois métodos estão implementados neste modelo e podem ser usados à sua escolha.
Um protótipo deste modelo minimalista está implementado em eiras.hawkdove.R. Ao terminar, este programa deixa toda a trajetória registrada em hawkdove_res.xlsx.
Outra forma de modelagem é a inclusão das equações necessárias em um programa. Pode-se usar sistemas prontos (como por exemplo o Wolfram Mathematica) ou desenvolver um programa dedicado ao problema que quer resolver. Para esta disciplina desenvolvemos o eiras.animalconflict.R. Este Rscript lê uma planilha, permitindo a exploração de vários problemas diferentes, dos quais “Hawk & Dove” é o mais simples.
Abordaremos problemas mais complexos em capítulos adiante, quando uma terceira estratégia será incluída e este programa gerará gráficos ternários. |
O jogo com \(v=2\) e \(c=3\) utiliza a configuração disponível em HawkDove23.xlsx. O programa automaticamente explora, iniciando cada simulação com diferentes proporções de Hawk e Dove (indicadas pelos círculos cheios) e indica com setas a direção para a qual as proporções de modificam.
O programa mostra que existe um ponto de equilíbrio intermediário entre Hawk e Dove, para o qual as setas convergem, com um diagrama de fase:
e com as trajetórias percorridas:
Para \(v=3\) e \(c=2\), configurada em HawkDove32.xlsx só os Hawks permanecem:
As imagens acima foram geradas com o próprio Rscript, que guarda três arquivos com o mesmo nome da planilha de configuração e os seguintes sufixos:
Note que, aqui, não se computa o tamanho das subpopulações, mas apenas suas proporções. Este tipo de implementação é mais próxima da solução analítica do que da simulação com agentes.
Usando o arquivo hawkdove_res.xlsx, podemos observar toda a evolução da simulação por agente no caso em que o ambiente começa com 100% de pombas (\(D\)). A partir do ciclo 2000 aparecem falcões (\(H\)) que invadem o ambiente, reduzem o tamanho da população total e terminam por superar, em número, a população original. Três repetições da simulação com as mesmas condições iniciais mostram:
A soluçao da simulação numérica, porém, é dada em proporção de cada
um dos genótipos e foi armazenada em HawkDove23_results.xlsx. Para
podermos verificar se ambas as soluções são aproximadamente iguais,
podemos comparar esta solução:
com a da simulação por agente, convertidas as mesmas três repetições
em proporção:
Ambas são qualitativamente iguais, diferindo na escala do tempo porque a da solução numérica é uma abstração. As linhas horizontais pontilhadas correspondem a \(1 \over 3\) e \(2 \over 3\) que, como será visto em capítulo futuro, correspondem à solução analítica.
Silveira PSP, Massad E (1998)
Modeling and Simulating
Morphological Evolution in an Artificial Life Environment.
Computers and Biomedical Research 31(2):1-17 https://doi.org/10.1006/cbmr.1997.1464
Silveira PSP, Butler JP, Fredberg JJ (2005)
Length adaptation of
airway smooth muscle: a stochastic model of cytoskeletal dynamics.
Journal of Applied Physiology 99:2087-2098 https://doi.org/10.1152/japplphysiol.00159.2005
Silveira PSP, Fredberg JJ (2005)
Smooth muscle length adaptation
and actin filament length: a network model of the cytoskeletal
dysregulation.
Canadian Journal of Physiology and
Pharmacology 83(10):923-931. https://doi.org/10.1139/y05-092
Silveira PSP, Alencar AM, Majumdar A, Lemos M, Fredberg JJ, Suki B
(2009)
Percolation in a network with long-range connections:
Implications for cytoskeletal structure and function.
Physica
A 388:2087-1521-1526 http://dx.doi.org/10.1016/j.physa.2008.12.024
Este programa foi desenvolvido e instalado no museu do Butantã a pedido do Professor Isaías Raw, para rodar em Ruindows.
Você pode experimentá-lo pegando uma cópia. Faça do download de epidemicro.zip, descompacte e execute epidemicro.exe.