이전에, Egloos Blog 를 쓸때 Genetic Programming(이하 GP)의 결과물을 올린적이 있었다(태터툴즈로 옮긴 후의 링크는 http://www.hybrid.pe.kr/tt/32). 그때의 결과를 직접 확인은 해보지 않았는데, 이제서야 한번 테스트를 해봤다.
일단, 완성이라고 생각했던 것을 막상 직접 돌려보니 절반의 완성이었다. 쩝....
GP에 대해서는 오랜만에 포스팅하는 것이라 다시 간단하게 설명해보면, GP 방법을 사용해서, 특정한 역할을 수행하는 함수(프로그래밍)을 만들어 내는 것이다. 이 경우는 초기 위치와 초기 속도가 주어졌을때 주어진 장소로 최대한 빨리 움직이는 것을 해야한다. 함수의 결과는 네모 박스의 가속도를 +10 혹은 -10로만 지정하는 제한된 함수이다.
여러개의 결과물 중에 두가지만 뽑아서 직접 결과를 확인할 수 있도록 해봤다.
동영상에서 첫번째 것은, 초창기 무작위로 뽑아낸 개체중에 Best 이고, 두번째 것은 30번 이상 generation 을 돌려서 얻은 Best 개체이다. 최종 솔루선과는 다르기 때문에 완벽하게 모든 case 에 대해서 동작하지는 않는다.
단, 첫번째 것은 너무 느리기 때문에 10배속 한 것이다. 처음에 -30 의 위치에 0의 속도로 있으면서 서서히 목적지(파란점) 다가가지만, 가속도의 방향이 불안정하다는 것을 쉽게 확인할 수 있다.
반면 두번째 것은 1배속으로... 처음에는 목적지와 반대방향의 속도를 가지고 시작한다. 처음에는 가속도를 내며 빨리 가려 하다가, 거의다 도착했을때에는 스스로 속도를 줄임으로서, 결과적으로 최대한 빨리 도착하려고 하는 것을 확인할 수 있다.
그래프를 보면, 초록색의 Gen. 34는 처음에 반대 방향의 속도라는 핸디캡을 가지고 시작하지만 반대방향으로 가속도를 만들어 속도를 줄이다가 원하는 방향으로 속도를 얻었다.
반면 빨강색의 Gen. 1 은 동영상으로 볼때는 상당히 불안정적인 모습을 보여줬지만 그래프 상으로는 나름대로 거리에 따른 일정한 속도를 유지했던 것을 볼 수 있다.
사실, 예전 GP 를 했던 소스를 다 날려서(-_-;;) 예전에 블로그에 포스팅했던 데이터를 기준으로 Representation 을 작성했기 때문에, 그때 사용했던 정확한 상수들(예를들면 Delta Time)을 다시 조절해야했다. 그때와 같은 상수를 사용하지 않아서인지는 몰라도 최종 결과물(Gen. 34)이 완벽하게 제대로 작동을 하지는 않았다.
앞으로의 작업은.... 책에 있는, 개미 길찾기를 해볼지, 아니면 바로 물리적인 시뮬레이션을 해볼지 모르겠다. 궁극적으로는 생물체 동작 시뮬레이션 관련 프로그래밍[1]을 하는 것이기 때문에 간단한 지렁이를 해볼까 생각중이다. 그를 위해서는 일단 간단한 물리 엔진이 완성이 되야... -_-;;;; (먼산...)
뭐, 당분간은 다른 일들 때문에 몰입해서 하기는 힘들고 틈틈히 해보다가 좋은 결과가 나와서, GP를 좀 더 알릴 수 있는 계기가 됐으면 좋겠다.
일단, 완성이라고 생각했던 것을 막상 직접 돌려보니 절반의 완성이었다. 쩝....
GP에 대해서는 오랜만에 포스팅하는 것이라 다시 간단하게 설명해보면, GP 방법을 사용해서, 특정한 역할을 수행하는 함수(프로그래밍)을 만들어 내는 것이다. 이 경우는 초기 위치와 초기 속도가 주어졌을때 주어진 장소로 최대한 빨리 움직이는 것을 해야한다. 함수의 결과는 네모 박스의 가속도를 +10 혹은 -10로만 지정하는 제한된 함수이다.
여러개의 결과물 중에 두가지만 뽑아서 직접 결과를 확인할 수 있도록 해봤다.
단, 첫번째 것은 너무 느리기 때문에 10배속 한 것이다. 처음에 -30 의 위치에 0의 속도로 있으면서 서서히 목적지(파란점) 다가가지만, 가속도의 방향이 불안정하다는 것을 쉽게 확인할 수 있다.
반면 두번째 것은 1배속으로... 처음에는 목적지와 반대방향의 속도를 가지고 시작한다. 처음에는 가속도를 내며 빨리 가려 하다가, 거의다 도착했을때에는 스스로 속도를 줄임으로서, 결과적으로 최대한 빨리 도착하려고 하는 것을 확인할 수 있다.
| Generation |
초기 위치 |
초기 속도 | 총 걸리는 시간 |
| Gen. 1 | -30 | 0(정지) | 9.00 초 |
| Gen. 34 | 30 | 10(반대방향) | 4.92 초 |
그래프를 보면, 초록색의 Gen. 34는 처음에 반대 방향의 속도라는 핸디캡을 가지고 시작하지만 반대방향으로 가속도를 만들어 속도를 줄이다가 원하는 방향으로 속도를 얻었다.
반면 빨강색의 Gen. 1 은 동영상으로 볼때는 상당히 불안정적인 모습을 보여줬지만 그래프 상으로는 나름대로 거리에 따른 일정한 속도를 유지했던 것을 볼 수 있다.
사실, 예전 GP 를 했던 소스를 다 날려서(-_-;;) 예전에 블로그에 포스팅했던 데이터를 기준으로 Representation 을 작성했기 때문에, 그때 사용했던 정확한 상수들(예를들면 Delta Time)을 다시 조절해야했다. 그때와 같은 상수를 사용하지 않아서인지는 몰라도 최종 결과물(Gen. 34)이 완벽하게 제대로 작동을 하지는 않았다.
앞으로의 작업은.... 책에 있는, 개미 길찾기를 해볼지, 아니면 바로 물리적인 시뮬레이션을 해볼지 모르겠다. 궁극적으로는 생물체 동작 시뮬레이션 관련 프로그래밍[1]을 하는 것이기 때문에 간단한 지렁이를 해볼까 생각중이다. 그를 위해서는 일단 간단한 물리 엔진이 완성이 되야... -_-;;;; (먼산...)
뭐, 당분간은 다른 일들 때문에 몰입해서 하기는 힘들고 틈틈히 해보다가 좋은 결과가 나와서, GP를 좀 더 알릴 수 있는 계기가 됐으면 좋겠다.
- 현재 영화나 게임 등에도, 스크립트 프로그래밍이 사용된다. 이때 관절의 최대 각도라던가, 움직임에 대한 시뮬레이션을 프로그래밍식으로 하는 경우가 많다. 물론 그때 GP 를 사용하지는 않는다. 다만, 앞으로 사용할 수 있는 기회가 있다는 것이 포인트고, 전에도 언급했었지만 실제로 NaturalMotion 사의 가상 모션 캡쳐 프로그램 Endorphin 에서 이런 것을 사용했다. [본문으로]







536924
119
559





댓글을 달아 주세요