문제

유전자 알고리즘을 사용하여 N 변수를 포함하는 N 선형 방정식 시스템을 해결하고 싶습니다.

솔루션이 부동 소수점 값으로 구성 될 수 있으므로 크로스 오버 작업을 정의하는 데 어려움이 있습니다. 어떻게 진행합니까? 가능해 보이지만 이것은 유전자 알고리즘과의 첫 만남입니다.

우리가 해결해야한다고 가정 해 봅시다

 x + 2y = 1
2x + 8y = 3

대답은 x = 1/2 및 y = 1/4입니다.

문제를 어떻게 모델링합니까?

업데이트: 종이에서 아무것도 해독 할 수 있는지 확인하십시오. http://www.masaumnet.com/archives/mjbas/volume1/issue2/mjbas010205.pdf.

도움이 되었습니까?

해결책

한 경로는 자신의 부동 소수점 표현을 선택하는 것입니다. 물론, 산술 작업을 구현할 책임이 있습니다. 아마도 당신은 당신이 바꿀 수있는 bignum 라이브러리를 찾을 수있을 것입니다.

예를 들어 플랫폼 네이티브 플로팅 포인트를 분해 할 수도 있습니다 frexp 크로스 오버 단계 동안, 컬링 중에 재조합.

다른 팁

염색체는 N 플로팅 포인트 번호 (복식) 일 수 있거나 연합을 사용하여 비트 문자로 재 해석 할 수 있습니다.

const int n = 100;

union Chromosome {
  double val[n];
  unsigned char bits[n * sizeof(double)];
};

... 그러면 솔루션/피트니스 값의 해석을 위해 이중 값을 사용하고 번식/교차/돌연변이를위한 비트를 사용할 수 있습니다.

행운을 빕니다!

당신은 단순히하지 않습니다. 선형 시스템을 해결하기 위해 적용 할 수있는 다양한 방법이 있습니다. 그러나 "유전자 알고리즘"은 떠오르는 것이 아닙니다. 유전자 알고리즘을 사용하여 조합 문제를 해결합니다 (하나의 요소를 한정된 세트).

일반적으로 인수 화 (QR, LU) 또는 반복 알고리즘 (Gauß-Seidel, CG, ...)을 사용하여 선형 시스템을 해결합니다.

당신은 당신이 언급 한 논문에서 제안 된 바이너리 코드 유전자 알고리즘보다는 실제 코딩 된 유전자 알고리즘을 사용하는 것에 대해 생각해야합니다. 실제로 바이너리 코딩 된 유전자 알고리즘을 사용하면 'x', 'y'가 음수 값을 취할 수있는 경우 방정식에 대한 해결책을 찾을 수 없습니다.

따라서 실제 코딩 된 유전자 알고리즘을 사용해야합니다. 전체 유전자 알고리즘을 직접 코딩 할 수 있거나 기존 RGA 코드를 사용하여 문제를 해결할 수 있습니다. 필요에 따라 피트니스 기능을 사용자 정의해야합니다. 여기에서 논문에서 제안 된 것을 사용할 수 있습니다. 꽤 쉬웠습니다!

RGA 구현을 고려할 수 있습니다 http://www.iitk.ac.in/kangal/codes.shtml.

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