파이썬에서 비트 문자열로 문자열과 정수로 작업하는 방법은 무엇입니까?
문제
파이썬에서 유전자 알고리즘을 개발하고있는 염색체는 문자열과 정수로 구성되어 있습니다. 유전자 작용을 적용하기 위해, 나는 이러한 정수 그룹과 문자열 그룹을 비트 스트링으로 변환하고 싶습니다.
예를 들어, 하나의 염색체 인 경우 :
["Hello", 4, "anotherString"]
나는 그것이 다음과 같은 것이되기를 바란다.
0100100100101001010011110011
(이것은 실제 번역이 아닙니다). 그래서 ... 어떻게 할 수 있습니까? 염색체는 같은 양의 문자열과 정수를 함유하지만,이 숫자는 한 알고리즘에서 다른 알고리즘으로 달라질 수 있습니다.
명확하게 말하면, 내가 얻고 싶은 것은 염색체에서 각 요소의 비트 표현입니다.
이것이 유전자 연산자 (예 : 돌연변이 및 간단한 크로스 오버)를 적용하는 가장 좋은 방법이 아니라고 생각한다면 말해줘! 나는 새로운 아이디어에 열려 있습니다.
정말 감사합니다! 마누엘
해결책
문자열과 정수를 구조 모듈은 바이트에서 정확히 8 비트입니다. 어떤 이유로이 바이너리 바이트 스트링을 원한다면 텍스트 문자열로 구성된 경우 0
그리고 1
문자, 물론 이진 형태로 인쇄 할 수 있습니다.
편집하다: 바이트를 구성하는 방법을 상기시키는 것을 잊었습니다. 0
그리고 1
캐릭터 - Python 2.6 이상에서 :
>>> format(23, '08b')
'00010111'
물론 그러한 줄에서 바이트로 돌아갑니다.
>>> int('00010111', 2)
23
다른 팁
모든 것을 하나의 연결된 문자열로 변환하고 유전자 작업을 적용하는 것보다 가장 좋은 아이디어는 아닙니다. 유전자 수술은 여기에서 많은 것들을 깨뜨릴 수 있습니다 (특히 개인에 대한 제약이있는 경우), 그러한 솔루션의 효과는 아마도 낮을 것입니다. 나는 다른 접근법을 제안 할 것이다.
Supergene 개념을 사용하여 개인을 구현해보십시오 (위키). GA에 적용하는 예가 설명되어 있습니다 여기. 추가로 이것 그들은 전반적인 GA 성능을 향상 시킨다고 말합니다.
제 생각에는 디자인이 더 명확해질 것입니다. 나는이 접근법을 시도 할 것이다.
문자열에서 bitstrings로의 번역이 어떻게 진행되어야하는지 정확히 설명하면 "방법"은 상당히 쉬워야합니다. 유전자 알고리즘이 비트 레벨에서 작동해야한다면 분명히 비트 레벨 스트링은 의미가 있지만 숫자 나 문자열을 사용하는 것보다 느리게 느리게 될 수 있습니다.