3

는 I 특정 조건 (길이, 회전 수 등)유전 알고리즘의 경로를 나타내는 방법은 무엇입니까? 아래, 왼쪽 8 4 최대 :

경로의 예는 다음을 만족하는 B A에서 최적 경로를 결정하기 위해 GA를 사용하고자 3, 오른쪽 3, 아래 1, 왼쪽 10, 위쪽 4, 왼쪽 1, 위쪽 3

문제는, 나는 이런 좋은 정보를 좋은 방법으로 표현할 수있는 좋은 방법을 알지 못한다. GA는 경로가 가변 길이이기 때문에 특히 그렇습니다.

누구나 이런 식으로하는 것이 좋습니다.

답변

2

귀하의 표현 문제가 무엇인지 정확하게 알지 못해서 GA의 염색체 문자열에 대한 오해에서이 문제가 의심됩니다. 이론적으로 말하자면, 개별 유전자를 구분하는 추가 단계를 거치면 염색체 문자열을 정수 경계에서 명시 적으로 재조합 할 필요가 없습니다. 이렇게하면 유전자 기반으로 재결합 할 수 있습니다. 이것은 "경로"와 같은 가변 길이 유전자의 문제를 해결합니다. 가변 길이 유전자를 재조합하는 것은 돌연변이 방법에 또 다른 변종을 추가하는 것일뿐입니다. 구체적으로 유전자가 분리 될 수있는 경우 표준 "A의 요소 사용"또는 "B의 요소 사용"에 추가하여 "이 요소를 사용하거나 핵을 사용하십시오. 당신의 길은 요소들입니다.

+0

그래서 길이가 다른 두 개의 염색체를 교차하려면 어떻게해야합니까? – rlbond

+0

재조합 동안 염색체 X가 염색체 Y에 유전자의 일부 S를 포함하고 있지 않다는 것을 알게된다면, 재조합은 S의 어떤 유전자가 결과 염색체에 나타나는지, 즉 가변 길이 유전자를 다루는 것과 같은 방식으로 무작위로 선택합니다 . –

+0

또한, 염색체를 문자열로 명시 적으로 개념화하지 않고 오히려 일련의 연산 및 변수로 개념화하는 데 도움이 될 수 있습니다. 문자열 표현은 주로 DNA, imr에 대한 유추에 사용되지만 GA 구현에서 명시 적으로 요구되지는 않습니다. –

1

내가 U, D, L, R을 사용합니다 ....

그래서 "4 위, 왼쪽 팔, 3, 오른쪽 3, 1, 왼쪽 10, 최대 4 개, 왼쪽 1, 3 "다음과 같습니다

UUUULLLLLLLLDDDRRRDLLLLLLLLLLUUUULUUU

그것은이 같은 문자열을 번식하는 것이 훨씬 쉬울 것이다.

  • 1 및 MAX (LEN (A 사이의 임의의 원하는 길이 (LEN)를 선택 A의

    (15 문자)과 B (3 숯을가)와, & B 간의 제 번식 기능하는 것), LEN (B)) {1 ~ 15 사이}
  • 1과 len 사이의 무작위 분리 점을 선택하십시오.
  • A 또는 B를 처음으로 무작위로 선택하려면 선택하십시오.
  • 먼저 첫 번째 문자를 가져오고 다른 문자의 마지막 문자 (len-s)를 가져옵니다.
2

경로 찾기에 일반적으로 사용되는 A* optimisation algorithm과 같은 것을 사용하고 싶다는 소리가 들립니다. 적절한 솔루션을 얻기 위해 원하는 휴리스틱 함수를 지정할 수 있습니다.

1

GA는 가변 길이의 염색체를 처리 할 수 ​​있습니다. 실제 개인은 매우 복잡 할 수 있습니다. 예를 들어 고정 길이 비트 수, 고정 길이가 아닌 문자열 및 공액 복소수 쌍의 일부 집합을 포함 할 수 있습니다. 또한 공액 복소수 쌍은 항상 일부 조건을 유지해야합니다. 그렇게 할 수는 있지만 더 복잡한 개인은 점점 더 복잡한 유전 적 조작을 얻습니다 (예 : 교차, 돌연변이). 아마 휘트니스 함수는 코드를 더 많이 사용하게 될 것입니다. 그러나 여전히 가능합니다.

는 번호가 경로 표현을 코딩 선택했다 할 수 제안,하지만 여전히 Osama ALASSIRY로 구분하여 예를 수행 할 수 있습니다 어쩌면으로 제안 : UUUULLLLLLLLDDDRRRDLLLLLLLLLLUUUULUUU. 이상 크로스를 들어
!

  • 두 개의 난수 X1, Y1, 모두 X1, Y1 = < lenght1 및 1 개를 생성

    • 운영자가 주어진 개인의 현재 lenght1을 읽을 돌연변이하자 = (이것은 당신의 절단 Y1 있습니다 개인 1),
    • 에 대한 포인트는 이제 이쌍 (X1, Y1)과 (x2, y2), X1과 Y1 사이에 어떤 개인 1
    • 사본을, 개인 2 동일한 작업을 수행 한 후 삽입 값 x2와 y2 사이의 개체 2로 이동합니다. 개별 버전 2의 새 버전은 x1y1과 x2y2 사이의 유전자 수가 다를 수 있기 때문에 길이가 바뀔 수 있지만 괜찮아요.
    • x2y2 사이의 개인 2의 원래 버전은 x1y1 사이의 새 버전 1에 삽입되어야합니다.

    하려면 (그 아이폰에도 변경됩니다) 분명히 :
    부모 A : UUUULLLLLLLLDDDRRRDLLLLLLLLLLUUUULUUU
    부모 B : DRRRRLULUDDDR
    당신이 임의 쌍을 생성 pairA (4,18), pairB (0.5) 0부터 유전자를 계산한다고 가정하면 다음 문자열을 바꿉니다 :
    UUUU LLLLLLLLDDDRRRD LLLLLLLLLLUUUULUUU
    DRRRRL ULUDDDR
    그래서 크로스 당신이 얻을 이상
    UUUU DRRRRL LLLLLLLLLLUUUULUUU
    LLLLLLLLDDDRRRD ULUDDDR
    이제 당신은 그냥 건너했다. 당신은 하나의 포인트를 사용하여 커팅하거나 포인트를 곱할 수 있습니다. 돌연변이로

    :

    • 0 개인의 길이와 수를 생성
    • 1-4 사이의 수를 생성하여 그 유전자를 업데이트. (1이 생성 된 경우 U, 2-D, 3-L, 4-R로 바꿉니다)

    방금 ​​돌연변이를했습니다. 하나 이상의 유전자를 돌연변이시킬 수도 있습니다.

    하지만 내가 말했듯이 다른 가능성이 있습니다.