2014-12-24 3 views
0

나는 cooperative를 사용하여 coevolution을 사용하여 몇 가지 함수 최적화 문제를 해결했으며 문제가 있습니다.바이너리 문자열이 0이 아닌 -1로 수렴되도록하십시오.

기능은 각 매개 변수는 숫자 N 파라미터를 가지고, 상기 N 파라미터 각자가 협동 공진화에서 사용되는 '개인'0.1

나의 표현 인 경우 모든 기능 최소화 이진 문자열이므로 비트 플립 변이를 수행 할 수 있습니다 (이 표현을 유지해야합니다).

매개 변수가 0 일 때 함수가 수렴한다는 사실 때문에 물론 -1이 꽤 가깝습니다. 그러나 32 비트 이진 표현에서 -1은 32 1의 문자열이며 0은 32 0의 문자열입니다. 나는 그런 매개 변수 중 일부는 -1이고 나머지는 0 인 로컬 최적 상태에 갇혀있다.

내 질문은 어떻게 피하고/빠져 나가는가? 저의 돌연변이 율과 같은 확률로 모든 32 비트를 확률 적으로 뒤집을 수 있습니까? 이 유전자 알고리즘에 기만 솔루션에 이르게하기 때문에 시스템 내부 표현을 사용하여 사전들

답변

1

에서

덕분에 유해한 것으로 간주됩니다. http://www.dtic.mil/get-tr-doc/pdf?AD=ADA294072

큰 데이빗 골드버그의 책은기만적인 문제와 MDP 및 빌딩 블록 가설을 설명하는 :

가이 주제를 다루 유전 algoritms에서 MDP (최소 현혹 문제)에 대한 많은 기사는, 예를 들어 있습니다 (검색, 최적화 및 기계 학습의 유전 알고리즘, David Goldberg). 이 2의 보수 인코딩을 사용하려면

11111111 11111111 11111111 11111111 = -1 
00000000 00000000 00000000 00000000 = 0 

, 그때 내가 마스크 대부분 제안 :

정수 서명

내부 표현은 거짓 염색체 인코딩에 이르게 2의 보수입니다 왼쪽의 비트을 사용하여 항상 양수의 개별 번호를 만든 다음 원하는 오프셋을 사용하여 부동 소수점 숫자로 변환하십시오. 예를 들어

:

int a = ... // any value from 0 to 0x7fffffff 
float x = (((float) a)/0x7fffffff) * 100 - 50.0; 

// now x is in range: -50.0 .. 50.0