如何在python中使用字符串和整数作为位串?

时间:2010-02-15 05:12:02

标签: python artificial-intelligence bit-manipulation genetic-algorithm data-conversion

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

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

["Hello", 4, "anotherString"]

我希望它变得像:

0100100100101001010011110011

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

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

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

非常感谢! 曼努埃尔

3 个答案:

答案 0 :(得分:3)

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

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

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

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

>>> int('00010111', 2)
23

答案 1 :(得分:3)

将所有内容转换为一个连接字符串,而不是应用遗传操作似乎不是最好的主意。遗传操作可以在很多方面打破(特别是如果你对个体有一些约束),这种解决方案的效果可能也很低。我会建议不同的方法。

尝试使用SuperGene概念(wiki)实现个人。将其应用于GA的示例描述为here。此外,根据this,他们表示可以提高整体GA绩效 在我看来,它将使设计更清晰。我会尝试这种方法。

答案 2 :(得分:0)

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