R で (効率的な) エージェント ベースのモデルを構築しようとしています。各エージェントには、リスト内の data.table にキャプチャされた情報があります。これを行うより効率的な方法はありますか?簡単なコードを次に示します。
require(data.table)
# Setup simulation
numAgents <- 5
numIterations <- 10
# Create collection of agents which have a property someValue that we want to track through the simulation
agents <- vector("list", numAgents)
for(i in 1:numAgents) {
agents[[i]] <- data.table(someValue1 = rep(as.integer(NA), numIterations), someValue2 = rep(as.integer(NA), numIterations))
}
# Iterate through simulation
for(i in 1:numIterations) {
# Generate values for someValue1, someValue2 for the agents
# Note: This is just to give an idea of what will be involved
# Note2: The values depend upon history and other agents
agentValues1 <- lapply(agents, function(x) {
sum(x[, median(someValue1, na.rm = TRUE)], round(runif(1)), na.rm = TRUE)
})
agentValues2 <- ifelse(runif(numAgents) < as.integer(agentValues1)/max(as.integer(agentValues1)), 1, 0)
# Update the agents history (I'm trying to optimize this)
for(k in 1:numAgents) {
set(agents[[k]], i, j = "someValue1", as.integer(agentValues1[k]))
set(agents[[k]], i, j = "someValue2", as.integer(agentValues2[k]))
}
}
data.tables のリストを使用しないという推奨事項も歓迎されますが、質問の範囲が少し拡大する可能性があります。
注として、値生成プロセスには、(1) エージェントの複数のプロパティ (たとえば、someValue1 と someValue2) (2) これらのプロパティの履歴、および (3) 他のエージェントの動作が含まれます。サンプルコードには(まだ)反映されていません。反映する簡単な方法を考えていないためです...できたら更新します。
[編集] 複数のエージェント プロパティと、履歴と他のエージェントに依存するサンプル値の生成を含むようにコードが改訂されました。サンプル コードの値生成プロセスは本質的に意味のあるものではありませんが、実際のコードでの依存関係の種類を示すことを目的としています。