gpt4 book ai didi

Python 在随机点崩溃。有什么建议么?会不会是内存问题?

转载 作者:行者123 更新时间:2023-12-05 06:47:21 24 4
gpt4 key购买 nike

我正在编写一个 Python 遗传算法优化库,我发现我的内核因我正在处理的一个问题而随机死机。崩溃让我很困惑,欢迎任何建议。

背景:

我正在使用 Python 3.8.8。在许多其他代码中,我的库具有以下对象:

  • 个体,这些包含诸如“基因”的 numpy 数组和其他元数据(姓名、适应性等)之类的属性
  • Generations,包含个人列表、有关这些个人的数据(例如他们的排名)以及从个人中提取数据的方法。
  • 分析,运行实际优化,并存储每一代和关于各代的元数据。

一些使用有问题的示例代码片段:世代

class Generation:   
def __init__(self, population, genNumber):
# a list of all the individuals in a generaiton
self.population = population
self.size = len(population)

self.gen = genNumber
self.scores = [None]*self.size
self.ranks = [None]*self.size
self.best = None

def getCurrentGenome(self):
Genome = [None]*self.size
for ii, individual in enumerate(self.population):
Genome[ii] = individual.genotype

return Genome
...

分析对象片段

        for ii  in range(self.Ngen):
print('Generation ', ii + 1)
...

if self.recordGens == True:
gens[ii] = currentGen
...

问题:

对于较大的问题,遗传算法求解器有时会随机崩溃。随机的,我的意思是崩溃发生在分析的不同点(有时是第 100 代,有时是第 143 代,等等),如果幸运的话它不会崩溃。请注意,我将 numpy 用于随机数,并修复了我的随机种子。在每一代中吐出的实际数字在运行之间似乎是相同的。当它崩溃时,它看起来像 this .用完anaconda,也有类似的缺少报错: Command

Failure

我尝试过的:

由于崩溃的随机性,调试很困难。但是,我已经确定:

  • 仅当我存储生成对象时才会发生崩溃。
  • 如果我存储一个像列表这样的随机对象而不是生成对象,例如['a','b'],没有发生崩溃。
  • 崩溃似乎与每一代中存储的数据量无关,20 代不会比 100 代更早崩溃。
  • 如果我在某些行写打印语句,崩溃似乎是随机发生的,而不是每次都在同一行。
  • 我处理的数据量不是很大 - 1000 代大约有 100 个个体,每个个体只存储几个 float 。

问题

我一直想知道一个内存问题,但我对python中的内存管理了解不多。密切关注任务管理器中的 ram 使用情况,似乎我还有空闲内存(50% 的 ram 使用率)。我想知道:

  • 有没有人对可能导致崩溃的原因有任何一般性建议?处理此类错误时有什么调试策略吗?
  • 如果是内存问题,有没有我可以在 Python 中使用的策略来缓解这个问题?

最佳答案

对于遇到类似问题的任何人,这对我来说是一个内存问题。内存中记录了大量数据,最终导致脚本崩溃。我采用的解决方案只是在内存中存储更少的数据。

关于Python 在随机点崩溃。有什么建议么?会不会是内存问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67137237/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com