我在Python中实现GA并且需要存储一个1和0的序列,所以我将我的数据表示为二进制文件。那个最好的数据结构是什么?一个简单的字符串?
答案 0 :(得分:5)
如果您的染色体是固定长度的位串,请考虑在它们上使用Numpy数组和向量化操作而不是列表。这些可能比Python列表快得多。例如,可以用
完成一点交叉def crossover(a, b):
"""Return new individual by combining parents a and b
with random crossover point"""
c = np.empty(a.shape, dtype=bool)
k = np.random.randint(a.shape[0])
c[:k] = a[:k]
c[k:] = b[k:]
return c
如果您不想使用Numpy,那么字符串似乎非常合适;它们比列表更紧凑,列表存储指向元素而不是实际元素的指针。
最后,一定要看看Pyevolve如何代表染色体;它似乎是使用Numpy这样做的。
答案 1 :(得分:0)
我认为坚持使用琴弦是一个好主意。你可以轻松地将琴弦切成碎片。如果您需要将它们作为列表进行操作,可以使用“list(str)”进行转换。一旦你有了一个列表,你可以改变它并使用“''.join(lst)”将它变回一个字符串。
就个人而言,我不会使用long或其他整数类型来存储为位。它可能更节省空间,但是当您想要进行重组时处理数据的麻烦将是相当大的。如果突变由除了翻转之外的某些东西组成,突变也会有问题。此外,代码将更难阅读。
只需2美分。希望能帮到你。
答案 2 :(得分:0)