0

我正在用python开发一个遗传算法,染色体是由字符串和整数组成的。为了应用遗传操作,我想将这些整数和字符串组转换为位字符串。

例如,如果一个染色体是:

["Hello", 4, "anotherString"]

我希望它变成这样:

0100100100101001010011110011

(这不是实际的翻译)。所以......我该怎么做?染色体将包含相同数量的字符串和整数,但这个数字可能因运行的一种算法而异。

需要明确的是,我想要获得的是连接的染色体中每个元素的位表示。

如果您认为这不是应用遗传算子(例如变异和简单交叉)的最佳方式,请告诉我!我对新想法持开放态度。

非常感谢!曼努埃尔

4

3 回答 3

3

您可以使用struct模块将字符串和整数转换为字节串(并返回),这恰好是一个字节的 8 位。如果出于某种原因您希望将这些二进制字节串作为由01字符组成的文本字符串,您当然可以以二进制形式打印它们。

编辑:忘记提醒您如何将字节格式化为由01字符组成的文本字符串——在 Python 2.6 或更高版本中:

>>> format(23, '08b')
'00010111'

并从这样的字符串返回到一个字节,当然:

>>> int('00010111', 2)
23
于 2010-02-15T05:43:29.300 回答
3

将所有内容转换为一个连接的字符串,而不是应用遗传操作似乎不是最好的主意。遗传操作可能会破坏很多东西(特别是如果你对个人有一些限制),另外这种解决方案的有效性可能很低。我会建议不同的方法。

尝试使用 SuperGene 概念(wiki)实现个人。此处描述了将其应用于 GA 的示例。此外,据此他们说它提高了整体 GA 性能。
在我看来,这将使设计更加清晰。我会尝试这种方法。

于 2010-02-15T07:48:07.370 回答
0

一旦您准确描述了从字符串到位串的转换应该如何进行,“如何”应该相当容易。如果遗传算法应该在位级别上工作,那么显然位级别的字符串是有意义的,但它可能比使用数字或字符串要慢得多。

于 2010-02-15T05:24:57.767 回答