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

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top