0

確率過程シミュレーターを作成しましたが、かなり遅いので高速化したいと思います。

シミュレーターの主要部分はforループで構成されていますが、これforeachを `%dopar%.

単純化されたループでそうしようとしましたが、いくつかの問題が発生しています。私のforループがこのように見えるとします

library(foreach)

r=0
t<-rep(0,500)
for(n in 1:500){
    s<-1/2+r
    u<-runif(1, min = 0, max = 1)
    if(u<s){
        t[n]<-u
        r<-r+0.001
    }else{r<-r-0.001}
}

これは、反復ごとにrandの値を更新しs、2 つの結果のいずれかで vectorを設定することを意味しtます。ループとして書き直すいくつかの異なる方法を試しましたforeachが、繰り返しのたびに値が更新されず、かなり奇妙な結果が得られるようです。使ってみreturnたけど効果なし!

これは私が思いついた例です。

rr=0
tt<-foreach(i=1:500, .combine=c) %dopar% {
    ss<-1/2+rr
    uu<-runif(1, min = 0, max = 1)
    if(uu<=ss){
        return(uu)
        rr<-rr+0.001
    }else{
        return(0)
        rr<-rr-0.001}
}

使用foreachできない場合、すべてのコアを使用して高速化できるようにループを書き直すには、他にどのような方法がありますか?

4

2 に答える 2