0

Я разрабатываю генетический алгоритм в python, были хромосомами, состоящими из строк и целых чисел. Чтобы применить генетические операции, я хочу преобразовать эти группы целых чисел и строк в битовые строки.Как работать со строками и целыми числами как битовые строки в python?

Например, если одна хромосома:

["Hello", 4, "anotherString"] 

Я хотел бы, чтобы он стал что-то вроде:

0100100100101001010011110011 

(это не фактический перевод). Итак ... Как я могу это сделать? Хромосомы будут содержать одинаковое количество строк и целых чисел, но эти числа могут варьироваться от одного алгоритма к другому.

Чтобы быть ясным, я хочу получить битовое представление каждого элемента в конкатенированной хромосоме.

Если вы считаете, что это не лучший способ применения генетических операторов (таких как мутация и простой кроссовер), просто скажите мне! Я открыт для новых идей.

Большое спасибо! Manuel

ответ

3

Вы можете преобразовать строки и целые числа в байты (и обратно) с модулем struct, и это точно 8 бит в байт. Если по какой-то причине вы хотите, чтобы эти бинарные байты были текстовыми строками, состоящими из 0 и 1 символов, вы можете распечатать их в двоичной форме, конечно.

Редактировать: забыл напомнить вам, как форматировать байт в виде текстовой строки, состоящей из 0 и 1 персонажей - в Python 2.6 или лучше:

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

и получить обратно от такого строка байт, конечно:

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

Спасибо! Это то, что я искал! Я имею в виду, первый абзац. Думаю, я, должно быть, очень плохо себя объяснил. Не стесняйтесь редактировать вопрос в соответствии с этим ответом. : D (извините, мой английский не очень хорош) –

0

Как только вы точно определяете, как следует перейти от строк к бистровым строкам, «как» должно быть довольно легко. Если генетические алгоритмы должны работать на уровне бит, то, очевидно, строка уровня бит имеет смысл, но, вероятно, она медленнее, чем использование чисел или символьных строк.

3

Преобразование все в одну сцепленную строку, и чем применение генетических операций, кажется, не лучшая идея. Генетические операции могут нарушать здесь многие вещи (особенно если у вас есть определенные ограничения для отдельных лиц), кроме того, эффективность такого решения, вероятно, низкая. Я бы предложил другой подход.

Попробуйте реализовать индивидуальное использование концепции SuperGene (wiki). Пример применения его к GA описан here. Кроме того, согласно this, они говорят, что это улучшает общие характеристики GA.
По моему мнению, это сделает дизайн более четким. Я бы попробовал этот подход.

+0

+1 за предложение чего-то другого, кроме разложения на биты и перевертывания. Этот метод имеет тенденцию разрушать большую часть исходной информации и серьезно замедляет темпы эволюции. – Kylotan