1

非常に単純な計算をしようとしましたが、原因がはっきりしないメモリ不足のメッセージが表示されました。これが私が望むものです: スモールワールド モデル (watts.strogatz.game) といくつかの p 値について、nsamp多くのグラフを作成し、最初のノードと反対側のノード間の距離を計算しますn/2。の場合nsamp = 1、すべて正常に動作します。以上の値に設定すると、最初のラウンド ( ) で、つまり最小の p 値 (0.01)100で「メモリ不足」エラーが発生します。i=1, j=5設定nsamp=10してもエラーにはなりません (え?? それには ? が含まれているはずではありませんi=1, j=5か?)。すべての大きなオブジェクト (graph、len) を明示的に削除しようとしましたが、役に立ちませんでした。ここに何かアイデアはありますか?コードは次のとおりです。

require(igraph)
probs <- c(1:25)*0.01
n = 1000 
target <- n/2    
nsamp = 100


for(i in c(1:length(probs))){
   for(j in c(1:nsamp)){
      graph <- watts.strogatz.game(dim=1, size=n, p=probs[i], nei=4)
      shortest.paths(graph, v=V(graph)[1], to=V(graph)[target])

      len <- get.all.shortest.paths(graph, from=V(graph)[1])
      rm(graph)

      #The number of shortest paths between 1 and target can be found in 
      numbPathsBetw1AndTarget <- len$nrgeo[target]

      #In len$res there are all shortest paths between node 1 and all other
      #nodes. It comes as a list which at each point contains a vector of  
      #so we need to use lapply to find out which of 
      #the lists are of interest to us.
      lengths <- unlist(lapply(len$res, function(x) length(x)))

      rm(len)          

   }
}

メモリを増やすことができることは承知していますが、nsamp が小さい場合はすべて問題ないことがわかります。

編集:再現性が非常に低いため、メモリリークではなく、グラフの構成が悪いと思われます。i=1 の場合は常に発生しますが、j が異なる場合です。したがって、適用するグラフの直径get.all.shortest.pathsまたは最短パスの数に固有の上限はありますか?

編集 2: R を再起動した後、再現不可能なエラーは消えました。おそらく、以前の計算によって RAM が既に詰まっていたのでしょう。

4

0 に答える 0