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

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

["Hello", 4, "anotherString"]

我希望它变成这样:

0100100100101001010011110011

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

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

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

多谢!曼努埃尔

有帮助吗?

解决方案

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

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

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

当然,要从这样的字符串返回到字节:

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

其他提示

转换万事成一个连接字符串,并且不是运用遗传操作似乎并没有是最好的主意。遗传操作可以打破这里很多东西(特别是如果你对个人一定限制),这样的解决方案的有效性还可能很低。我会建议不同的方法。

尝试使用超基因概念(维基)执行个体。将其施加到GA的例子进行说明此处。此外按照他们说,这提高了整体性能GA
在我看来,这将使得设计更加清晰。我想尝试这种方法。

一旦你描述从字符串位串翻译究竟怎样走,“如何”应该是相当容易。如果遗传算法应在位级工作,那么显然是有点水平串是有道理的,但它可能比使用数字或字符串的方式要慢。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top