문제

파이썬에서 유전자 알고리즘을 개발하고있는 염색체는 문자열과 정수로 구성되어 있습니다. 유전자 작용을 적용하기 위해, 나는 이러한 정수 그룹과 문자열 그룹을 비트 스트링으로 변환하고 싶습니다.

예를 들어, 하나의 염색체 인 경우 :

["Hello", 4, "anotherString"]

나는 그것이 다음과 같은 것이되기를 바란다.

0100100100101001010011110011

(이것은 실제 번역이 아닙니다). 그래서 ... 어떻게 할 수 있습니까? 염색체는 같은 양의 문자열과 정수를 함유하지만,이 숫자는 한 알고리즘에서 다른 알고리즘으로 달라질 수 있습니다.

명확하게 말하면, 내가 얻고 싶은 것은 염색체에서 각 요소의 비트 표현입니다.

이것이 유전자 연산자 (예 : 돌연변이 및 간단한 크로스 오버)를 적용하는 가장 좋은 방법이 아니라고 생각한다면 말해줘! 나는 새로운 아이디어에 열려 있습니다.

정말 감사합니다! 마누엘

도움이 되었습니까?

해결책

문자열과 정수를 구조 모듈은 바이트에서 정확히 8 비트입니다. 어떤 이유로이 바이너리 바이트 스트링을 원한다면 텍스트 문자열로 구성된 경우 0 그리고 1 문자, 물론 이진 형태로 인쇄 할 수 있습니다.

편집하다: 바이트를 구성하는 방법을 상기시키는 것을 잊었습니다. 0 그리고 1 캐릭터 - Python 2.6 이상에서 :

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

물론 그러한 줄에서 바이트로 돌아갑니다.

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

다른 팁

모든 것을 하나의 연결된 문자열로 변환하고 유전자 작업을 적용하는 것보다 가장 좋은 아이디어는 아닙니다. 유전자 수술은 여기에서 많은 것들을 깨뜨릴 수 있습니다 (특히 개인에 대한 제약이있는 경우), 그러한 솔루션의 효과는 아마도 낮을 것입니다. 나는 다른 접근법을 제안 할 것이다.

Supergene 개념을 사용하여 개인을 구현해보십시오 (위키). GA에 적용하는 예가 설명되어 있습니다 여기. 추가로 이것 그들은 전반적인 GA 성능을 향상 시킨다고 말합니다.
제 생각에는 디자인이 더 명확해질 것입니다. 나는이 접근법을 시도 할 것이다.

문자열에서 bitstrings로의 번역이 어떻게 진행되어야하는지 정확히 설명하면 "방법"은 상당히 쉬워야합니다. 유전자 알고리즘이 비트 레벨에서 작동해야한다면 분명히 비트 레벨 스트링은 의미가 있지만 숫자 나 문자열을 사용하는 것보다 느리게 느리게 될 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top