【发布时间】:2018-04-01 14:21:22
【问题描述】:
我正在使用遗传算法来解决优化问题。 我使用记忆来加速计算,因为适应度评估非常耗时。它的实现方式如下:
def memoize(f):
memo = {}
def helper(my_input):
if my_input not in memo:
if len(memo)%100000==0:
print('increased memo size:', len(memo))
memo[my_input] = f(my_input)
return memo[my_input]
return helper
@memoize
def eval_fitness(individual):
#time consuming calc
return fitness
我注意到 memo dict 的大小在第一代迅速增加,然后缓慢增加(例如在第 500 代达到 14M 键)。
另一方面,每一代的经过时间在第一代中很高(即 40 秒),然后随着记忆的回报而减少。 尽管如此,如上图所示,我注意到经过时间数据序列的非单调行为:计算速度变慢,整体计算时间急剧增加。
我使用单一进程。内存使用率安全地低于 20%。
- 关于这种行为的根本原因有什么想法吗?
- 如何避免这种减速?
【问题讨论】:
标签: python python-3.x dictionary data-structures memoization