[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