我最近写了一个遗传算法。algo创建了一个包含50个测试用例的列表,并通过模拟运行该测试,并存储结果。我使用了许多自定义类,存储的结果包含类实例列表。你知道吗
当我运行这个模拟时,除了永远使用外,它使我的内存使用率高达90%。我的代码中肯定有什么地方正在占用内存,但我不知道如何找到它。这是我代码的主要部分,循环中的循环中的循环。。。。。你知道吗
# ----------------------------------------------------------------------------------------------------
for i in range(1,numberOfRunsToSolve,1): # begin genetic algo loop
temp = trial_cases
for ii, stored_trial in enumerate(temp): # run through stored trial cases
new_trials = []
for jj in range(1,numberOfTrialsPerRound):
tc = []
tc = randomTrials_GenAlgo_ARRAY(stored_trial, True) # create new trial set, based on indexed stored results
new_trials.append(tc)
print(new_trials)
for j, trial in enumerate(new_trials):
x = OneGenerationSimulation(trial) #returns [ObjArray, ErrorArray]
rev = revenueAndLoss(x[0])
DEBUG_ARRAY.append(str(revenue)+' trial: ' + str(trial))
results.append((revenue, trial, x[0],x[1]))
results.sort(reverse=True) # sort to bring best revenue to top
results = results[0:numberOfResultsToKeepPerRound-1]
trial_cases = []
for i, r in enumerate(results):
trial_cases.append(r[1])
# end of the genetic algo loop
# ----------------------------------------------------------------------------------------------------
有没有关于如何在我的脚本中跟踪内存使用情况,并找出罪魁祸首的建议?我对Python还很陌生,所以请随便说清楚。你知道吗
编辑:上述过程基本上是这样做的:
1) 创建50次试运行。
2) 对每个试验进行模拟。此模拟创建数百个自定义对象,并在其上运行脚本,返回结果。
3) 所有的结果都回来了,检索最好的5个结果。
4) 根据这5个结果,创建新的试验集,并重复这个过程。你知道吗
我担心大量的对象实例创建,然后过滤到最好的5个结果,没有被正确地清理内存或其他东西。。。所有这些物体都隐藏在背景中。。。。你知道吗
谢谢-KC。你知道吗
这里有一个快速和肮脏的插入排序,你可以使用。与函数不同,您可以内联此代码以避免函数调用开销。你知道吗
相关问题 更多 >
编程相关推荐