문제

GA를 사용하여 특정 조건(길이, 회전 수 등)을 만족하면서 A에서 B까지의 최적 경로를 결정하고 싶습니다.

경로의 예는 다음과 같습니다.위쪽 4, 왼쪽 8, 아래쪽 3, 오른쪽 3, 아래쪽 1, 왼쪽 10, 위쪽 4, 왼쪽 1, 위쪽 3

문제는 특히 경로의 길이가 가변적이기 때문에 GA에서 사용하기 위해 이와 같은 정보를 좋은 방법으로 표현하는 좋은 방법을 실제로 모른다는 것입니다.

누구든지 이와 같은 작업을 수행하는 방법에 대한 좋은 아이디어를 갖고 있습니까?

도움이 되었습니까?

해결책

나는 당신의 표현 문제가 무엇인지 정확히 잘 모르겠으므로 GA의 염색체 현악기에 대한 오해로 인해이 질문이 있다고 생각합니다. 이론적으로 말하면, 염색체 현악기는 개별 유전자를 경계하는 추가 단계를 수행하는 경우 정수 경계에서 명시 적으로 재결합 할 필요가 없습니다. 이는 유전자별로 재결합 할 수 있습니다. 이것은 "경로"와 같은 가변 길이 유전자의 문제를 해결합니다. 가변 길이 유전자 재조합은 돌연변이 방법에 또 다른 변형을 추가하는 문제 일뿐입니다. 특히 "표준"이라는 표준 "A 또는 요소 사용 요소"외에도 "이 요소를 사용 하거나이 요소를 핵무기" 당신의 길이있는 요소.

다른 팁

당신이 정말로 * 최적화 알고리즘, 경로 찾기에 일반적으로 (좋은 효과에) 사용됩니다. 적절한 솔루션을 얻기 위해 원하는 휴리스틱 기능을 지정할 수 있습니다.

나는 u, d, l, r ....

따라서 "Up 4, 왼쪽 8, 3, 오른쪽 3, 1, 왼쪽 10, 4, 왼쪽 1, Up 3"은 다음과 같습니다.

uuuulllllllllddddrrdllllllllllllluuuuluuu

이와 같은 현을 번식시키는 것이 훨씬 쉬울 것입니다.

A (15 chars)와 B (3 숯)의 경우 A & B 간의 번식 기능은 다음과 같습니다.

  • 1과 max (Len (a), len (b)) {{1과 15} 사이에서 임의의 원하는 길이 (Len)를 선택하십시오.
  • 1과 Len 사이에서 임의의 분할 지점을 선택하십시오.
  • A 또는 B가 무작위로 먼저 가려면 선택하십시오.
  • 첫 번째 캐릭터를 하나의 첫 번째 캐릭터와 다른 하나의 마지막 (Len-S) 캐릭터로 가져갑니다.

GA는 가변 길이의 염색체를 처리할 수 있습니다.실제 개인은 매우 복잡할 수 있습니다.예를 들어, 일정 수의 고정 길이 비트, 문자열(고정 길이 없음) 및 일부 공액 복소수 쌍 세트를 포함할 수 있습니다.또한 켤레 복소수 쌍은 항상 일부 조건을 유지해야 합니다.그것은 가능하지만, 개인이 더 복잡해질수록 유전적 조작도 더 복잡해집니다(예:교차, 돌연변이).아마도 Fitness 함수에는 코드 줄이 더 필요할 것입니다.하지만 여전히 가능합니다.

아마도 제안된 대로 숫자로 코딩된 경로 표현을 선택할 수 있지만 다음과 같이 코딩된 예제를 사용하여 수행할 수도 있습니다. 오사마 ALASSIRY 제안됨: 으아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아.
크로스오버의 경우:

  • 돌연변이 연산자가 주어진 개인의 현재 길이1을 읽도록 하고,
  • x1,y1 =< 길이1 및 x1 != y1이라는 두 개의 난수 x1,y1을 생성합니다(이것은 개별 1에 대한 절단 지점입니다).
  • 개별 2에 대해 동일한 작업을 수행하면 이제 두 쌍 (x1,y1)과 (x2,y2)가 있습니다.
  • x1과 y1 사이에 있는 것을 개별 1에서 복사하여 x2와 y2 값 사이의 개별 2에 삽입합니다.개인 2의 새 버전은 x1y1과 x2y2 사이의 유전자 수가 다를 수 있으므로 길이가 변경될 수 있지만 괜찮습니다.
  • x2y2 사이에 있는 개별 2의 원래 버전에 있던 내용이 x1y1 사이에 있는 개별 1의 새 버전에 삽입되어야 합니다(길이도 변경됨).

명확하게 하려면:
부모 A:으아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아
부모 B:DRRRRLULUDDDR
당신은 랜덤 쌍 paira (4,18), pairb (0,5)를 생성합니다.
으으으으LLLLLLLDDDRRRDLLLLLLLLLUUUULUUU
DRRRRL울루드DR
그래서 교차 후 당신은 얻을
으으으으DRRRRLLLLLLLLLLUUUULUUU
LLLLLLLDDDRRRD울루드DR
이제 방금 교차했습니다.한 지점의 절단 지점을 사용하거나 지점을 늘릴 수도 있습니다.

돌연변이에 관해서는:

  • 0과 개인의 길이 사이의 숫자를 생성하고,
  • 1-4 사이의 숫자를 생성하고 해당 유전자를 업데이트합니다.(1이 생성된 경우 U, 2-D, 3-L, 4-R로 변경)

당신은 방금 돌연변이를 일으켰습니다.하나 이상의 유전자를 돌연변이시킬 수도 있습니다.

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

나에게 이것은와 매우 비슷하게 들린다 여행 세일즈맨 문제, 그 페이지에 유용한 정보가 포함되어 있습니까?

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