3. Genetic
Algorithm?
• 자연의 생물 유전학과
자연선택설에 기반을 둔
알고리즘
• 병렬적이며, 전역적인 탐색
알고리즘!!
• 가능한 해들을 정해진 형태의
자료구조로 표현하고, 이들을
변형시켜가면서 평가과정을
거쳐 점점 더 좋은 해들을
찾아가는 알고리즘
<Ref> http://nnpdf.hepforge.org/html/GA.html
4. 요구 조건?
우리에게 주어진 문제를 일정한 규칙에
따라서 조작하는데 문제가 없는 형태로
표현되어야 함
(예를 들어, 방문판매원 문제의 경우
도시를 이동한 순서를 담고 있는 List)
1
Crossover와 Mutation 그 외의 기타
연산으로 부터 나온 결과들을 평가할 수
있어야 함(적합도 함수)
- 이를 통해서 이 가능해가 얼마나 문제의
정답에 가까운지를 평가할 수 있음
2
5. 가능해가 Program
Code도?
• 우리가 풀려는 문제를 푸는 코드를
Genetic Algorithm의 기본적인
아이디어를 적용해서 만들어 낼 수
있지 않을까?
• 이게 Genetic Programming!!
7. Code의 적합도 계산하기
Code의 목적을 생각하면,
문제를 얼마만큼 잘 풀었는지
검사하면 됨
C/C++와 같은 컴파일
언어가 GP의
가능해라면? – 컴파일한
후 실행시켜서 그
결과로 평가하면 됨
Python과 같은
인터프린터 언어가
GP의 가능해라면? –
그냥 해석기에게 맡기고
그 결과로 평가하면 됨
8. Code를 변형가능한 자료구조로 나타내기
대학교에서 컴파일러 제작 수업
또는 자료구조 수업을 들었다면,
Abstract Syntax Tree 또는 줄여서
Tree가 생각나야 함
즉, Abstract Syntax
Tree, Tree로 표현된
것을 이용하면 됨
12. Python으로 어떻게 구현?
• Genetic Programming을 할 수 있는 Library는 꽤 있음
• gplearn : https://github.com/trevorstephens/gplearn
• deap : https://github.com/DEAP/deap
• 그 외…
http://geneticprogramming.com/software/