Como trabalhar com cordas e números inteiros como cordas em Python?
Pergunta
Estou desenvolvendo um algoritmo genético em Python foram os cromossomos compostos de cordas e números inteiros. Para aplicar as operações genéticas, quero converter esses grupos de números inteiros e cordas em cordas de bits.
Por exemplo, se um cromossomo é:
["Hello", 4, "anotherString"]
Eu gostaria que se tornasse algo como:
0100100100101001010011110011
(Esta não é uma tradução real). Então ... como posso fazer isso? Os cromossomos conterão a mesma quantidade de cordas e números inteiros, mas esses números podem variar de um algoritmo executado para outro.
Para deixar claro, o que eu quero obter é a representação de cada elemento no cromossomo concatenado.
Se você acha que essa não seria a melhor maneira de aplicar operadores genéticos (como mutação e crossover simples), apenas me diga! Estou aberto a novas idéias.
Muito obrigado! Manuel
Solução
Você pode transformar cordas e números inteiros em bytestrins (e de volta) com o estrutura módulo, e isso é exatamente 8 bits para um byte. Se, por algum motivo 0
e 1
Personagens, você pode imprimi -los em forma binária, é claro.
Editar: Esqueci de lembrá -lo de como formatar um byte em uma sequência de texto composta de 0
e 1
Personagens - no Python 2.6 ou melhor:
>>> format(23, '08b')
'00010111'
E voltar de tal string para um byte, é claro:
>>> int('00010111', 2)
23
Outras dicas
Converter tudo em uma corda concatenada e, em vez disso, aplicar operações genéticas não parece ser a melhor idéia. As operações genéticas podem quebrar aqui muitas coisas (especialmente se você tiver algumas restrições para os indivíduos), além disso, a eficácia dessa solução é provavelmente baixa. Eu sugeriria uma abordagem diferente.
Tente implementar o indivíduo usando o Supergene Concept (Wiki). Exemplo de aplicá -lo ao GA é descrito aqui. Além disso, conforme isto Eles dizem que isso melhora o desempenho geral do GA.
Na minha opinião, isso tornará o design mais claro. Eu tentaria essa abordagem.
Depois de descrever exatamente como a tradução de strings para bits de bits deve ir, o "como" deve ser bastante fácil. Se os algoritmos genéticos devem funcionar em um nível de bit, obviamente, uma sequência de um pouco de nível faz sentido, mas provavelmente é muito mais lento do que usar números ou cadeias de caracteres.