2016-06-26 2 views
0

나는 (내가 완전히 새로운 오전) GA를 설명하는 좋은 웹 사이트를 찾을 수 없습니다,하지만 난 책을 읽고 있었다 그것은 말했다 :유전자 알고리즘 이진 표현

우리의 가능한 값을 제한하는 경우 절편을 [-5, 1.5]로 바꾸고이 범위를 이진 범위 [0, 2^8-1]로 선형 변환하면 값 0.74는 10011110으로 변환되고 [.74, -.11 ] 어떻게 1,001,111에 의해 0.74 표시됩니다)

누군가가 나를
1) 어떻게 범위 작품의 선형 변환에 대해 설명 할 수 10011110110010.으로 표시하고,
이 될 수있다 이진 0

내 거친 지식은 좋은 소개로 이것을 설명 할 수있는 사이트를 알고 있다면 (318)

을 인

2^8 0 0 2^5 2^4 2^3 2^2 2^1 

로, 그에게 도움이 될 것을 번역 한 것입니다. 감사!

답변

1

선형 변환은 매우 간단합니다. 아마도 정수로 작업하는 것이 더 쉽습니다.

범위가 [0, 10]이고 범위 [0, 20]로 변환하려고한다고 가정 해 보겠습니다. 각 값은 단순히 2로 곱해 지므로 0 => 0, 1 => 2, 2 => 4, 3 => 6 등이됩니다.

이제 [1, 10] 를 [2, 11]로 변환한다. 이를 수행하려면 1을 빼고 (첫 번째 범위의 맨 아래에) 2를 더하십시오 (두 번째 범위의 최소값에 대해). 그래서 각 숫자에 1을 더하면 1 => 2,> = 3,> = 4 등이됩니다.

그런 다음 결합하기를 원합니다. 10,110을 30,230으로 번역하고 싶다고합시다. 먼저 첫 번째 숫자의 최소값 인 10을 빼서 최소값을 0으로 설정 한 다음 배율 인수를 곱합니다. 이 경우 110-10 = 100 및 230-30 = 200이므로 배율 인수는 200/100 = 2입니다. 그런 다음 두 번째 범위의 최소값 인 30을 더합니다. 따라서 i1을 i2로 변환하려면 i2 = (i1 - 10) * 2 + 30으로 단순화 할 수 있습니다.

[-5, 1.5] 범위를 [0, 255]로 변환하려면 -5를 빼고 (즉 5 추가), 256을 곱하고 6.5로 나누고 (1.5 - -5 = 6.5에서), 그런 다음 정수 값을 처리하기 때문에 결과를 가장 가까운 정수로 반올림해야합니다.

또한 이진 계산에 약간의 오류가 있습니다. 가장 낮은 숫자는 2^0이 아니라 2^0입니다. 따라서 정답을 얻으려면 318을 2로 나눌 필요가 있습니다.

1

저는 C++에서 함수 최적화를위한 간단한 Genetic Algorithms을 작성했습니다. 실제 부호화 용과 같은 실제 간격 진 스트링으로부터 변환하는 방법을 바이너리 표현에 대한 하나

https://github.com/mihaioltean/genetic-algorithms

2 개 구현있다 : 여기서 소스 코드이다.

코드에 많은 의견이 있습니다. 더 자세히 알려면 명확하지 않은 점을 알려 주시고 자세한 내용을 추가하겠습니다.

안부, 미하이