Как работать со строками и целыми числами, как битовые строки в Python? - PullRequest
0 голосов
/ 15 февраля 2010

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

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

["Hello", 4, "anotherString"]

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

0100100100101001010011110011

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

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

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

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

Ответы [ 3 ]

3 голосов
/ 15 февраля 2010

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

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

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

и, чтобы вернуться от такой строки к байту, конечно:

>>> int('00010111', 2)
23
3 голосов
/ 15 февраля 2010

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

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

0 голосов
/ 15 февраля 2010

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

...