유전자 프로그래밍에 사용할 언어


15

과제의 일환으로 대기 오염 물질 수준을 예측 하는 유전자 프로그래밍 알고리즘 을 작성해야 합니다. 나는 경험이 없기 때문에 누구나 진화 된 프로그램이 작성 될 프로그래밍 언어의 제안에 대한 포인터를 알려줄 수 있습니까 ?

설명 : 나는 유전자 알고리즘 자체를 작성할 언어가 무엇인지 묻지 않고 (결정을 내릴 수 있기 때문에) 진화 된 프로그램을 어떤 프로그래밍 언어로 만들어야하는지 묻고 있습니다.

강사가 Lisp을 제안했지만이 아이디어가 마음에 들지 않습니다. 먼저, 어떤 종류의 추상 구문 트리에서 작업해야합니다. 두 번째로 트리 구조에서 크로스 오버를 안정적으로 수행하는 것은 혼란 스러울 수 있습니다.

차라리 슬래시 / A 와 같은 유전자 프로그래밍 전용 인 것을 사용하고 싶습니다 . SlashA는 AST 작업을 필요로하지 않습니다. --- 바이트 코드의 프로그램은 모든 int 배열이 일부 슬래시 / A 프로그램을 나타 내기 때문에 필요한 fasion에서 변경 될 수있는 int 배열입니다.

추가 사항 :

  • AST 조작을 피하고 싶습니다!
  • 이 문제는 어렵습니다 (재고 값을 예측하는 것만 큼 어렵지는 않습니다). 이것은 아마도 입력 정보가 ​​충분하지 않기 때문입니다 (숨겨진 매개 변수가 있습니다). 평균을 반환하는 모델보다 성능이 더 좋은 모델을 만드는 것은 다소 어려운 문제입니다 (평균 모델의 MAPE는 35 % 임). 대부분의 모델의 MAPE는 약 25 %이며 최고는 20 %입니다.
  • 중요한 기능이 확실하지 않다는 가정하에 많은 기능을 가진 데이터 세트를 관리하는 언어를 갖고 싶습니다. (슬래시 / A는 여기에서 단점이 있습니다.이 언어에서는 입력 기능을 순차적으로 읽습니다. 따라서 일부 기능은 더 큰 확률로 사용됩니다).
  • 파이썬으로 이것을 프로그래밍 할 수 있기를 원하므로 파이썬 라이브러리는 훌륭 할 것입니다.하지만 C / C ++ (Java, Matlab 등)에 대한 바인딩을 수행 할 수 있습니다.

나는 이것이 설문 조사 질문이라는 것을 알고 있습니다. 그러한 질문에 대해 일찍이 되려면 닫으십시오. 그러나 그것이 충분히 구체적이라고 생각합니다.

답변:


14

당신의 오염 물질 문제는 아마 많은 언어를 필요로하지 않을 것입니다. 제어 문제가 아닌 기호 회귀처럼 보입니다.이 경우 표준 트리 GP를 기능 세트와 기능 세트의 관련 연산자로 사용하는 기능과 몇 가지 유용한 상수를 사용하여 표준 트리 GP를 사용할 수 있습니다. GP 시스템은 관련없는 기능을 제거하고 매우 큰 데이터 세트를 처리하는 기술이 있습니다. 일반적으로 문제를 해결할 수있는 가장 작은 기능 세트를 지정하고 필요한 경우주의해서 확장하십시오.

