我在python中开发遗传算法,染色体由字符串和整数组成。为了应用遗传操作,我想将这些整数和字符串组转换成位串。
例如,如果一条染色体是:
["Hello", 4, "anotherString"]
我希望它变得像:
0100100100101001010011110011
(这不是实际翻译)。那么......我怎么能这样做?染色体将包含相同数量的字符串和整数,但这个数字可能会因算法运行而异。
要清楚,我想要获得的是连接染色体中每个元素的位表示。
如果您认为这不是应用遗传算子的最佳方式(例如变异和简单交叉),请告诉我!我对新想法持开放态度。
非常感谢! 曼努埃尔
答案 0 :(得分:3)
您可以使用struct模块将字符串和整数转换为字节串(并返回),这恰好是一个字节的8位。如果出于某种原因,您希望将这些二进制字节串作为由0
和1
字符组成的文本字符串,那么您当然可以以二进制形式打印它们。
编辑:忘了提醒您如何将字节格式化为由0
和1
字符组成的文本字符串 - 在Python 2.6或更高版本中:
>>> format(23, '08b')
'00010111'
并且从这样的字符串返回到一个字节,当然:
>>> int('00010111', 2)
23
答案 1 :(得分:3)
将所有内容转换为一个连接字符串,而不是应用遗传操作似乎不是最好的主意。遗传操作可以在很多方面打破(特别是如果你对个体有一些约束),这种解决方案的效果可能也很低。我会建议不同的方法。
尝试使用SuperGene概念(wiki)实现个人。将其应用于GA的示例描述为here。此外,根据this,他们表示可以提高整体GA绩效 在我看来,它将使设计更清晰。我会尝试这种方法。
答案 2 :(得分:0)
一旦你准确描述了从字符串到位串的转换应该如何,“如何”应该相当容易。如果遗传算法应该在位级上工作,那么显然位级字符串是有意义的,但它可能比使用数字或字符串慢。