2017-04-17 11 views
1

유전 알고리즘을 인코딩, 최적화 및 디코딩하여 다시 살펴 보았습니다. 나의 첫번째 시도는 큰 일을했던 주문한 십자가를 지닌 여행 세일즈맨이었다. 나는 2 차원 패킹 문제를 최적화하면서 더 복잡한 게놈을 최적화하려고 시도한 기사를 발견했습니다.단두대 절단 최적화를위한 유전 알고리즘

저자는 의미있는 역방향 폴란드어 표기법을 사용하여 문제를 인코딩합니다. 그것은 파트와 V 또는 H 중 하나를 오퍼레이터로 사용합니다. 내 최종 레이아웃 하나 개 스택 요소로 해석 될 필요 스택 디코딩 즉 34H5V

. 즉, 특정 지점까지의 운영자 수는 동일한 지점까지의 부품 수보다 1 작아야합니다. 그런 다음 작성자는 부품에 대한 교차 크로스 오버와 연산자에 대한 바이너리 크로스 오버를 사용하여 혼합 크로스 오버를 사용했다고 명시합니다.

나는 이것을 극복했으나 성능을 평가하기 전에 파트와 연산자를 분리하고 재결합하는 방법을 이해할 수 없으며 세부 사항을 거의 제공하지 않습니다. 이진 크로스 오버가 발생하면 부품을 "X"로 교체하여 상대 위치를 유지하므로 크로스 오버 후 재조합 될 수 있지만 작업자와 부품 간의 관계는 사실이 아닙니다.

비슷한 시나리오를 다루는 사람이 있거나 아마도 성공적으로이 자원을 사용하고있는 사람이있을 것입니다.

답변

0

이 방법은 실제보다 더 어려워 보입니다. 원래 모집단이 생성되면 후위 문자 표기법으로 설정된 제한 사항을 준수해야합니다. 크로스 오버는 단순히 부모의 마스크를 구축 발생하면

즉 x는 객체이고, O는 operaror입니다

을 xxxxooxoxx. 일단 당신이 위치를 잡고 마스크를 가지고 당신은 단지 연산자의 스팅과 하나의 개체를 만들 수 있습니다. 연산자는 바이너리 크로스 오버와 오브젝트를 부분 맵 크로스 오버로 수행 할 수 있습니다. 완료되면 각 그룹에 나타나는 순서대로 값으로 마스크를 채 웁니다. 가면이 유효했기 때문에 자손도 유효합니다.

모든 문제는 가능한 모든 조치를 취하는 것이므로 마스크가 없으면 모두 마스크로 제한됩니다. 그는 돌연변이 율에 의해 지시 된 스왑 돌연변이를 수행함으로써 이것을 해결합니다.

  1. 임의로 항목을 선택하십시오.
  2. 항목이 연산자 인 경우 A. 연산자를 다른 종류로 바꿉니다. B. 다른 항목을 선택하십시오. 그것의 객체라면 필수 항목이 충족되는지 확인한 다음 변경하십시오.