遺伝的最適化ツールgenoud
をlibrary(rgenoud)
のR
に最適化しようとしています。 R
で並列処理を設定した経験はありません。複数のクラスタ並列処理で一部のノードで使用できないオブジェクト
genoud
には、makeClusters
の名前が知られているcluster
オプションが組み込まれています。私は、単一のマルチコアマシン上で並列処理をセットアップしたいと考えています。私はローカルマシンの名前がlocalhost
であることを理解しています。名前を繰り返すと、マシン上に複数のコアが使用されます。
このアプローチは、次のような単純な関数のために正常に動作しているようだ:
genout <- genoud(sin, 1, cluster=c('localhost','localhost','localhost'))
私は、より複雑な機能構造を最適化する場合しかしながら、機械や環境のいくつかが、すべての機能を見つけることができません。これは
Error in checkForRemoteErrors(val) :
3 nodes produced errors; first error: could not find function "fun1"
一つの解決策はfun2
にfun1
を埋め込むことであると考えられるエラーになります
fun1 <- function(x) {sin(x)}
fun2 <- function(x) {
x <- fun1(x)
ret <- x + cos(x)
return(ret)
}
genout <- genoud(fun2, 1, cluster=c('localhost','localhost','localhost'))
:ここでは一例です。しかし、fun2
が(多くの場合、愚かな例以外の)多くの回数実行された場合、これは非効率的です。この問題を解決する唯一の方法はfun1
をfun2
に埋め込むことです。
編集:埋め込む場合でも、オブジェクトがgenoud
経由fun2
に渡す必要がより多くの問題があり、以下を参照してください
y=1
fun2 <- function(x,z) {
fun1 <- function(x) {sin(x)}
x <- fun1(x)
ret <- x + cos(x)*z
return(ret)
}
genout <- genoud(fun2, 1, cluster=c('localhost','localhost','localhost'), z=y)
>Error in checkForRemoteErrors(val) :
3 nodes produced errors; first error: object 'y' not found
ありがとうございます。この回答は網羅的です。 – tomka