我正在写一个遗传算法,并希望将其调整一点。
我有500个模板基因 - 随机生成的数字/字符串列表,您认为计算相似性更好。我有一个300-800个基因的DNA - 一些数字/字符串。
我想要的是迭代DNA并将每个基因从其中映射到一个(或很多)模板基因,并将其影响加起来。
这是我对它的看法(基因 - DNA):
n = 500
step = 2**32/(n + 1)
random.seed(10)
template_genes = sorted(np.random.random_integers(0, 2**32, n))
n_g = n
genes = np.random.random_integers(0, 2**32, n_g)
d = {i:0 for i in range(n)}
import time
buckets = [[] for i in range(n+1)]
a = time.clock()
for i in range(n_g):
buckets[int(genes[i]//step)].append(genes[i])
for i in range(n):
w = int(template_genes[i]//step)
for g in buckets[w]:
d[i] += max(0, 1 - abs(template_genes[i] - g)/step)*0.5
#if w - 1 > 0:
# for g in buckets[w-1]:
# d[i] += max(0, 1 - abs(template_genes[i] - g)/step)*0.5
#if w + 1 < n+1:
# for g in buckets[w+1]:
# d[i] += max(0, 1 - abs(template_genes[i] - g)/step)*0.5
# lines above are commented because it was too slow.
print(time.clock() - a)
它的作用:
将2 ** 32除以模板基因的数量分成桶,迭代基因(DNA)并将它们放入桶中,然后在template_genes上迭代,并根据它们与template_gene的距离来总结基因的影响。
这是一个非常草率的基因影响聚集。最初,我在template_genes迭代中有一个嵌套循环,它迭代所有DNA基因并总结内部影响 - +步骤。但它对1000/1000基因的工作非常缓慢。这个工作速度更快,但对我的目的来说仍然太慢。 上面的代码需要14毫秒,如果我取消注释那些额外的迭代 - 3倍。
任何想法如何让它更快或更完全不同的方法?