将字符串或数字(基因)快速近似映射到字符串或数字(基因模板)

时间:2016-03-06 14:44:40

标签: python algorithm python-3.x genetic-algorithm

我正在写一个遗传算法,并希望将其调整一点。

我有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倍。

任何想法如何让它更快或更完全不同的方法?

0 个答案:

没有答案