2010-08-13 4 views
12

진화 컴퓨팅에서 꽤 짜증나는 것은 약간 다른 개념들이 서로 다른 이름을 뚜렷이 구별하는 경향이 있다는 것입니다. 이 때문에 최근의 혼란은 유전자 발현 프로그래밍이 데카르트 유전 프로그래밍과 매우 유사하다는 것입니다.유전자 발현 프로그래밍과 데카르트 유전 프로그래밍의 차이점

  1. (근본적으로 다른 개념입니까?
  2. 저는 GP 지침의 간접 인코딩이 효과적인 기술이라는 것을 읽었습니다 (GEP와 CGP 모두 그렇게 함). 간접 부호화가 고전적인 나무 기지 GP를 구식으로 만들었다는 합의에 도달 했습니까?

답변

7

음,이 유전자 발현 프로그램 (GEP) 및 직교 유전 프로그래밍 (CGP 또는 내가 무엇을 고전 유전 적 프로그램으로 볼 수) 사이에 약간의 차이가 있지만, 그 차이가 더 그것보다 과대 선전 할 수 있다는 것 정말로해야한다. 저는 GEP을 한번도 사용하지 않았기 때문에 모든 의견은 CGP 경험에 기초한 것입니다.

CGP에는 유전자형과 표현형 사이의 구별이 없습니다. 즉, CGP의 "유전자"를 보는 경우에도 표현을 살펴볼 수 있습니다. 여기에는 인코딩이 없습니다. 즉 표현 트리가 유전자 자체입니다.

GEP에서 유전자형은 표현형으로 표현되므로 유전자를보고 있다면 표현이 어떻게 보이는지 쉽게 알 수 없습니다. GP의 "발명가"인 Cândida Ferreira는 really good paper을 작성했으며 전체 개념에 대한 간략한 개요를 제공하려는 일부 other resources이 있습니다.

Ferriera는 이점이 "명백합니다"라고 말하지만 실제로 CGP보다 GEP을 반드시 향상시키는 것은 없습니다. 분명히 GEP는 다중 유전자 (multigenic)이며, 이는 다수의 유전자가 형질 (즉, 발현 트리)의 발현에 관여 함을 의미한다. 어쨌든, 체력은 표현 된 나무에서 계산되므로, GEP가 체력을 높이기 위해 무엇인가를하고있는 것처럼 보이지 않습니다. 저자가 주장하는 것은 GEP가 체력에 도달하는 속도를 (즉, 적은 세대로) 증가 시키지만 솔직히 말해서 당신은 다른 선택 알고리즘, 다른 토너먼트 구조, 그리고 다른 게임을 분할함으로써 CGP의 극적인 성능 변화를 볼 수 있습니다.

  • 임의
  • 룰렛
  • 상위 N
  • : 등 운동에 다양성,

    선택을 포함하여 부족들 사이의 부족으로 인구, 마이그레이션 표본,

  • 절반

토너먼트 주파수 걸릴 :

  • 모든 데이터 인스턴스를 생성 한 번씩
  • 당 한 번
  • 시대에 한 번.

토너먼트 구조 :

  • , 3을 가지고 일을 죽이고 다른 두의 아이로 교체합니다.
  • 토너먼트의 모든 개인을 체력별로 분류하고, 하반부를 죽이고 상반부의 자손으로 교체하십시오 (낮은 체력은 체력이 좋고 어퍼는 체력이 좋음).
  • 토너먼트에서 개인을 무작위로 선택하여 과도한 인물을 메이트하고 죽일 수 있습니다.

부족
인구 각 - 서로 독립적으로 발전 부족으로 분할 될 수있다 :

  • 부족으로부터 발 주기적 개별 다른 부족
  • 이동 될 Migration-
  • 부족은 논리적으로 분리되어 별도의 환경에서 실행되는 별도의 모집단과 같습니다.

다양성 피트니스
당신은 당신이 비례 값으로 자신의 체력을 처벌 (따라서 같은 표현형을 가질 가능성이) 얼마나 많은 개인 같은 피트니스 값이 계산 피트니스로 다양성을 통합하십시오 같은 체력 값을 가진 개인이 많으면 많을수록 더 많은 벌금이 부과됩니다. 이런 식으로 독특한 표현형을 가진 표본이 권장 될 것이므로 인구의 정체가 훨씬 줄어들 것입니다.

이러한 것들은 CGP의 성능에 큰 영향을 줄 수있는 것들 중 일부일뿐입니다. 그리고 제가 크게 말할 때 Ferriera의 성능과 같은 순서 또는 그 이상임을 의미합니다. 그래서 Ferriera가 그러한 아이디어를 너무 많이 고치지 않으면 CGP의 성능이 훨씬 느려질 수 있습니다 ... 특히 침체에 대처할 수있는 방법이 없다면 더욱 그렇습니다. 따라서 GEP에서 성능 통계를 읽을 때주의해야합니다. 때로 사람들이 사용할 수있는 모든 "최적화"를 설명하지 못하기 때문입니다.

+0

자세한 답변을 보내 주셔서 감사합니다. 매우 감사. – Jelle

+0

이 답변이 올바르지 않습니다. 데카르트 GP는 클래식 GP와 다릅니다. 직교 GP는 간접적 인 표현 (GEP와 유사)을 가지고 있으며, 고전적인 GP 트리와 유사한 그래프를 작성하더라도 트리 기반이 아닙니다. – rll

2

일반적으로 GEP는 GP에서 더 간단합니다. 프로그램에서 다음과 같은 노드를 허용한다고 가정 해 봅시다 : 상수, 변수, +, -, *, /, if, ... GP가있는 각 노드에 대해 다음 작업을 생성해야합니다. - 랜덤 화 - 돌연변이 - 크로스 오버 -뿐만 아니라 아마도 다른 유전 연산자

하나의 동작을 구현하는 데 필요한 같은 각 노드에 대한 GEP에서

: 직렬화 (C 또는 Java에서 더블 등) 숫자의 배열을, 그리고 반환 마디. Java 나 Python과 같은 언어로 객체 deserialization을 닮았습니다 (차이점은 프로그래밍 언어의 직렬화는 바이트 배열을 사용한다는 것입니다. 여기서는 숫자 배열을 사용합니다). 이 'deserialize'연산조차도 프로그래머가 구현할 필요는 없습니다. 자바 또는 파이썬 직렬화와 마찬가지로 일반적인 알고리즘으로 구현할 수 있습니다.

이 단순성은 최상의 솔루션을 찾기가 어려울 수 있지만 다른 측면에서는 프로그래머가 작업을 덜 필요로하며 더 간단한 알고리즘이 더 빠르게 실행될 수 있습니다 (최적화하기 쉽고 CPU 캐시에 더 많은 코드와 데이터가 들어가고, 등등). 그래서 저는 GEP가 약간 더 훌륭하다고 말할 것입니다. 물론 확실한 대답은 문제에 달려 있으며, 많은 문제들에 대해서는 그 반대가 사실 일 수 있습니다.

+0

감사합니다 iirekm, 매우 통찰력! – Jelle

2

이러한 대답에는 명확해야 할 몇 가지 혼란이있는 것 같습니다. 데카르트 GP는 클래식 GP (일명 나무 기반 GP) 및 GEP와는 다릅니다. 그들은 많은 개념을 공유하고 동일한 생물학적 기제로부터 영감을 얻었지만 개인 (표현)의 표현은 다양합니다.

CGP에서 표현 (유전자형과 표현형 사이의 매핑)은 간접적입니다. 즉, CGP 게놈의 모든 유전자가 표현형 (GEP 및 다른 많은 개념에서 발견되는 개념)으로 표현되는 것은 아닙니다. 유전자형은 그리드 또는 노드 배열로 코딩 될 수 있으며, 결과 프로그램 그래프는 활성 노드 만의 표현입니다.

GEP에서 표현도 간접적이며 모든 표현형이 표현형으로 표현되는 것은 아닙니다. 이 경우 표현은 treeGP 또는 CGP와 많이 다르지만 genotypes도 프로그램 트리로 표현됩니다. 필자의 의견으로는 GEP은 좀 더 우아한 표현이며 구현하기가 더 쉽지만 몇 가지 결함이 있습니다 : 특정 꼬리와 머리 크기를 문제에 따라 찾아야합니다. mnltigenic 버전은 표현식 트리 사이에 강제적 인 접착제입니다 , 마지막으로 너무 많아 bloat입니다.

일부 특정 문제 영역에서 어떤 표현이 다른 표현보다 좋을지 독립적으로 표현할 수 있으며 일반적인 목적이므로 인코딩 할 수있는 한 모든 도메인에 적용 할 수 있습니다.