Para esta ativiade vocês deverão:

  1. Baixar e instalar o programa R entre aqui: https://vps.fmvz.usp.br/CRAN/ e escolha a versão que lhe serve.

  2. Baixar e instalar o programa RStudio, para tornar sua vida mais fácil. https://posit.co/download/rstudio-desktop/

  3. Quando os 2 estiverem rodando…

Instale o pacote: “beepr” utilizando a aba “ferramentas” (Tools)

  1. Rode o seguinte script:
#começa aqui

dawkinzinho<-function(atributo,taxa_de_m,tamanh_prole){
library(beepr)
#determinar início para gerador de nos. aleatórios
set.seed(1234, kind="Mersenne-Twister")

## definindo atributo formado por combinação de letras e espaço
target <- unlist(strsplit(atributo, ""))

##conjunto de caracteres que pode ser usado para formar o atributo
charset <- c(LETTERS, " ")
charset

##combinação inicial ou "parental" gerada aleatoriamente 
parent <- sample(charset, length(target), replace=TRUE)
parent

##a taxa de mudanca das letras, i.e. a taxa de mutação
mutaterate <- taxa_de_m

## tamanho da prole
C <- tamanh_prole

#medida de fitness (aptidão)para cada sequência de caracteres - relativa a "frase alvo" 
fitness <- function(parent, target) {
  sum(parent == target) / length(target)
}

#função para gerar primeiro "atributo", i.e primeira frase
mutate <- function(parent, mutaterate, charset) {
  #Probabilidades aleatórias extraidas de uma distribuição uniforme 'runif'
  #Quantas? - uma para cada possível caracater no atributo
  p <- runif(length(parent))
  #Quantas dessas probabilidades são menores que a taxa de mutação?
  nMutants <- sum(p<mutaterate)
  #condição para rodar : nMutants é diferente de 0, i.e. é verdadeiro
  #In the case of numeric vector, zero is taken as FALSE, rest as TRUE.
  if (nMutants) {
    parent[ p < mutaterate ] <-sample(charset, nMutants, replace=TRUE)
  }
  parent
}

#função para juntar tudo e gerar "frases filhote"
evolve <- function(parent, mutate, fitness, C, mutaterate, charset) {
  #criando os filhotes de acordo com número escolhido para "C" e usando a função "mutate"
  #simplify=FALSE para que seja mantido o formato
  children <- replicate(C, mutate(parent, mutaterate, charset),simplify=FALSE)
  #gerando lista de todos os fenótipos, i.e. pais+filhotes 
  children <- c(list(parent), children)
  #"pinçando" filhote com fitness máximo 
  #'target' precisa ser definido para rodar a função 'fitness'     
  children[[which.max(sapply(children, fitness, target=target))]]
}

data_frame = data.frame(col1 = numeric(), 
                       col2 = numeric(),
                       col3 = numeric(),
                       col4 = numeric(),
                       stringsAsFactors = FALSE)
i<-0
while ( ! all(parent == target)) {
  i<-i+1
  parent <- evolve(parent, mutate, fitness, C, mutaterate, charset)
  resultao<-c(format(i, width=4),
      format(C,width=4),
      format(mutaterate,width=4),
      formatC(fitness(parent, target), digits=2, format="f"))
  data_frame <- rbind(data_frame,resultao,stringsAsFactors=FALSE)
    }
beep(4)
names(data_frame)<-c("no.de gerações","tamanho da prole","taxa de mut.","aptidão")
print(tail(data_frame))

}
# acaba aqui
  1. Se nada acontecer, deu certo! Você acaba de criar uma função. Feito isso, rode a função dawkinzinho especificando os parametros que queremos explorar. Neste caso, o atributo, i.e. a frase; a taxa de mutação (taxa_de_m) e o tamanho da prole (tamanh_prole).

Exemplo

dawkinzinho("EU NAO SEI NADA DE R",0.1,10)
##     no.de gerações tamanho da prole taxa de mut. aptidão
## 383            383               10          0.1    0.95
## 384            384               10          0.1    0.95
## 385            385               10          0.1    0.95
## 386            386               10          0.1    0.95
## 387            387               10          0.1    0.95
## 388            388               10          0.1    1.00

OBS: No atributo, utilizar apenas letras ou espaçov (nada de acentos,cedilha, etc) e utilizar no começo e final para especificar que é texto.

Lembrar que em cada linha do resultado temos: no. de gerações transcorridas, no. de filhotes, taxa de mutação, fitness da frase que se reproduz, e o frase (atributo).

Possível forma de analisar efeitos da taxa de mutação e tamanho da prole no no. de gerações transcorridas para gerar o atributo com fitness máximo.

  1. Criar tabela em excel e copiar a última linha dos resultados

  2. Rodar a simulação com novos valores (isto é rodar a função novamente com novos valores) e repetir passo 1.

  3. Analisar relação (correlação ou outra estatística) entre valores na tabela.

Boa sorte!