Para esta ativiade vocês deverão:
Explorar os efeitos da taxa de mutação e tamanho da prole sobre o número de gerações necessárias para que o atributo “correto” seja formado.
Explorar os efeitos da complexidade do atributo sobre o número de gerações necessárias para que o atributo “correto” seja formado.
Valores que devem ser alterados inicialmente:
mutaterate - taxa de mutação máxima permitida
C - no. de filhotes por geração
#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("EU ACHO QUE ELA PARECE UM TATU", ""))
##conjunto de caracteres que pode ser usado para formar o atributo
charset <- c(LETTERS, " ")
charset
## [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S"
## [20] "T" "U" "V" "W" "X" "Y" "Z" " "
##combinação inicial ou "parental" gerada aleatoriamente
parent <- sample(charset, length(target), replace=TRUE)
parent
## [1] "P" "Z" "V" "E" "L" "O" "I" "E" "F" "P" "D" "B" "G" "V" "Z" "F" "O" "N" "T"
## [20] "N" "X" "D" "D" "U" "H" "T" "X" "C" "D" "Z"
##a taxa de mudanca das letras, i.e. a taxa de mutação
mutaterate <- 0.01
## tamanho da prole
C <- 12
#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, rate, 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<rate)
#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 < rate ] <-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))]]
}
#criando função para gerar "print" de resultados contendo:
#no.de gerações (i); no. de filhotes (C); taxa de mutação; valor de fitness do atributo inicial
# e o atributo inicial em cada geração
.printGen <- function(parent, target, gen) {
cat(format(i, width=3),
format(C,width=5),
format(mutaterate,width=5),
formatC(fitness(parent, target), digits=2, format="f"),
paste(parent, collapse=""), "\n")
}
#criando 'loop' para a função de resultados enquanto alvo não for atingido
i <- 0
.printGen(parent, target, i)
## 0 12 0.01 0.03 PZVELOIEFPDBGVZFONTNXDDUHTXCDZ
while ( ! all(parent == target)) {
i <- i + 1
parent <- evolve(parent, mutate, fitness, C, mutaterate, charset)
# esolhendo intervalo geracional para ser mostrado nos resultados
if (i %% 5 == 0) {
.printGen(parent, target, i)
}
}
## 5 12 0.01 0.03 PZVELOIEFPDBGVZFONTNXDDUHTXCDZ
## 10 12 0.01 0.07 PZVELOIEFPDBGVZFONTNXD UHTXCDZ
## 15 12 0.01 0.13 PZVELOOEQPDBGVZFONTNXD UHTXCDZ
## 20 12 0.01 0.13 PZVELOOEQPDBGVZFONTNXD UHTXCDZ
## 25 12 0.01 0.17 PZVELOOEQPDBGVUFOITNXE UHTXCDZ
## 30 12 0.01 0.17 PZVELOOEQPDBGVUFOITNXE UHTXCDZ
## 35 12 0.01 0.20 PZVELOOEQUDBGVUFOITNXE UHTXCDZ
## 40 12 0.01 0.20 PZVELOOEQUDBGVUFOITNXE UHTXCDZ
## 45 12 0.01 0.20 PZVELOOEQUDBGVUFOITNXE UHTXCDZ
## 50 12 0.01 0.20 PZVELOOEQUDBGVUFOITNXE UHTXCDZ
## 55 12 0.01 0.23 PUVELOOEQUDBGVUFOITNXE UHTXCDZ
## 60 12 0.01 0.23 PUVELOOEQUDBGVUFOITNXE UHTXCDZ
## 65 12 0.01 0.23 PUVELOOEQUDBGVUFOITNXE UHTXCDZ
## 70 12 0.01 0.27 PUVELOOEQUDBEVUFOITNXE UHTXCDZ
## 75 12 0.01 0.27 PUVELOOEQUDBEVUFOITNXE UHTXCDZ
## 80 12 0.01 0.27 PUVELOOEQUDBEVUFOITNXE UHTXCDZ
## 85 12 0.01 0.30 PUVECOOEQUDBEVUFOITNXE UHTXCDZ
## 90 12 0.01 0.30 PUVECOOEQUDBEVUFOITNXE UHTXCDZ
## 95 12 0.01 0.33 PUVECOOEQUDBEVUFOIRNXE UHTXCDZ
## 100 12 0.01 0.33 PUVECOOEQUDBEVUFOIRNXE UHTXCDZ
## 105 12 0.01 0.33 PUVECOOEQUDBEVUFOIRNXE UHTXCDZ
## 110 12 0.01 0.33 PUVECOOEQUDBEVUFOIRNXE UHTXCDZ
## 115 12 0.01 0.33 PUVECOOEQUDBEVUFOIRNXE UHTXCDZ
## 120 12 0.01 0.33 PUVECOOEQUDBEVUFOIRNXE UHTXCDZ
## 125 12 0.01 0.33 PUVECOOEQUDBEVUFOIRNXE UHTXCDZ
## 130 12 0.01 0.33 PUVECOOEQUDBEVUFOIRNXE UHTXCDZ
## 135 12 0.01 0.40 PUVECOO QUDBEVUFOIRNXE UHTTCDZ
## 140 12 0.01 0.43 PUVECOO QUDBEVUFOIREXE UHTTCDZ
## 145 12 0.01 0.43 PUVECOO QUDBEVUFOIREXE UHTTCDZ
## 150 12 0.01 0.47 PUVECOO QUDBEVU OIREXE UHTTCDZ
## 155 12 0.01 0.50 PUVECOO QUDBELU OIREXE UHTTCDZ
## 160 12 0.01 0.53 EUVECOO QUDBELU OIREXE UHTTCDZ
## 165 12 0.01 0.57 EUVACOO QUDBELU OIREXE UHTTCDZ
## 170 12 0.01 0.57 EUVACOO QUDBELU OIREXE UHTTCDZ
## 175 12 0.01 0.57 EUVACOO QUDBELU OIREXE UHTTCDZ
## 180 12 0.01 0.57 EUVACOO QUDBELU OIREXE UHTTCDZ
## 185 12 0.01 0.57 EUVACOO QUDBELU OIREXE UHTTCDZ
## 190 12 0.01 0.57 EUVACOO QUDBELU OIREXE UHTTCDZ
## 195 12 0.01 0.57 EUVACOO QUDBELU OIREXE UHTTCDZ
## 200 12 0.01 0.57 EUVACOO QUDBELU OIREXE UHTTCDZ
## 205 12 0.01 0.57 EUVACOO QUDBELU OIREXE UHTTCDZ
## 210 12 0.01 0.57 EUVACOO QUDBELU OIREXE UHTTCDZ
## 215 12 0.01 0.57 EUVACOO QUDBELU OIREXE UHTTCDZ
## 220 12 0.01 0.57 EUVACOO QUDBELU OIREXE UHTTCDZ
## 225 12 0.01 0.57 EUVACOO QUDBELU OIREXE UHTTCDZ
## 230 12 0.01 0.57 EUVACOO QUDBELU OIREXE UHTTCDZ
## 235 12 0.01 0.57 EUVACOO QUDBELU OIREXE UHTTCDZ
## 240 12 0.01 0.57 EUVACOO QUDBELU OIREXE UHTTCDZ
## 245 12 0.01 0.57 EUVACOO QUDBELU OIREXE UHTTCDZ
## 250 12 0.01 0.57 EUVACOO QUDBELU OIREXE UHTTCDZ
## 255 12 0.01 0.57 EUVACOO QUDBELU OIREXE UHTTCDZ
## 260 12 0.01 0.57 EUVACOO QUDBELU OIREXE UHTTCDZ
## 265 12 0.01 0.57 EUVACOO QUDBELU OIREXE UHTTCDZ
## 270 12 0.01 0.57 EUVACOO QUDBELU OIREXE UHTTCDZ
## 275 12 0.01 0.57 EUVACOO QUDBELU OIREXE UHTTCDZ
## 280 12 0.01 0.57 EUVACOO QUDBELU OIREXE UHTTCDZ
## 285 12 0.01 0.57 EUVACOO QUDBELU OIREXE UHTTCDZ
## 290 12 0.01 0.57 EUVACOO QUDBELU OIREXE UHTTCDZ
## 295 12 0.01 0.57 EUVACOO QUDBELU OIREXE UHTTCDZ
## 300 12 0.01 0.60 EUVACHO QUDBELU OIREXE UHTTCDZ
## 305 12 0.01 0.60 EUVACHO QUDBELU OIREXE UHTTCDZ
## 310 12 0.01 0.60 EUVACHO QUDBELU OIREXE UHTTCDZ
## 315 12 0.01 0.60 EUVACHO QUDBELU OIREXE UHTTCDZ
## 320 12 0.01 0.60 EUVACHO QUDBELU OIREXE UHTTCDZ
## 325 12 0.01 0.60 EUVACHO QUDBELU OIREXE UHTTCDZ
## 330 12 0.01 0.60 EUVACHO QUDBELU OIREXE UHTTCDZ
## 335 12 0.01 0.60 EUVACHO QUDBELU OIREXE UHTTCDZ
## 340 12 0.01 0.60 EUVACHO QUDBELU OIREXE UHTTCDZ
## 345 12 0.01 0.60 EUVACHO QUDBELU OIREXE UHTTCDZ
## 350 12 0.01 0.60 EUVACHO QUDBELU OIREXE UHTTCDZ
## 355 12 0.01 0.63 EUVACHO QUDBELU OAREXE UHTTCDZ
## 360 12 0.01 0.63 EUVACHO QUDBELU OAREXE UHTTCDZ
## 365 12 0.01 0.63 EUVACHO QUDBELU OAREXE UHTTCDZ
## 370 12 0.01 0.63 EUVACHO QUDBELU OAREXE UHTTCDZ
## 375 12 0.01 0.63 EUVACHO QUDBELU OAREXE UHTTCDZ
## 380 12 0.01 0.63 EUVACHO QUDBELU OAREXE UHTTCDZ
## 385 12 0.01 0.70 EUVACHO QUDBELA OAREXE UHTTCTZ
## 390 12 0.01 0.77 EUVACHO QUDBELA OAREXE UM TCTZ
## 395 12 0.01 0.77 EUVACHO QUDBELA OAREXE UM TCTZ
## 400 12 0.01 0.77 EUVACHO QUDBELA OAREXE UM TCTZ
## 405 12 0.01 0.77 EUVACHO QUDBELA OAREXE UM TCTZ
## 410 12 0.01 0.77 EUVACHO QUDBELA OAREXE UM TCTZ
## 415 12 0.01 0.83 EUVACHO QUD ELA OARECE UM TCTM
## 420 12 0.01 0.83 EUVACHO QUD ELA OARECE UM TCTM
## 425 12 0.01 0.83 EUVACHO QUD ELA OARECE UM TCTM
## 430 12 0.01 0.83 EUVACHO QUD ELA OARECE UM TCTM
## 435 12 0.01 0.87 EUVACHO QUD ELA OARECE UM TATM
## 440 12 0.01 0.87 EUVACHO QUD ELA OARECE UM TATM
## 445 12 0.01 0.87 EUVACHO QUD ELA OARECE UM TATM
## 450 12 0.01 0.87 EUVACHO QUD ELA OARECE UM TATM
## 455 12 0.01 0.87 EUVACHO QUD ELA OARECE UM TATM
## 460 12 0.01 0.87 EUVACHO QUD ELA OARECE UM TATM
## 465 12 0.01 0.87 EUVACHO QUD ELA OARECE UM TATM
## 470 12 0.01 0.87 EUVACHO QUD ELA OARECE UM TATM
## 475 12 0.01 0.87 EUVACHO QUD ELA OARECE UM TATM
## 480 12 0.01 0.87 EUVACHO QUD ELA OARECE UM TATM
## 485 12 0.01 0.87 EUVACHO QUD ELA OARECE UM TATM
## 490 12 0.01 0.87 EUVACHO QUD ELA OARECE UM TATM
## 495 12 0.01 0.87 EUVACHO QUD ELA OARECE UM TATM
## 500 12 0.01 0.87 EUVACHO QUD ELA OARECE UM TATM
## 505 12 0.01 0.87 EUVACHO QUD ELA OARECE UM TATM
## 510 12 0.01 0.87 EUVACHO QUD ELA OARECE UM TATM
## 515 12 0.01 0.87 EUVACHO QUD ELA OARECE UM TATM
## 520 12 0.01 0.87 EUVACHO QUD ELA OARECE UM TATM
## 525 12 0.01 0.87 EUVACHO QUD ELA OARECE UM TATM
## 530 12 0.01 0.87 EUVACHO QUD ELA OARECE UM TATM
## 535 12 0.01 0.87 EUVACHO QUD ELA OARECE UM TATM
## 540 12 0.01 0.87 EUVACHO QUD ELA OARECE UM TATM
## 545 12 0.01 0.87 EUVACHO QUD ELA OARECE UM TATM
## 550 12 0.01 0.87 EUVACHO QUD ELA OARECE UM TATM
## 555 12 0.01 0.87 EUVACHO QUD ELA OARECE UM TATM
## 560 12 0.01 0.87 EUVACHO QUD ELA OARECE UM TATM
## 565 12 0.01 0.90 EUVACHO QUD ELA PARECE UM TATM
## 570 12 0.01 0.90 EUVACHO QUD ELA PARECE UM TATM
## 575 12 0.01 0.90 EUVACHO QUD ELA PARECE UM TATM
## 580 12 0.01 0.90 EUVACHO QUD ELA PARECE UM TATM
## 585 12 0.01 0.90 EUVACHO QUD ELA PARECE UM TATM
## 590 12 0.01 0.90 EUVACHO QUD ELA PARECE UM TATM
## 595 12 0.01 0.90 EUVACHO QUD ELA PARECE UM TATM
## 600 12 0.01 0.90 EUVACHO QUD ELA PARECE UM TATM
## 605 12 0.01 0.90 EUVACHO QUD ELA PARECE UM TATM
## 610 12 0.01 0.90 EUVACHO QUD ELA PARECE UM TATM
## 615 12 0.01 0.90 EUVACHO QUD ELA PARECE UM TATM
## 620 12 0.01 0.93 EUVACHO QUE ELA PARECE UM TATM
## 625 12 0.01 0.93 EUVACHO QUE ELA PARECE UM TATM
## 630 12 0.01 0.93 EUVACHO QUE ELA PARECE UM TATM
## 635 12 0.01 0.93 EUVACHO QUE ELA PARECE UM TATM
## 640 12 0.01 0.93 EUVACHO QUE ELA PARECE UM TATM
## 645 12 0.01 0.93 EUVACHO QUE ELA PARECE UM TATM
## 650 12 0.01 0.93 EUVACHO QUE ELA PARECE UM TATM
## 655 12 0.01 0.93 EUVACHO QUE ELA PARECE UM TATM
## 660 12 0.01 0.93 EUVACHO QUE ELA PARECE UM TATM
## 665 12 0.01 0.93 EUVACHO QUE ELA PARECE UM TATM
## 670 12 0.01 0.93 EUVACHO QUE ELA PARECE UM TATM
## 675 12 0.01 0.93 EUVACHO QUE ELA PARECE UM TATM
## 680 12 0.01 0.93 EUVACHO QUE ELA PARECE UM TATM
## 685 12 0.01 0.93 EUVACHO QUE ELA PARECE UM TATM
## 690 12 0.01 0.93 EUVACHO QUE ELA PARECE UM TATM
## 695 12 0.01 0.93 EUVACHO QUE ELA PARECE UM TATM
## 700 12 0.01 0.93 EUVACHO QUE ELA PARECE UM TATM
## 705 12 0.01 0.93 EUVACHO QUE ELA PARECE UM TATM
## 710 12 0.01 0.93 EUVACHO QUE ELA PARECE UM TATM
## 715 12 0.01 0.93 EUVACHO QUE ELA PARECE UM TATM
## 720 12 0.01 0.93 EUVACHO QUE ELA PARECE UM TATM
## 725 12 0.01 0.93 EUVACHO QUE ELA PARECE UM TATM
## 730 12 0.01 0.93 EUVACHO QUE ELA PARECE UM TATM
## 735 12 0.01 0.93 EUVACHO QUE ELA PARECE UM TATM
## 740 12 0.01 0.93 EUVACHO QUE ELA PARECE UM TATM
## 745 12 0.01 0.93 EUVACHO QUE ELA PARECE UM TATM
## 750 12 0.01 0.93 EUVACHO QUE ELA PARECE UM TATM
## 755 12 0.01 0.93 EUVACHO QUE ELA PARECE UM TATM
## 760 12 0.01 0.93 EUVACHO QUE ELA PARECE UM TATM
## 765 12 0.01 0.93 EUVACHO QUE ELA PARECE UM TATM
## 770 12 0.01 0.93 EUVACHO QUE ELA PARECE UM TATM
## 775 12 0.01 0.93 EUVACHO QUE ELA PARECE UM TATM
## 780 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 785 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 790 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 795 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 800 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 805 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 810 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 815 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 820 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 825 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 830 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 835 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 840 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 845 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 850 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 855 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 860 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 865 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 870 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 875 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 880 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 885 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 890 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 895 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 900 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 905 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 910 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 915 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 920 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 925 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 930 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 935 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 940 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 945 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 950 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 955 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 960 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 965 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 970 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 975 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 980 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 985 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 990 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 995 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 1000 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 1005 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 1010 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 1015 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 1020 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 1025 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 1030 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 1035 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 1040 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 1045 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 1050 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 1055 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 1060 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 1065 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 1070 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 1075 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 1080 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 1085 12 0.01 0.97 EU ACHO QUE ELA PARECE UM TATM
## 1090 12 0.01 1.00 EU ACHO QUE ELA PARECE UM TATU
.printGen(parent, target, i)
## 1090 12 0.01 1.00 EU ACHO QUE ELA PARECE UM TATU
######### The end!
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 possíveis efeitos da taxa de mutação e tamanho da prole no no. de gerações transcorridas para gerar o atributo com fitness máximo.
Criar tabela em excel e copiar a última linha dos resultados
Rodar a simulação com novos valores e repetir passo 1.
Analisar relação (correlação ou outra) entre valores na tabela.
Boa sorte!