2013-07-18 4 views
0

나는 MATLAB의 기본적인 유전자 알고리즘을 구현하기 위해 노력하고 있습니다. 교차 작업과 관련하여 몇 가지 질문이 있습니다. 나는 그것에 대한 자료를 읽고 있었고 나는 항상 두 명의 부모가 교차 작업을 위해 선택되었다는 것을 발견했다.유전자 알고리즘 크로스 오버 작업

  1. 부모 수가 홀수 인 경우 어떻게됩니까?

  2. 한다고 가정 내가 부모 A, 부모 B & 부모 C를 가지고 있고 심지어 그때 나는 네 자손을 얻을, 자손을 생산하는 C와 B가 다시 부모 B와 부모 A를 교차. 인구수가 항상 동일해야하기 때문에 그 중 하나를 거부하는 기준은 무엇입니까? 나는 가장 낮은 체력 값을 가진 자손을 거부해야 하는가?

  3. 가정한다 OR 또는 AND 연산 같은 부모 사이의 산술 연산, 좋은 크로스 오버 작업으로 간주 할 수 있습니까? 크로스 오버 작업으로 나열하는 일부 사이트를 찾았지만 확실하지 않습니다.

  4. 어떻게 여러 부모 사이에 크로스 오버 할 수 ?

답변

1

"크로스 오버는"너무 많은 부모의 측면을 복용하고 어떤 방법으로 각각의 부모와 비슷한 자손을 생산하기 위해 그들을 사용의 일반적인 생각으로 잘 정의 된 연산자가 아닙니다. 따라서, 어떻게 크로스 오버를해야하는지에 대한 질문에는 실제로 올바른 대답이 없습니다.

실제로, 당신은 당신의 문제 도메인 및 인코딩에 대한 의미가 무엇이든해야한다. 바이너리 인코딩 된 개인의 두 개의 상위 재조합과 같은 것들로, 몇 가지 분명한 선택이 있습니다. 예를 들어, n 포인트 및 균일 크로스 오버와 같은 것들이 있습니다. 실제 값 인코딩의 경우 엄격한 생물학적 관점에서 볼 때 SBX와 같은 것이 있습니다. 오히려, 그들은 단순히 소정의 특성을 갖도록 설계되어있다. 마찬가지로, 순열 인코딩은 다시 부모에 어떤 기능 분석의 결과 특정 문제 영역에 대한 유전하게 이해하는 것이 많은 잘 알려진 사업자 (주문 크로스 오버, 사이클 크로스 오버, 에지 조립 크로스 오버 등)을 제공합니다.

당신은 같은 일을 할 무료입니다. 그 좋은 운영자 여부

child = new chromosome(L) 
for i=1 to L 
    switch(rand(3)) 
     case 0: 
      child[i] = parentA[i] 
     case 1: 
      child[i] = parentB[i] 
     case 2: 
      child[i] = parentC[i] 

여부 여러 가지 요인에 따라 달라집니다 (문제 도메인의 해석 : 당신이 (진 같은 몇 가지 별도의 인코딩) 세 부모가있는 경우 다음과 같은 것이 같은 것을 할 수 인코딩 등),하지만 그것은 자식을 생산하는 완벽하게 합법적 인 방법입니다. AND, OR와 같은 부울 연산을 수행하는 등 다수의 부모에 대한 각 대립 유전자 값의 가중치 평균을 취하는 등보다 복잡한 방법을 직접 구현할 수도 있습니다. 원하는 경우 다른 구조화 연산자를 구축 할 수도 있습니다. 부모에게는 특정한 역할이 있습니다. 기본 Differential Evolution 알고리즘은 세 부모 a, b 및 c를 선택하고 a + F(b - c) (일부 기능 F 포함)과 같은 업데이트를 대략적으로 자식에 해당합니다.