[R-br] Otimizar tempo de processamento

Tiago de Oliveira Vieira tiagovieira7 em yahoo.com.br
Quinta Agosto 25 01:10:37 BRT 2011


Benilton,

Segui suas dicas e o programa rodou bem, mas quando aumento o número
máximo de filhos "f" ou o número de gerações "n" e programa não roda,
veja:

> library(doMC)
> registerDoMC()
> programa2 <- function(f,n,m) {
+   ## f: número máximo de filhos
+   ## n: número de gerações
+   ## m: número de iterações
+   S <- foreach(p=seq(0,1,by=0.01), .combine=rbind) %dopar% {
+     pp <- 0
+     for (g in 1:m) {
+       y <- 1
+       for (k in 1:n) y <- rbinom(1, y*f, p)
+       if (y > 0) pp <- pp + 1
+     }
+     c(p, pp/m)
+     }
+   return(S)
+ }
> system.time(prog2 <- programa2(3,100,1000))
Erro em { : task 48 failed - "valor ausente onde TRUE/FALSE necessário"
Além disso: Houve 50 ou mais avisos (use warnings() para ver os
primeiros 50)
Timing stopped at: 61.27 0.03 61.58 
> warnings()
Mensagens de aviso:
1: In rbinom(1, y * f, p) : NAs produzidos
2: In rbinom(1, y * f, p) : NAs produzidos
3: In rbinom(1, y * f, p) : NAs produzidos
4: In rbinom(1, y * f, p) : NAs produzidos

Em Qui, 2011-08-18 às 17:45 -0300, Leonard Assis escreveu:
> Entendi sua explanação. heehhe
>  
> olhei o código bem por alto depois do almoço num tempó livre, única
> coisa "estranha" que notei foi esse loop que pra mim estava sem muito
> sentido.
>  
> Mas muito dessa minha opinião vai do fato de não conhecer ao fundo o
> problema, pois para mim, ele estaria interessado em cada uma das
> iterações (eu, quando faço simulações, procuro guardar cada uma delas,
> nem que seja pra brincar de bootstrap depois, hehehe)
>  
> Quanto à copa américa, estava meio na cara que daria Uruguai, é o time
> com mais conjunto, Argentina e Brasil estavam em início de trabalho.
> No betclick eu apostei no uruguai e salvei algum, ehhehe
> 
> lmassis <at> yahoo <dot> com <dot> br
> assis.leonard <at> gmail <dot> com
> 
> 
> 
> 2011/8/18 Benilton Carvalho <beniltoncarvalho em gmail.com>
>         Leonard,
>         
>         para cada 'g', ele determina uma realizacao (aleatoria) de Y_n
>         condicionado em Y_{n-1}. Se essa realizacao por nao-nula, ele
>         incrementa 'pp'. Como a chance de Y_m ser zero e' bem pequena,
>         ele
>         repete o laco 'm' vezes, contando quantas vezes (em 'm') ele
>         observa
>         Y_n > 0...
>         
>         Estou bem certo de que o codigo esta' correto... mas eu tambem
>         estava
>         certo que o Brasil ganharia a Copa America...
>         
>         b
>         
>         2011/8/18 Leonard Assis <assis.leonard em gmail.com>:
>         
>         > Benilton, eu nem cheguei a rodar, analisei o que ele faz
>         mesmo.
>         >
>         > Tem que resolver esse problema daquele loop que só faz
>         perder tempo senão o
>         > próprio estudo de simulação dele está inválido.
>         > lmassis <at> yahoo <dot> com <dot> br
>         > assis.leonard <at> gmail <dot> com
>         >
>         >
>         > 2011/8/18 Benilton Carvalho <beniltoncarvalho em gmail.com>
>         >>
>         >> Tiago,
>         >>
>         >> esse e' um problema legal... se vc derivar as distribuicoes
>         a mao,
>         >> certamente vc consegue ganhos bem maiores...
>         >>
>         >> FYI: usando propriedades de estatistica, vc chega na
>         mudanca que eu
>         >> fiz na geracao das suas variaveis aleatorias.
>         >>
>         >> Adicionalmente, eu nao tive paciencia de esperar o seu
>         codigo original
>         >> acabar de rodar... eu o cancelei depois de um pouco mais de
>         1h10m.
>         >>
>         >> Abaixo uma sugestao para voce:
>         >>
>         >>
>         >> library(foreach)
>         >> library(doMC)
>         >> registerDoMC()
>         >> programa2 <- function(f,n,m) {
>         >>    ## f: número máximo de filhos
>         >>    ## n: número de gerações
>         >>    ## m: número de iterações
>         >>    S <- foreach(p=seq(0,1,by=0.01), .combine=rbind) %dopar%
>         {
>         >>        pp <- 0
>         >>        for (g in 1:m) {
>         >>            y <- 1
>         >>            for (k in 1:n)
>         >>                y <- rbinom(1, y*f, p)
>         >>            if (y > 0) pp <- pp + 1
>         >>        }
>         >>        c(p, pp/m)
>         >>    }
>         >>    return(S)
>         >> }
>         >> system.time(prog2 <- programa2(2,200,1000))
>         >> plot(prog2, xlab = "p", ylab = "Probabilidade de
>         Percolação")
>         >>
>         >> para matar sua curiosidade, no meu computador, eu obtive:
>         >>
>         >> > system.time(prog2 <- programa2(2,200,1000))
>         >>   user  system elapsed
>         >> 257.072   2.562  20.835
>         >> _______________________________________________
>         >> R-br mailing list
>         >> R-br em listas.c3sl.ufpr.br
>         >> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
>         >> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia)
>         e forneça
>         >> código mínimo reproduzível.
>         >
>         >
>         > _______________________________________________
>         > R-br mailing list
>         > R-br em listas.c3sl.ufpr.br
>         > https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
>         > Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e
>         forneça código
>         > mínimo reproduzível.
>         >
>         
>         
>         
>         
>         --
>         Successful people ask better questions, and as a result, they
>         get
>         better answers. (Tony Robbins)
>         
>         _______________________________________________
>         R-br mailing list
>         R-br em listas.c3sl.ufpr.br
>         https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
>         Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e
>         forneça código mínimo reproduzível.
>         
> 
> _______________________________________________
> R-br mailing list
> R-br em listas.c3sl.ufpr.br
> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.




Mais detalhes sobre a lista de discussão R-br