【发布时间】:2019-05-31 22:33:23
【问题描述】:
我正在使用 R 构建一个基于代理的模型,但我在尝试使用大对象时遇到了内存问题。特别是,在初始化时创建了 8 个 3D 数组,并且在每个时间步长每个 3D 数组都由不同的函数填充。
目前,ABM 运行时间超过 1825 天,并模拟了 2500 个人在整个景观中移动。景观中有1000个细胞。使用此配置,我没有内存问题。
在初始化时,
-
1 3D 数组是这样的:
h <- array(NA, dim=c(1825, 48, 2500), dimnames=list(NULL, NULL, as.character(seq(1, 2500, 1)))) ## 3th dimension = individual ID -
1 3D 数组是这样的:
p <- array(NA, dim=c(1825, 38, 1000), dimnames=list(NULL, NULL, as.character(seq(1, 1000, 1)))) ## 3th dimension = cell ID -
6 个 3D 数组如下:
t <- array(NA, dim=c(1825, 41, 2500), dimnames=list(NULL, NULL, as.character(seq(1, 2500, 1)))) ## 3th dimension = individual ID
数组包含字符/字符串数据类型。
理想情况下,我想增加个体数量和/或补丁数量,但由于内存问题,这是不可能的。似乎有一些可用的工具,如bigmemory、gc 来管理内存。这些工具有效吗?我是编程初学者,没有管理内存和高性能计算的经验。非常感谢您的任何建议,感谢您的宝贵时间。
会话信息() R 版本 3.5.3 (2019-03-11) 平台:x86_64-w64-mingw32/x64(64位) 运行于:Windows 7 x64 (build 7601) Service Pack 1
【问题讨论】:
-
数组的第二维是多少?个体/细胞的属性?您是否需要将所有时间点保存在内存中,或者您可以将每个步骤后的状态保存到文件中并仅将当前状态保存在内存中? (这会将内存需求减少 2/1825)
-
如果不了解这些函数中究竟发生了什么,这很难说。也许可以减少尺寸,因为仅初始化数组就需要大约 4GB 的内存才能用 NA 填充它们。我不确定
bigmemory包是否可以处理多维数组,但我也会考虑ff包。 -
@Jan van der Laan 非常感谢您的回答。是的,第二个维度对应于个人的属性。我不能只将当前状态保留在内存中,因为我需要 t - 1 和 1 - tf - 1 处的数组值,其中 tf 是持续时间参数。
标签: r memory agent-based-modeling