【发布时间】:2016-06-16 05:50:37
【问题描述】:
我在 Python 中创建了一个遗传编程系统,但遇到了与内存限制相关的问题。问题在于将我的人口中的所有个体都存储在内存中。目前,我将所有个体存储在内存中,然后复制下一代人口,然后将其存储到内存中。这意味着我在内存中加载了两个群体的个体。经过一些测试,我发现我很快就超过了 Windows 的默认 2GB 应用程序内存大小。
目前,我将整个种群的单个树写到一个文件中,然后我可以根据需要加载并重新创建种群。我一直在考虑的不是将所有个体都加载到内存中,而是通过从文件中提取个体并仅实例化该个体来访问个体信息。根据我对 Python 的 readline 功能的理解,它一次应该只从文件中加载一行,而不是整个文件。如果我这样做,我想我只能将我当前正在操纵的个人存储在内存中。
我的问题是,这样做有没有我现在看不到的问题?我知道因为我处理的是磁盘上的数据而不是内存中的数据,所以我的性能会受到影响,但在这种情况下,内存比速度更重要。我也不想增加分配给 Python 程序的 2GB 内存。
谢谢!
【问题讨论】:
-
您有没有考虑使用数据库的原因?
-
从文件中提取单个记录意味着通读文件直到找到正确的记录。我强烈建议迁移到具有现代 64 位环境和合理 RAM 量的计算机。如果您仍然想优化您的程序,请提供MCVE。如果它目前有效,请考虑改为询问 Code Review。
-
@IgnacioVazquez-Abrams 我考虑过,但在每一代之后,至少有 95% 的个体被替换。使用数据库似乎不是正确的方向,因为数据记录只保留很短的时间。
-
@TigerhawkT3 你说得对,我必须遍历文件,直到找到正确的行。我将在其上运行它的计算机是 64 位的,但是,可用 RAM 的数量受到限制,并且由于我的人口的未知树大小,我可能会超过可用的物理 RAM,即使应用程序被给予更多不仅仅是2GB。我不认为任何代码示例都是必要的,因为我更概念性地询问将人口数据写入文件是否是减少内存使用的解决方案。
-
MCVE 可能允许我们提出一种在不牺牲性能的情况下优化 RAM 使用的方法。
标签: python memory memory-management genetic-programming