초기에 트리와 리니어 GP 중에서 선택해야합니다. 리스프는 트리이고 슬래시 / A는 선형입니다. 장단점을 이해하려면 두 가지를 모두 읽으십시오. 그러나 당신이 쓴 것에서 간단한 트리 GP 시스템을 제안합니다. 직접 작성하는 것은 어렵지 않지만 기존 Python 구현이 있습니다. 아래의 것들은 일반적으로 파이썬의 진화 알고리즘을위한 것이지만 GP가 아닌 일부는 비활성입니다 :

  1. PyGressionGP (Python의 기호 회귀를위한 GP)-http: //code.google.com/p/pygressiongp/
  2. PyGene- https: //github.com/blaa/PyGene
  3. 파이썬에서 간단한 유전자 프로그래밍 -http : //zhanggw.wordpress.com/2009/11/08/a-simple-genetic-programming-in-python-4/
  4. Pyevolve - https://github.com/perone/Pyevolve - - 또한 블로그를 참조 http://blog.christianperone.com -이 게시물을 - http://blog.christianperone.com/?p= 549
  5. esec (Python의 진화 계산)-http: //code.google.com/p/esec/
  6. 복숭아-http: //code.google.com/p/peach/
  7. PyBrain (않는 많은 아니라 NN) - http://pybrain.org/
  8. dione-http: //dione.sourceforge.net/
  9. PyGEP (Genetic Expression Programming)-http: //code.google.com/p/pygep/
  10. deap (Distributed Evolutionary Algorithms)-http: //code.google.com/p/deap/

또한 유명한 GP 저자 Poli, Langdon 및 McPhee의 GP에 대한 (무료) 입문 책을 참조하십시오.

유전 프로그래밍 분야 가이드 - http://www.gp-field-guide.org.uk/


linar와 tree GP의 장단점에 대한 언급이 있습니까?
jb.

몇 가지 비교를 보았지만 구체적인 참고 자료는 없습니다. Banzhaf와 Brameier가 2000 년대에 출판 한 것을 볼 수 있습니다. 그들은 선형 GP에 대해 상당한 연구를했으며 2007 년 LGP에 관한 책을 출판했습니다.
Graham Jones

흠 ... 왜이 사람들이 연합하지 않습니까?
vonPetrushev

무슨 뜻인지 잘 모르겠습니다. 왜 나무와 선형 GP 사람들이 연합하지 않습니까? 종교적 차이는 없으며 동일한 아이디어의 다른 풍미입니다 (GEP (Gene Expression Progamming) -gene-expression-programming.com 과 같은 다른 것들도 있습니다 ).
Graham Jones

1
나는 나무 GP가 사악하거나 sth라고 말하는 것이 아니다. 방금 내 구현을 롤링하고 싶었고 선형이 훨씬 쉽습니다. 처음부터 4 시간 만에 Python 프로토 타입을 작업했습니다.
jb.

4

프로그램을 발전 시키려면 어쨌든 구문 트리를 조작해야합니다. 그렇게하면 어떤 프로그램을 개발하든 구문 적으로 자동으로 정확 해집니다.

언어를 선택할 때 명심해야 할 두 가지가 있습니다.

  1. 진화 된 프로그램이 일부 데이터에서 충돌을 일으킬 수있는 저수준 구성을 피하십시오. 예를 들어, 포인터 산술. 진화 된 프로그램의 언어로 C 또는 C ++를 사용하려는 경우 포인터 산술없이 버전으로 제한 할 수 있습니다.
    JVM 및 CLR과 같은 가상 시스템이 안전망을 제공해야하지만 비슷한 이유로 어셈블리 언어에 투표합니다.
  2. 큰 데이터 세트에 적합합니다. 할당을 올바르게 이해하면 출력 프로그램 자체에서 대용량 데이터 세트를 조작해야합니다.

이미 익숙한 대상 언어를 사용하고 싶을 것입니다. 나는 파이썬에 익숙하지 않지만 AFAIK는 위의 기준을 만족하므로 대상 언어에 적합한 선택이어야합니다.


1
이 언어에서는 github.com/arturadib/slash-a ---를 참조하십시오 . 프로그램은 바이트 코드의 배열로 미리 설정되며 모든 배열이 올바른 프로그램이므로 원하는 유전자 연산을 사용할 수 있습니다.
jb.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.