GP 의 해가 가지는 특성을 파악하기 위해 실험을 통해 대규모의 데이터를 수집하였다고 가정하자. 그리고 대부분의 해에서 나타나는 어떠한 특성이 발견 되었다면, 과연 여기서 대부분의 해는 반드시 그 어떤 특성을 갖게 되는 것일까?

GA, GP 의 조기수렴이 해의 다양성에 악영향을 끼치고, 좋은 결과로 수렴하는 것을 방해한다고 했을 때, 조기수렴을 막으면 반드시 해가 다양성을 폭넓게 가지면서, 좋은 결과로 수렴할 것인가?

어떠한 명제를 가정했을 때, 그 역이 반드시 참일것이라는 보장 같은 것은 없다. 결국 우리가 일반적으로 데이터를 수집하여 하는 일은 대부분이 그러한 특성을 보인다는 것에서 끝나는 것인데, 이것의 역을 증명해낼 좋은 방법은 없을것인가?

몇년째 계속 고민해보지만, GA, GP 쪽에서는 이를 어떤 수로 증명할 것인지 딱히 머리속에 떠오르는 것이 없다. 실험을 통해 명제 자체가 참임을 증명해낼 수는 있지만, 그 명제를 토대로 알고리즘을 구성하고 타당성을 갖기 위해서는 반드시 그 명제의 역이 참임을 증명해야 하는데 아직까지는 부족한게 많은지 딱히 좋은 방법이 떠오르지 않는다.

하지만 이 부분이 해결되지 않는 한, 결국 어떠한 알고리즘을 만든다 하더라도 이것이 타당성을 갖기는 어려울 것이 분명하기 때문에 앞으로도 계속 고민할 것 같다. 뭔가 좋은 방법은 없는 것일까?

병렬처리는 결국 필수 불가결한 요소가 될 것임에는 분명하다. 확실히 단일 코어 발전 대비 성능 비율이 언젠가부터 매우 낮아진다는 것을 확인할 수 있다. CPU 를 듀얼 혹은 쿼드로 쓰는 것도 꽤 매리트가 있지만, 알고리즘을 연구하는 사람으로써 그런 한 두개의 병렬을 가지고 큰 효과를 보기에는 그 한계가 명확하다.

결국 요래저래 살펴보다가 또다시 GPU 쪽으로 눈이 돌아가게 되었는데, 그 당시에는 그렇게 어렵게만 느껴지던 CUDA 라는 것이 그렇게 어려운 녀석이 아니었다.

일련의 흐름에 따라서 프로그래밍을 하면 되는데,

1. 디바이스의 초기화
2. GPU 상의 메모리 할당 ( cudaMalloc )
3. CPU 상에서 GPU 상으로 처리할 내용을 복사 ( cudaMemcpy )
4. 커널을 수행함으로써 원하는 연산 처리 ( function <<< blocks, threads, sharedmem >>> ( parameters ) )
5. GPU 상에서 처리된 내용을 CPU 상으로 재 이동 ( cudaMemcpy )
6. 할당했었던 메모리를 모두 해제 ( cudaFree )
7. 디바이스 종료

이러한 큰 흐름을 순서로 움직이면 된다.
얼마나 쉬운가?

마치 포인터를 처음 볼때의 그런 느낌이었다. 어라? 별거 아니네?
그런데 이놈도 포인터랑 똑같은 놈이더라. 결국 잘 쓰려고 하다보니 메모리 구조에 대한 것을 다시 확인해야 했다. CUDA 의 처리는 Block 단위의 다수의 스레드를 어떻게 관리하느냐, 그리고 이들이 처리될 때의 Shared Memory 를 잘 관리해 줘야 올바른 결과를 얻을 수 있고, 획기적인 병렬처리의 성능을 만끽할 수 있다는 것. 게다가 망할 포인터보다도 하나 더 많은 요소가 있었으니, Block 과 Thread 의 숫자를 결정해주는 것이다.

하지만 확실한 건 포인터와 마찬가지로 이놈도 쉽게 생각하면 될 것 같은 기분이 든다.
다음 번엔 SGA 에 Evaluation 과정을 CUDA 를 이용해 처리한 소스나 올려봐야 겠다. 아직 Thread 동기화에 문제가 있는지, 자꾸 마지막 변수값만 들어가는 현상이 발생하던데 요고만 해결하고 나서 하나씩 또 정리해봐야겠다.

#include <windows.h>

#include <math.h>

   

void wait(double sec)

{

unsigned int msec;

   

assert(sec > 0);

msec = (unsigned int) floor(sec * 1e3);

assert(msec >= 10);

Sleep(msec);

}

 

리눅스용 프로그램을 윈도우로 변환하다가 가끔씩 애를 먹었던 부분인데 ( 나만 그런지 모르겠지만…;;

윈도우에서 Sleep 함수는 저런 형태로 사용할 수 있다.

 

리눅스에서는

 

#include <unistd.h>

#include <math.h>

   

void wait(double sec)

{

unsigned int msec;

   

assert(sec > 0);

msec = (unsigned int) floor(sec * 1e3);

assert(msec >= 10);

usleep(msec);

}

 

단지 usleep (리눅스) -> Sleep (윈도우) 로 변경했을 뿐…

서로 호환 안되는 부분은 역시 짜증난다.

 

별 것 아니지만 자꾸 까먹는 관계로 정리를 =ㅠ=

로보틱스 시장을 선점하기 위한 각계의 노력이 이어지고 있는 가운데, 두각을 나타내는 프레임워크들이 속속 나타나고 있다.

 

대표적 로봇 프레임워크

MSRDS, OROCOS, RTC, OPRoS

 

MSRDS 는 아직 전폭적인 지원을 받으며 개발되고 있는 상태는 아닌것으로 보임

가장 큰 특징은 .NET Framework, Service Oriented Architecture, 즉 DSS, CCR 로 구분되는 Run-time 환경

 

ERSP - Evolution Robotics 사에 의해 모바일 로봇을 개발하기 위한 소프트웨어 플랫폼(상용임)

http://www.evolution.com/products/ersp/

 

OROCOS - 유럽 프로젝트, Component based Robot Software

http://www.orocos.org/

   

RT Middleware - 일본의 AIST 에서 주력

http://www.is.aist.go.jp/rt/OpenRTM-aist/html-en/FrontPage.html

   

OPRoS - 국내에서 개발중, 기존의 로봇소프트웨어 플랫폼에 비해서 매우 방대함

로봇, 내 외부를 모두 포괄하는 프레임워크

Thin Client Robot

Roboid Studio, OSGiFramework 기반 Action 이 Design 되고, Device map Protocol 을 통해 로봇에 전달

대부분은 로봇 내부에 집중되어 있는 것에 반해 서버, 평가기술이나 SE 도구 등 차이가 있음

아직 OPRoS 는 그 실체가 완전히 드러나지 않았는데, 8월 중에 공개한다는 이야기가 있음

 

사실 현재의 로보틱스 프레임워크들은 후에 열릴 로봇시장을 대비한 것들이지만, 과연 이것들이 로봇시장의 폭발력을 가져다 줄까?

내 생각에는 로봇을 도입함으로써 획기적으로 개선이 되는 것이 없다면, 시장의 폭발적 증가 같은 건 없을 것 같다.

이번에 이매진컵 임베디드 부분에서
U-Boat : Automated Navigation Boat for Water Inspection and Analysis
라는 작품으로 2차 라운드까지 진출한 U-Boat 팀의 메인 프로그래머랍니다 -_-
(대체 뭐임 이 병맛 소개는 ㄲㄲ)

네.. 저희 작품 그래도 한국대표 선발전에서 2위 했어요 ㅜㅜ (감격임 정말 -_-)

이매진컵이라는 대회를 처음 알게된 것이 작년 12월이었군요.
그때부터 참가를 한번 해볼까 망설이고 있었는데, 사실 작품의 아이디어가 안떠올라서 계속고민을 하다가 결국은 2월 초에 결정을 짓고 참가하게 되었습니다.

처음 1차 라운드 통과를 하게되어서 사실 긴가민가 하더군요.
통과는 할 수 있겠지라고 생각했지만, 워낙에 많은 학생들이 참여하는 대회라서 조금은 의심이 들었더랍니다.

어쨌든, 그렇게 1차 라운드를 통과하고 나서 E-BOX 가 왔는데... 이걸 할까말까 엄청나게 망설였거든요.
그 당시에 제가 하던일이 대규모 병렬처리용 유전 프로그래밍 프레임워크를 만들고 있던거랑 4족 보행 로봇의 제어기법인 GP 기반의 4족 보행 로봇 걸음새 생성 기법 과 CPG 의 실제 적용 및 비교라는 테마로 연구를 하고 있었기 때문입니다.

결국 대규모 병럴처리쪽을 잠시 접는쪽으로 가닥을 잡고, 4족 보행 로봇 쪽은 지속적으로 연구를 해가면서 동시에 정보처리기사 시험에 합격하는 바람에 실기 준비.... 후덜덜...

그리하여 2월부터 시작된 충분한 휴식없는 하루하루가 시작되게 되었습니다.

네... 그렇게 시간은 마구마구 가더군요.
그리고 2 라운드 진출자들끼리의 워크샵이 있었습니다.

사용자 삽입 이미지

(*) 한국 MS 의 서진호 차장님 블로그 갔다가 제가 발표하던 사진이 있더군요 -_- 앞에있는 저게 접니다;

이날은 정말 많이 놀랐습니다.
이번에 한국대표로 나가게된 Wafree (? 스펠이 맞는지 잘...) 팀에서 곤충을 식량으로 한 그런 계획에 대해 이야기를 들었을 때, 솔직히 좀 충격이었습니다. 만년 공돌이로 지내다보니 사실 이런 발상의 전환이 전혀 되지 않았던 탓일까요?
아이디어 자체가 워낙에 참신해서 도저히 할말이 없었습니다. 게다가 몇년씩 꾸준히 연구를 해오고 있다는 그... 신윤지님인가요.(제가 기억력이 워낙 안좋습니다.) 정말 많이 놀랐습니다. 지금와서 써놓지만 나중에 선발전에서 나이가 믿기지 않는다고 했던건 난 그나이때 뭘 생각했지 라는 생각이 들었기 때문이랍니다 -_-

그리고 휠체어에 RF기반의 안내 시스템에 대해 설명했던 M2I 팀이었나요? 사실 그당시에 조금 아쉬웠던건 휠체어 자체도 완전히 자동주행을 하는 시스템은 어떨까 라는 생각이었습니다. 그러나 아이디어 자체는 훌륭하다고 생각합니다. 분명 그런 부분이 도움이 될 수는 있다고 생각하거든요.

또, 24시간 건강 감시라고 해야하나 이런 것을 구상한 Rising Edge 팀도 아이디어는 참 좋았습니다. 문제는 실현 가능성과 소형화라고 생각했습니다만, 최대한 소형화하여 사실 몸에 칩으로 내장할 수 있다면 기계화에 대한 부담감이 존재하지만 귀찮음과 실시간 감시등 여러모로 좋은 아이디어가 아닐까 생각했습니다.

마지막으로 카풀 시스템을 보조해줘야 한다고 하나... Here Rose Season 2 팀의 발상도 놀라웠습니다. 그런 생각은 해본적이 없었거든요. 그런데 발상은 놀라웠지만, 사실 그자리에서도 그렇고 지금도 그렇고 카풀 시스템 자체가 혜택이 주어진다고 활성화 될 것인가에 대한게 계속 머리속에서 빙글빙글 맴돌고 있습니다.

저 외의 다른 여러 학생들은 어떤 생각을 가지고 있으며, 어떠한 발상의 전환들이 있는지 그런것들에 대해서 보게 된 것만으로도 사실 엄청난 충격이라고 할 수 있었습니다. 궁금하기도 했고, 기술 구현적인 측면에 대해서만 공부를 하다가 이런 아이디어들을 보니 정말이지 이 세상은 역시 넓다라고 생각했습니다.

제가 뭐 그렇게 사교성이 뛰어난 인간이 아니라 친하게 지내지는 못했지만 그래도 그때 봤었던 분들을 어딘가에서는 다시 뵙겠죠;;

워크샵때 여러모로 기술적인 하자나 이런것들에 대해 지적을 좀 받기도했고, 검토할 사항을 무지무지하게 늘려주셔서 고맙기도 했고... -_- 덕분에 2주라는 시간을 추가적인 검증에 투자해버렸습니다...;;;

그렇게 워크샵이 끝나고나서 다시 연구실로 돌아와서 좀 고민을 많이 했습니다.
과연 어떻게 진행하는 것이 이 짧은 시간안에 프로젝트의 프로토타입을 완성시킬 수 있을것인가?

기존부터 해오던 팀이 아니라면, 사실 이매진컵의 2차 대회의 주어진 시간이란 무지하게 짧은 시간입니다. 하나의 프로젝트를 1개월 반이 좀 넘는 시간안에 완성해야 하는 것이지요. 혹시라도 다음 이매진컵을 준비하시는 분들이 계신다면, 미리미리 준비하시는게 좋지 않을까 생각되네요.

사실 저희에게는 이 문제보다 더 큰 문제가 있었습니다. "자금" 이죠.
만드는 건 사실 문제가 아니었습니다. 문제는 자금이었습니다. 하고자 하는 일이 워낙 스케일이 크다보니 자금이 들어가는게 장난이 아닌데 이를 어떻게 수급할지가 최대 고민이었지요. 이 부분에서 역시 교수님께서 많이 도와주셨습니다. 물론 저희에 지원을 해주신 NT Research 분들도 정말정말 감사드립니다.

그런데도 추가적으로 또 하나의 문제가 생겼습니다. 수질측정용 센서들의 가격이었습니다... 이 부분은 솔직히 이렇게 비싸리라고 예상할 수 없었거든요. 결국 최소비용으로 프로토타입을 만들어야하니 pH Sensor 를 선택하였고, 이에 대한 당위성을 증명하기 위해서 수많은 자료를 또 찾아 해맸습니다. 다행히도 pH 자체가 완전한 수질 측정의 척도는 될 수 없지만, 상대적 척도로는 사용 가능하다라는 자료를 찾게되었습니다.

사용자 삽입 이미지OLYMPUS IMAGING CORP. | SP560UZ | Creative program (biased toward depth of field) | Pattern | 1/20sec | F/2.8 | 0.00 EV | 4.7mm | ISO-125 | Off Compulsory | 2009:05:16 15:59:21

(*) 결국 구매하게된 EGA133 무보충형 전극과 phidgets 사의 phSensor Interface 보드 입니다. Windows CE 6.0 드라이버 및 .NET Framework 용 Library 들을 제공해줘서 쉽게 작업할 수 있었습니다.

여차저차 해서 결국 RC 보트를 구매하고 보트의 개조에 돌입하게 되었습니다. 당초 스케쥴은 4월에 모든 제작을 끝내는 것 이었습니다. 그러나 자금 문제때문에 헤메이다 결국 5월 3일 정도가 넘어서야 모든 작업이 시작되었습니다.

이때부터 지옥이 좀 시작되었습니다. 아주 그냥 지옥도 아니고 생지옥 -_-;;;;;;;;
당초 한달을 기획했던걸 고작 2주 정도 안에 끝내야 했으니 말입니다... 물론 설계는 이미 끝나있었습니다. 그리고 MSRDS Compact Framework 를 통한 작업같은 것도 다 테스트 되었었죠. 해보고나니 워낙 딜레이가 커서 파기 해버렸지만... 어쨌든, 가장 시간이 많이 드는 작업은 이미 끝난 상태라서 구현만 남아있었는데, 이 구현이라는게 구현 중간에 나타나는 오류들을 생각하면 얼마나 시간이 걸릴지 예측할 수 없었던 상태였습니다.

참 다행히도 웹부분이 현재도 조금 불완전하지만, 보여주기 용으로는 충분히 모든 기능이 구현 되었습니다. 그리하여 웹 -> 임베디드 -> 웹과 임베디드시스템의 링크 -> 데이터 저장 및 전달과 같은 식으로 작업 순서가 진행 되었습니다.

이와 동시에 하드웨어의 제작도 들어갔습니다. 이 부분은 선배님들이 많이 수고해주셨습니다. 회로쪽이나 하드웨어쪽은 손이 좀 많이 가는 작업에다가 당초 예상대로 안될경우 무슨일이 생길지 모르기 때문에 상당히 애를 먹었습니다.

여차저차해서 결국 발표를 2주 앞두고, 프로토타입이 완성되고 제어 알고리즘의 검증을 위해 서경대학교 한림관 앞 코딱지 만한 폭포에서 테스트를 했지만, GPS 라는놈이 가지는 오차가 그리 만만한놈이 아니더군요;;
그정도 폭가지고는 택도 없는... 그런 오차라서 왕복테스트는 무리였습니다. 회전을 할 반경이 마련되지 않은탓에 직선거리에 대해서 편도로 몇일이나 테스트하고, 결국 한강으로 나갔습니다.

사용자 삽입 이미지OLYMPUS IMAGING CORP. | SP560UZ | Creative program (biased toward depth of field) | Pattern | 1/3sec | F/3.5 | 0.00 EV | 9.8mm | ISO-125 | Off Compulsory | 2009:05:18 19:10:52

  (*) 그렇게 만들어진 U-Boat Prototype 입니다. 참 조촐하지만 그래도 나름 깔끔하게 정리해두었습니다;

네... 그날의 한강은 지옥이었습니다. 비는 뭐가그렇게 많이 왔는지 물은 넘실대고 칠흙같은 어둠속에서 배의 실체를 알아보는건 참으로 어려웠습니다 -_-... 파도는 지가 강이라는 사실을 망각한것처럼 넘실대고 있고;;

그래도 일단 배니까 띄우자 라는 마음으로 띄웠습니다. 다행입니다. 배는 무사합니다. 그때 느꼈습니다. RC 보트가 그리 만만하게 전복되는 놈이 아니구나 -_-;;;;  그리고 그날은 그렇게 이런 환경도 버틸수 있다는거에 만족하며 돌아왔습니다. 제어는 안되더군요. 물살이 너무 쌘데 모터힘이 너무 약하다보니까 될리가 있나요?

그리고 며칠뒤 다른 장소를 물색해서 찾은 곳이 중랑천이었습니다. 사실 건대호수가 최적이죠. 그런데 역시 거긴 출입불가 상태라;; 결국 중랑천으로 향해서 모든 준비를 끝내고 그렇게 배를 띄웠습니다.

와우... 대성공입니다.

사용자 삽입 이미지

(*) 그렇게 중랑천의 수질측정을 하겠다고 헤집던 U-Boat 의 프로토타입 입니다 -_-

그런데 문제가 생겼죠. 혹시나 배를 잃어버릴지 몰라 묶어놓았던 낚시줄이.... 중간에 나무에 걸려버리는 바람에... 배가 갑자기 전진을 못하게 되었습니다 -_-;;;;;; 그래서 배를 되찾기 위해.... 저는 다리를 걷고 중랑천 한가운데에서 배를 건지고자 1시간정도 씨름한듯...

사용자 삽입 이미지

(*) 그렇게 대치 상태에서 멍하니 바라보던 저 입니다. -_-... 제기랄 -_-;;;

흑흑 -_- 그러나 성공이 더 감격 ^^
그렇게 테스트도 완료되고 무사히 수질측정도 잘 되었고, 결과물도 잘 남게 되었습니다.

그리고 또다시 며칠간 밤샘작업을 하며, 2차 라운드 최종 레포트 작업에 돌입하게되었습니다. 난 영어가 싫습니다 -_- 그리고 결국에는 한국대표선발전의 그날까지 다가오게 되었습니다.

2차라운드때 봤었던 분들이 다시 보이고, 어느덧 발표더군요. 그동안 준비했던것들 생각하면서 정말 열심히 발표했습니다. 전 원래 발표같은건 꽤 즐기는 편이라 재미있게 잘 즐겨줬습니다 -_-;;; (죄송합니다. 정신상태가 좀 이상해서...)

그런데 정말 다들 만들어 오셨더군요. 조금 어렵지 않을까 싶었던 분들도 완성하셨고, 결국 그렇게 다들 다시 모이게 되었습니다. 상상하던 그것들이 진짜 만들어져서 눈앞에 있다는 사실이 정말 놀라웠습니다. 그리고 이분들이 나와 경쟁하게될 분들이라는 사실이 뿌듯했습니다.

그렇게 발표가 진행되고, 결국 저희는 1위를 하지는 못했습니다. 역시 처음에 가장 강력하다고 생각했던 Wafree 팀이 1위를 하셨습니다. 사실 이 당시에는 축하해드리고 싶은 기분보다는 뭔가 아쉽다는 안타까움이 더 컸기때문에 축하한다고 말은 해 드렸던거 같은데, 참 뭔가 많이 아쉽더라구요. 뭐... 패자의 그런거니 이해해주심이;; 그러나, 확실히 그 아이디어는 정말 대단하다고 생각합니다. 좀 늦었지만 다시 축하드린다고 말씀드리고 싶네요.

이래저래 상당히 오랜 기간 진행되었던 대회였습니다. 덕분에 즐거웠던 것도 많고 힘들었던 것도 무지 많았지만, 무사히 프로젝트를 진행할 수 있었다는 것에 놀라웠고, 저희들이 가진 어떤 가능성에 대해 다시한번 생각해볼 수 있는 정말 좋은 기회였다고 생각합니다. 거기에 수많은 학생들이 이렇게 경쟁하고 있다는 사실이 긴장감을 더욱 주기도 했구요.

다음 대회에 참가할지는 사실 잘 모르겠습니다. 제가 뭘 하고 있을지 아직 예측할수가 없기 때문에 정확히 말씀드릴 수는 없지만, 그래도 만약 이런 기회가 다시 또 온다면 그때는 또다시 뭔가 새로운 도전을 하고 있지 않을까 싶네요.

다른 많은 분들도 이런 대회 많이 참가하셔서 재미있는 시간 보내셨으면 합니다.

무지 긴 후기였습니다 ㅡㅠㅡ
대한민국 만세;; Wafree 팀은 꼭 세계 1위 먹으세요 :)
http://www.shabdar.org/google-maps-user-control-for-ASP-Net-part1.html

http://www.codeproject.com/KB/custom-controls/LatLaysFlat-Part1.aspx

개인적으로는 위의 것을 더 추천한다.
훨씬 사용하기가 간단하고 수월하다는 이유 하나만으로.
아래쪽의 것은 더 체계적으로 잘 되어 있는 듯 싶지만, 사실 좀 복잡하다.

음...
이걸 찾아서 사용하게 된 이유라면
C# 이 왠지 손에 익숙해지기 시작했고,
작업속도가 C#을 쓰는것과 JAVA 를 쓰는것 중에 C# 을 쓰는것이 월등히 빨라졌기 때문이랄까...
거기에 Dreamspark 덕분에 공짜로 IIS 를 맘놓고 사용하고 있으니...

혹시라도 구글맵을 ASP.NET 으로 제어하기를 원하신다면, 위의 링크들을 따라가시면 도움이 될듯.

P.S. 아차차... 이 내용이 중요한데 빠졌군요. 위의 것의 목적은 말그대로 구글맵 자체의 제어고, 아래것의 목적은 Display 에 해당 하는 부분들 입니다. 즉, 동적으로 입력을 받아 이를 제어하기 위해서는 천상 위의 것이 낫습죠;; 아래 것은 또 수정해야하니;;
페도라 10 에서 네트워크 관리자에서 계속 DNS 재설정하는 현상이 발생하는분은 요렇게 해보시면 아마 해결될 것 입니다.

/etc/sysconfig/network-scripts/ifcfg-eth0
혹은 ifcfg-eth1
또는 ifcfg-개인이 지정한 프로파일 이름

위의 파일을 여시면

# Please read /usr/share/doc/initscripts-*/sysconfig.txt
# for the documentation of these parameters.
GATEWAY=XXX.XXX.XXX.XXX
TYPE=Ethernet
DEVICE=eth1
HWADDR=XX:XX:XX:XX:XX:XX
BOOTPROTO=none
NETMASK=255.255.255.0
IPADDR=XXX.XXX.XXX.XXX
ONBOOT=yes
USERCTL=no
PEERDNS=yes
IPV6INIT=no
NM_CONTROLLED=yes

이런식으로 구성이 되어 있을것 입니다.
여기다가 아래와같이 DNS 구성을 추가하신 후에

DNS1=168.126.63.1
DNS2=168.126.63.2
(*) 주소는 평상시에 쓰시는 DNS 를 입력해주시면 됩니다.

저장 하시고 터미널에서

service network restart

그 후부터는 DNS 재지정없이 잘 될 거예요. :)

무...물론 안될수도 있습니다 -_-
저의 경우는 이렇게 해결 했습니다 ^^;

1. 개요

병렬처리 시스템은 최근에 가장 주목 받고 있는 컴퓨팅 성능 향상 기술 중에 하나입니다. 물론 과거에도 병렬처리 시스템이 주목 받아 왔지만, 그 당시에는 CPU 의 업그레이드 만으로도 50%, 100% 이상의 성능향상을 이룰 수 있었기에 지금보다는 적은 관심을 보였었습니다. 그러나 현재의 CPU 가 가진 한계에 거의 다다름에 따라, 성능 개선의 기법으로 병렬처리 기법들이 주목을 받고 있습니다. 즉, 하드웨어적 한계를 소프트웨어 적인 기법으로서 넘어서려고 한다고 표현할 수 있겠습니다.

이 병럴처리 시스템은 크게 내부, 외부의 두 가지 요소로서 존재한다고 볼 수 있겠습니다. 내부 요소로서는 CPU 의 멀티 코어화, GPU 의 발전 등을 들 수 있겠고, 외부적으로는 대규모 네트워크로 구성된 컴퓨팅 환경을 제공하는 것이 되겠습니다. 대표적으로는 근래에 각광을 받고 있는 클라우드 컴퓨팅이 있겠습니다.

진화연산은 기존의 알고리즘 들에 비해 엄청난 반복작업이 필요하며, 거대한 리소스를 갖출수록 더 좋은 효과를 가질 수 있는 특징이 있습니다. 이 거대한 리소스에 대한 것은 반박의 여지가 충분히 존재하며, 각 문제에 따른 특화된 알고리즘의 적용으로 이를 개선할 수 있습니다만, 그렇다고 해도 아주 오랜시간에 걸쳐 반복작업이 이루어져야 그에 따른 최적값을 기대해 볼 수 있다는 것은 부정할 수 없는 사실입니다.


2. 진화 연산에 적용된 병렬처리기법
2.1 다수의 CPU 사용

초창기 유전프로그래밍(이하 GP)의 창시자라고 언급되는 John. R. Koza 의 경우에는 천 대의 컴퓨터를 하나의 클러스터로 활용해 GP를 수행하였으며, 이를 통해 과거에 발표되었던 특허들을 그대로 GP의 결과물로서 만들어내는 결과를 보여주었습니다.[1] (첫 페이지의 팔짱을 끼고 있는 그의 모습 뒤로 펼쳐진 것들이 수많은 컴퓨터의 클러스터입니다.)

그러나 일반적인 연구자들이 이러한 리소스를 활용할만한 능력을 갖추기는 어려웠기 때문에 사실상 대규모 클러스터링을 활용한 연구는 Koza 의 이후로 거의 나타나지 않고 있었습니다. 소수의 연구자들에 의해 소규모의 분산 처리 시스템[2]이나 여러 개의 CPU 를 사용한 연구[3]는 이루어지고 있었습니다. ([3] 논문은 가상의 병렬 처리 머신을 통해 데이터를 주고받는 것에 대한 논문입니다만, 저 논문의 결과물로서 lil-gp 의 병렬화된 형태를 언급하는 데 이것은 다중의 CPU 를 사용하는 병렬 처리 기법이 사용되어 있습니다.)


2.2 GPU

시간이 흐른 뒤, nVidia 에서 GPU 가 나오게 되었습니다. 이것은 벡터 연산에 특화되어 있고, CPU 에 비해 압도적인 처리성능을 보여주기에 수 많은 알고리즘이 이를 해당 알고리즘에 적용시키기 시작하였습니다. 물론 진화연산에서도 절대 예외일 수는 없었습니다.

대표적인 논문으로 몇가지를 언급하자면, 우선은 진화 연산을 타겟으로 삼은 것은 아니지만, GPGPU(General-Purpose computation on Graphics Processing Units) 의 개념을 활용해 알고리즘에 적용하는 것이 좋겠다고 제안한 논문이 있습니다. [4] 그리고 실제 GPU 를 사용해서 GP를 수행하고, 이에대한 성능 비교를 수행한 논문이 발표되게 되었습니다. [5,6,7]

일반적으로 생각하기에 GPU 를 통해 병렬적으로 개체의 해석을 수행하게 되면 CPU 만을 사용하는 현 GP 에 비해서 엄청난 속도 향상을 기대 하지만, 실제로는 모든 문제에 대해서 그렇지는 않았다는 내용이 [6] 논문에서 나타나고 있습니다. 그러나 위의 논문에서 사용된 컴퓨터의 사양은 T2400 (1.83 Ghz), 1.5GB ram, GeForce 7300 GO with 512 RAM 으로서, 노트북 컴퓨터라고 보시면 됩니다. 즉, 일반적으로 사용하는 GPU 에 비해서는 그다지 좋은 성능을 보여주는 것은 아니었던 것입니다.

그리고 [7] 논문에서는 GPU 에 최적화된 GP 연산 기법을 소개하고, SIMD 처리 형태에 알맞은 데이터 처리 방식을 사용하여 더 좋은 효율을 보여준다는 것을 나타내고 있습니다. 또한, 이 논문에서 더 주목해 볼 수 있는 것은 Geforce 8800 GTX 라는 고사양의 GPU를 사용했다는 것과 이를 통해 CPU 의 오버헤드가 0.1%에 근접한다는 내용, 그리고 기존에 해결하는데 매우 오랜 시간이 걸렸던 거대한 형태의 Regression 문제를 해결했다는 것에 있습니다. 1024 x 1024 x 1000 의 크기의 문제를 200번 수행하는데 6시간 46분 17초가 걸렸다는 건, 기존에 우리가 처리할 엄두도 못 내던 거대한 크기의 문제들을 GPU 를 사용하여 처리한다면 더 큰 효율과 빠른 결과를 얻을 수 있다는 것을 의미합니다.

[8] 논문에 이르러서는 Xbox360 이라는 이 종의 하드웨어를 통해 GP를 수행하게 됩니다. 컴퓨터의 GPU 를 통한 결과와 Xbox 360 의 GPU 를 통한 결과를 서로 비교하는 내용이 있는데, 특이할 만한 점은 C# 과 XNA Framework 를 통해 구현된 동일한 프로그램(GP)을 Xbox360 과 PC 에서 변환 없이 수행할 수 있었다는 것, 그리고 결국 성능은 PC 가 더 좋았다는 것이 되겠습니다.


2.3 기타 웹이나 네트워크 기반의 진화연산 기법

이렇듯 GPU 의 등장과 함께 진화 알고리즘은 매우 빠른 병렬처리 알고리즘을 통한 복잡한 문제의 해결, 그리고 GPU 에 걸맞는 형태의 알고리즘의 변화 등이 이루어져 왔습니다. 그러나 사실 GPU 를 통한 GP 의 발전은 아직은 한계가 있습니다. 가장 큰 한계점이라면 단순 Regression 문제나 디지털 논리회로를 벗어나는 문제에 대해서는 아직 그 위에서 해석할 방법이 없다는 것 입니다. 즉, 단순한 문제지만 거대한 데이터 셋을 갖는 문제에 대해서는 그 효율을 극대화 하여 이용할 수 있지만, 복잡한 시뮬레이션의 경우에는 아직 GPU 에서 그것을 수행하기에는 많은 무리가 따르게 됩니다.

GPU 의 진화 연산보다는 살짝 앞선 시기에 웹을 통한 진화 연산의 수행기법들에 대한 연구가 이루어 졌습니다. [9] 논문의 경우에는 웹을 통해 사람이 어떠한 평가를 내리고, 이를 서버에서 모아서 진화연산을 수행하는 형태에 대한 연구기법에 대해 논하고 있습니다. 이는 기계로 평가를 내리기 어려운 적합도 함수, 즉 좋은 음악이나 색의 조합 등 인간의 주관이 개입되어야 하는 문제에 대해서도 진화연산의 수행이 가능하다는 것을 보여준 사례가 되겠습니다.

2007년에 발표된 [10] 논문의 경우에는 XML 과 Ajax 를 통해 웹브라우저로 데이터를 서로 주고받고, 적합도 함수를 평가하며 해결하는 시스템을 구축하였습니다. 이 논문에서 아쉬운 점은 비교할만한 대상이 없었기 때문에, 해당 기법이 기존의 기법에 비해 어느 정도 효율성을 갖는지가 나타나지 않았고, 매우 빠른 연산을 보여주었다는 시간만을 언급하고 있다는 것이었습니다.

그리고 ECJ Framework[11] 에서는 TCP/IP 상의 Asynchronous Island Model 을 지원함에 따라 기존의 진화 연산 문제를 대규모 네트워크를 통한 처리 형태를 쉽게 사용해 볼 수 있습니다. 이미 모든 구현이 이루어져 있기 때문에 약간의 파라미터 수정만 거치면 바로 네트워크를 통한 진화연산 기법의 연구가 가능하다는 장점이 있습니다. 관심 있으신 분은 한번쯤 해보시면 좋을 것 같습니다.


3. 정리

이보다도 이른 시기에 네트워크를 통한 데이터 교환을 통해 진화 연산의 병렬화의 효율에 대해 논하는 것들이 많이 있었지만, 사실상 GPU 와 같이 핵심 테마로서 자리를 잡을 만큼의 파급력을 갖출 수 없었습니다. 이는 어쩌면 진화 연산 자체를 병렬처리로 수행한다는 것은 하나의 연구테마로 갖추기가 어려운 것이었을 수도 있고, 기존의 방법들에 비해 획기적인 성능을 보여주는 사례가 없었기 때문일 수도 있습니다. 혹은 고도의 시뮬레이터를 통한 시뮬레이션을 필요로 하는 그런 문제가 정의되지 않았기 때문일 수도 있습니다.

진화연산에서는 알고리즘 자체가 적은 수행 횟수를 통해 더 개선된 성능을 보여주는 것은 여전히 중요한 테마입니다. 단위 시간에 대해 더 효율적인 공간의 탐색을 할 수 있다면, 성능 개선을 위한 가장 훌륭한 접근이 될 수 있겠습니다. 거기에 같은 단위 시간에 대해 두 배 아니 열 배 이상의 수행이 가능하다면 더 좋은 성능을 보여주기 위한 가장 좋은 해결책이 아닐까 생각이 듭니다. 물론 이렇게 말하게 되면, 병렬처리 자체는 기존의 알고리즘의 개선을 위한 접근 방법들에 비해서는 중요도가 떨어져 보이는 것이 사실입니다. 그러나 이전에는 접근해 볼 수 없었던 100만개~1억개 이상의 개체의 진화나 이로 인해 나타나는 현상들은 기존의 알고리즘으로 접근하는 방식들과는 다를 것이라 생각되기 때문에, 진화 연산 자체의 병렬처리 시스템은 기존의 방식들과는 별도로 매우 중요한 테마가 되지 않을까 생각합니다.


4. 참고문헌

[1] John. R. Koza – http://www.genetic-programming.com/johnkoza.html

[2] F. S. Chong and W. B. Langdon. Java based distributed genetic programming on the internet. In W. Banzhaf, et al., editors, Proceedings of the Genetic and Evolutionary Computation Conference, volume 2, page 1229, Orlando, Florida, USA, 13-17 July 1999. Morgan Kaufmann. ISBN 1-55860-611-4.

[3] F. Fernandez, J. M. Sanchez, M. Tomassini, and J. A. Gomez. A parallel genetic programming tool based on PVM. In J. Dongarra, et al., editors, Recent Advances in Parallel Virtual Machine and Message Passing Interface, Proceedings of the 6th European PVM/MPI Users' Group Meeting, volume 1697 of Lecture Notes in Computer Science, pages 241-248, Barcelona, Spain, September 1999. Springer-Verlag.

[4] J. D. Owens, D. Luebke, N. Govindaraju, M. Harris, J. Kruger, A. E. Lefohn, and T. J. Purcell. A survey of general-purpose computation on graphics hardware. Computer Graphics Forum, 26(1):80-113, March 2007.

[5] D. M. Chitty. A data parallel approach to genetic programming using programmable graphics hardware. In D. Thierens, et al., editors, GECCO '07: Proceedings of the 9th annual conference on Genetic and evolutionary computation, volume 2, pages 1566-1573, London, 7-11 July 2007. ACM Press.

[6] S. Harding and W. Banzhaf. Fast genetic programming on GPUs. In M. Ebner, et al., editors, Proceedings of the 10th European Conference on Genetic Programming, volume 4445 of Lecture Notes in Computer Science, pages 90-101, Valencia, Spain, 11 - 13 April 2007. Springer.

[7] W. B. Langdon and W. Banzhaf. A SIMD interpreter for genetic programming on GPU graphics cards. In EuroGP, LNCS, Naples, 26-28 March 2008. Springer.

[8] G. Wilson, W. Banzhaf, Linear Genetic Programming GPGPU on Microsoft’s Xbox 360, in Proceedings of 2008 IEEE World Congress on Computational Intelligence, Hong Kong, 2008.

[9] W. B. Langdon. Pfeiffer - A distributed open-ended evolutionary system. In B. Edmonds, et al., editors, AISB'05: Proceedings of the Joint Symposium on Socially Inspired Computing (METAS 2005), pages 7-13, University of Hertfordshire, Hatfield, UK, 12-15 April 2005a.

[10] J. Klein and L. Spector. Unwitting distributed genetic programming via asynchronous javascript and XML. In D. Thierens, et al., editors, GECCO '07: Proceedings of the 9th annual conference on Genetic and evolutionary computation, volume 2, pages 1628-1635, London, 7-11 July 2007.

[11] ECJ - http://cs.gmu.edu/~eclab/projects/ecj/

사랑하지 않으면 떠나라!사랑하지 않으면 떠나라! - 8점
차드 파울러 지음, 송우일 옮김/인사이트
1. 간략한 내용

IT 업계에 종사하는 자들에게 필자가 충고하는 내용들.

2. 책에 대한 개인적 의견

개발자로서 살아가야 한다는 것이 부담이 되는, 혹은 두려운 사람들이 보면 좋을 듯한 책. 이 책의 의도는 자신의 개발자로서의 가치를 높히는데 게으르지 말라는 말이지만, 보고나면 과연 저렇게 만능으로 살아가야만 하는 것일까? 라는 의문이 좀 생깁니다. 정말 완전한 만능 멀티플레이어가 아니고는 살아남지 못할거라는 느낌이랄까요?

개인적으로 이 책을 구매한다면 살짝 말리고 싶은 기분? 다른 조언류의 책이 그렇듯, 이 책 역시 교보문고나 대형 서점에서 한번쯤 읽어보고 ' 아 ~ 그렇 구나! ' 라고 느낀다면 그걸로 충분할 법한 책. 하지만 이 책의 뜻을 바이블로 삼고 싶으신 분이라면 반드시 "읽어보고" 사시길 권해드립니다.
 

MSRS(Microsoft Robotics Studio) 가 정식버전이 나오면서 MSRDS(Microsoft Robotics Developer Studio) 로 이름이 바뀌어 발매가 되었더군요. MSRS 이던 시절부터 이 툴 에 대한 기대는 매우 컸고, 소개나 이런 것들을 봤을때 정말 로봇 연구 분야에 있어서 최적의 툴이 아닌가 생각을 했었습니다.

CCR(Concurrency and Coordination Runtime) 과 DSS(Decentralized Software Services) 를 통해 비동기적 처리 방식에 실시간 반응이 가능하도록 하였고, VPL(Visual Programming Language) 이라는 Labview 와 같은 GUI 형태의 언어를 통해 누구나 쉽게 로봇을 제어할 수 있다는 것을 주로 장점으로 부각하였습니다. 여기에 서비스의 추가만 이루어지면 확장할 수 있다는 것, 사실적인 물리엔진 등등 많은 장점이 부각되고 있었습니다.

뭐... 참 좋은 툴임에는 틀림 없습니다만, 두가지 확실히 눈에 보이는 단점들이 있더군요. 각각에 대해서 한번 간단하게 정리해볼까 합니다.

1. 높은 사양

사용자 삽입 이미지

(*) 저도... 시뮬레이션을 돌리고 싶어요... ㅠㅠ


  MSRS 1.5 -> MSRDS 2008 로 넘어오면서 픽셀쉐이더와 버텍스쉐이더를 지원하는 GPU 를 시뮬레이션 환경에서 요구합니다. 물론 고화질의 시뮬레이션을 얻는다는것이 나쁘다는 건 아닙니다. 꼬우면 돈주고 사면되지 않느냐라고 해도 딱히 할말은 없죠. ( 모 게임에서는 돈이 없는건 죄가 아니다라고 하더군요;;; 아..아스트로레인저 잊지않겠다 -_- )
  그러나 MSRS 에서는 분명 소프트웨어적으로도 그런 시뮬레이션 환경을 지원 했었습니다. 그래서 상대적으로 사양이 낮은 PC 에서도 시뮬레이션을 수행해보는데 큰 무리가 없었습니다. 하지만 MSRDS 2008 로 넘어가면서 시뮬레이션 화면자체가 검은 상태로 아무것도 나타나질 않습니다. 제가 알기로는 현재 MSRDS2008 에서 GPU 의 내장 물리 엔진을 사용하는 것도 아닌걸로 알고있습니다만(이부분은 명확하지 않습니다.), 어떤 이유에서인지 반드시 GPU 의 엔진을 요구하고 있습니다. 덕분에 저는 다른 사양 좋은 컴퓨터에서 작업을 해야되지 말입니다.....
  그리고 이 높은 사양에 대한것은 하나 우려되는 점이 있습니다. CCR 과 DSS 를 통해 비중앙화된 전송형태와 동시성을 확보할 수 있다고 하는데, 이 역시 멀티코어 기반의 환경을 주로 테스트 벤치마크로서 보여주고 있습니다. 단일 코어 기반은 쓰지 말라는 것 같습니다. -_-

2. VPL

  VPL 은 초보자를 위한 언어이고, 간단한 테스트 정도를 위한 언어일 것이라고 생각됩니다. 이를 통해 복잡한 로직을 구현한다는 건 오히려 머리속에 방해가 될 것 같은 기분이 듭니다. 물론 Labview 를 통해 큰 규모의 프로그램을 봤을 때, VPL 도 그러한 가능성을 충분히 가지고 있다고 생각이 됩니다. 그러나 Labview 의 그것에 비해서 VPL 은 생각보다 많이 불편합니다.
  일단 깔끔해 보이기 위해서 큼직큼직한 서비스 아이콘을 만든건 좋습니다만, 오히려 좀 더 작고 가볍게 만들어서 쓸데없는 그래픽 효과가 나타나다가 다운먹는 현상을 좀 없애주는건 어떨까 생각합니다. 약간만 흔들어대도 공포의 오류메세지가 나타납니다만 이건 좀 아닌것 같죠? ( 제 PC 에서만 그런 건가 했는데, 그게 아니더군요 -_- )
  그리고 루프를 만드는 것이 상당히 지저분합니다. 아주아주 지저분합니다. 루프의 편의를 제공하기 위해 제공하는 서비스가 있긴 하지만, 그것을 이용한다 해도 지저분한 것은 어쩔 수 없죠. 물론, 그 더러운꼴 보기 싫다면 C#을 사용하면 됩니다.... MSRDS 하나를 사용하기 위해 새로운 언어를 쓰라. 이말입니다. ( 그렇다고 C#이 나쁘다는건 아닙니다. 써보니 편하고 좋습니다;; )

....

그냥 확실한 단점인 저 두가지만 지적해야겠습니다. 저 두가지만으로도 정이 뚝떨어지긴 합니다.( 특히 고사양은 정말... ㅜㅜ ) 물론 범용적으로 알려져 있는 로봇 시뮬레이터가 없고, VPL 로 몇가지 시뮬레이션 로봇을 돌려보시고 나면 정말 이렇게 쉬울수가! 라고 외치실 지도 모릅니다.

하지만... 뭔가 더 해보시려면 발버둥이 아니라 생난리를 쳐도 난감해지는 상황에 봉착하게 될것입니다. (아닐수도 있습니다 ^^) 어디까지나 현재로서는 말이죠. 기본 서비스를 제공하는 것 만으로는 고수준의 시뮬레이션을 하기는 어렵고, 실제 로봇과의 연동을 위해서는 일단 로봇이 필요하지만, 사실상 있다고 해도 이를 지원하는 로봇이 아직까지는 그렇게 다양하지는 않습니다.

C# 을 사용할 수 있고, 배울 수 있는 분이라면 MSRDS 가 가진 가능성은 무궁무진하다는 것만큼은 확실합니다. MSRDS 의 세부적인 서비스 개발에도 C#이 필요하고, VPL 로 할 수 없는 고수준 제어 역시 C#으로만 가능하기 때문이죠.

전체 내용을 정리를 하자면,
1. MSRDS 2008 로 업그레이드 되면서 사양이 무지하게 높아졌다. 그러므로 로우스펙의 유저는 그냥 VPL 로 덧셈뺄셈만 해보면 그걸로 끝, 시뮬레이션은 기대도 말고... ( Simulation Engine 이나 Simulation 관련 서비스 하나만 띄우시고 수행하셔보시면, 사용 가능 여부를 바로 알 수 있습니다. )
2. VPL 로 많은 것을 기대하지 마라. 그리고 VPL 로 복잡한 프로그래밍을 할 경우에 수시로 저장을 해야 중간에 다운먹어도 당황하지 않을 것이다.
3. MSRDS 2008 의 모든 기능을 사용해 보기 위해서는 C#을 배우세요. C#을 배우면 세상이 달라집니다.

네 이정도가 되겠습니다.

끝으로 몇가지 유용한 링크를 걸어놓도록 하겠습니다.

Microsoft 의 Express 버전의 도구들 다운받는 곳
http://www.microsoft.com/express/download/

드림스파크
http://www.microsoft.com/korea/msdn/dreamspark/ds_sub01.aspx

MSRDS(Microsoft Robotics Developer Studio)
http://msdn.microsoft.com/en-us/robotics/default.aspx

Naver MSRDS Korea 카페
http://cafe.naver.com/msrskorea/

(*) 개인 유저이시라면 가급적이면 불법복제품 쓰지 마시고, Express 버전을 사용하세요. 사실 개인이 Professional 버전 이상의 컴포넌트를 사용할일은 별로 없는것 같아요; Express 버전의 C# 으로도 여러가지 작업을 하는데 크게 부족함이 없었습니다. 대학생이시라면 드림스파크 링크로 가셔서 Professional 버전의 정품을 사용하시는것도 좋습니다 :)

촘스키 세상의 권력을 말하다 1촘스키 세상의 권력을 말하다 1 - 10점
노암 촘스키 지음, 강주헌 옮김/시대의창
- 간단한 내용 정리 -

전세계에서 일어나고 있는 수 많은 권력의 싸움과 투쟁, 그리고 그들이 하는 행동에 대한 치밀한 분석들이 담겨 있다. 주로 미국내에서 자유주의와 자본주의에 대한 이야기, 보수와 진보에 대한 이야기를 다루고 있다. 그러나 힘 있는 자들의 횡포와 없는 자들의 그것에 대응하는 자세, 힘 있는 자들의 얻어내려고 하는 것, 사회 보장 제도의 말도 안되는 모순 등 여러가지 사례와 그것에 대한 생각들이 있다.

- 책에 대한 생각 -

이 책이 담고있는 내용은 전 세계를 타겟으로 하고 있지만, 우리나라 사회 전반에 걸쳐 일어나고 있는 있는자와 없는자의 전쟁에 대해 이해하기에 부족함이 없다고 생각됩니다. 또한, 우리나라에서 권력을 가진자들이 어떠한 생각을 하고 있는지, 그들이 이야기하는 자유주의 시장경제나 무한 경쟁에 대한 것들이 사실 자신들의 배를 불리기 위한 허울뿐인 소리에 불과하다는 것을 이해할 수 있다랄까요?

가장 기억에 남는 내용은 언론이 결국 힘있는 자들을 보호하는데 집중할 수 밖에 없는 이유에 대한 것들인데, 이는 우리나라의 조중동과 같은 보수 언론들이 지금 무슨 작태를 부리고 있는지에 대해 이해하는데 꽤 도움을 줄 것이라고 생각합니다.

저같은 20대 분들중에서 정치에 관심이 없으신 분들이라도 무겁지 않게 보실 수 있다고 생각합니다. 중간 중간에 흔히 볼 수 없는 용어들이 사용되는데 이는 저같이 이 분야의 전문용어를 모르는 분들은 사전을 찾아보시면 알 수 있는 정도 입니다.(영어 아닙니다, 그리고 저만 몰랐을지도 몰라요;;)

촘스키라는 대학자의 식견을 접할 수 있고, 이 세계의 권력의 이동이나 변화, 대응들을 두권의 책을 통해서 약간은 이해할 수 있다는 것 만으로도 충분한 가치가 있다고 생각합니다.

(*) 제가 처음 촘스키에 대해 들었던 건 정치학자 였는데, 원래는 언어학자 였다고 하고 손을 대지 않고 있는 부분이 없는 사람으로 알려져 있네요. 대단합니다 정말 ;;
http://www.shhyun.com/tc2009-01-29T10:54:520.31010


1. 군집간 이주

GA 나 GP 와 같은 진화 알고리즘에서 무시할 수 없는 문제 중에 하나가 조기수렴 문제이다. 이를 해결 하기 위한 여러 가지 방법들이 제안되고 있으며, 대표적으로 유전 연산자의 조절, 선택 연산자의 조절, 군집 형태의 조절 등이 있다. 그 중에서도 다중의 군집 사용과 그것의 조절에 대해서 설명한다.


2. 다중 군집(Multi Population)

군집은 다수의 개체가 하나의 그룹으로 묶여있는 단위이다. 본래 GA 나 GP 에서는 단일의 군집을 사용하여 연산을 수행했었다. 그러나 단일 군집의 효율성을 증가 시키기 위해 군집을 여러 개로 나누어 사용하는 다중 군집 방식이 도입되기 시작했다. 초기에는 군집을 격리시켜 각각의 군집으로 분류해서 이를 발전시켜나가는 방식이 수행 되었으나, 후에는 이 군집들간의 몇몇 데이터를 서로 다른 군집으로 이동시켜서 이를 발전시켜 나가는 방식이 수행되곤 했다.

서로 다른 군집들간의 데이터가 어떤 원리에 의해 이동을 하는지에 따라 여러 가지 방식이 존재한다. 가장 기본적인 형태로 원형이주가 있고, 발전된 형태로 HFC 나 ALPS 와 같이 특정 조건에 의해 서로 다른 군집으로 격리 시키는 형태가 있다. 이 방식들은 전체적으로 알고리즘 자체의 조기수렴은 방지 하면서 최적해를 찾아가는 성능은 발전 시키는 방향을 염두로 설계한 방식들이다.



3. 원형 이주 방식(Ring Migration)

원형 이주 방식은 군집들 간의 데이터 이동 방향이 하나의 흐름을 가진다. 그리고 일정한 주기마다 특정 개체를 다음의 군집으로 이동시키는 방식이다. 이 때, 이동되는 개체들을 수용할 공간을 할당하는 방식과 이동 시킬 개체를 선택하는 방식의 조절이 가능하며, 이에 따라서 각기 다른 효과가 나타난다.

일반적으로 많이 쓰이는 방식은 가장 높은 적합도의 개체를 다음 군집의 가장 적합도가 낮은 개체로 대체 시키는 방식이고, 일반적으로 해당 군집의 10%의 개체를 변경하는 방식을 사용한다. 여기서 너무 많은 개체를 변경하는 방식을 사용할 경우 전체적으로 군집 전체가 비슷한 개체들로 수렴해버리는 현상이 나타나며, 이로 인해 오히려 더 빠르게 조기수렴하는 현상이 나타나는 경우도 있다.


4. 주입형 이주 방식(Injection Migration)

주입형 이주 방식은 여러 개의 개체군에서 최고의 적합도를 갖는 개체들이 한 군집으로 모여 경쟁을 하는 방식이다. 기본적인 원리는 가장 좋은 형질의 유전자들끼리의 교배를 통해 좀 더 좋은 결과를 기대하는 방식이지만, 여러 군집이 수렴될 경우에 오히려 비슷한 유전자들이 하나의 군집에 모이게 되어 조기에 수렴하는 결과가 나타나는 경우도 있다.

주입형 이주 방식도 원형 이주 방식과 같이 일정 주기에 약 10% 의 개체를 주입 받아 사용하는 것이 대부분이며, 단일 적합도 함수를 가진 경우보다는 다수의 적합도 함수를 갖는 경우에 주로 사용된다.

5. HFC(Hierarchical Fair Competition)


HFC는 교육이론으로부터 파생된 군집의 교환 방식이다. 일반적인 교육 시스템은 같은 학년의 학생들, 즉 비슷한 수준의 학생들끼리의 경쟁을 모토로 한다. 그러나 일반적 진화연산의 경우에는 적합도가 높고 낮음에 관계 없이 모두 같은 환경에서 경쟁을 하게 된다. 이로 인해 적합도가 높은 개체만이 살아남고, 적합도가 낮은 개체가 비록 좋은 형질을 지녔더라도 이것이 보존되지 않는 현상이 발생한다.

HFC 에서는 이러한 불공정한 막기 위해 적합도에 따른 개체간의 분류가 이루어지고, 이를 이용해 적합도가 비슷한 개체들끼리만 공정한 경쟁을 하도록 한다. 이로 인해 조기수렴 효과가 억제되는 효과를 가지며, 적합도는 낮을 지라도 우수한 형질을 가지고 있는 개체들이 탈락되는 현상을 억제하는 효과를 가진다. 구체적인 알고리즘의 여러 가지의 파라미터 및 제한 요건은 아래에 정리되어 있다.


(*)HFC 모델의 구성요소


The Hierarchical Organization of Subpopulations to Establish a Fitness Gradient


낮은 적합도의 개체들은 낮은 레벨에 머무는 것을 허용한다.

낮은 적합도의 개체들은 더 낮은 레벨의 군집으로 이주할 수 있다.

허용 범위의 적합도 아래로 생성된 자손들은 해제시킬 수 있으며, 반복적으로 연산을 수행할 수 있다.

그들의 부모보다 낮은 적합도를 가진 생성된 어떠한 자손도 해제 당할 수 있다.

선택된 부모로부터 생성된 자손들은 적어도 한 부모의 적합도보다 높은 경우 생성될 수 있다.

   

Random Individual Generator : The Source of Genetic Material

   

최하위 레벨의 군집은 지속적으로 새로운 임의의 개체를 유입한다.

   

The Migration Policy from Lower to Higher Fitness Levels

   

몇몇 레벨의 군집에서 해당 군집의 허용 범위에 적합하며 이주되는 개체들은 몇몇의 적합도가 좋지 않은 개체들을 대체하게 된다.

만약에 허용된 버퍼로부터 개체가 이주된 후에 빈 공간이 생기게 되거나 혹은 그 허용 버퍼에 빈 공간이 생길 경우, 그것은 현재 멤버로부터 변이 연산을 수행하거나 두 개의 멤버를 크로스 오버 연산하여 필요한 만큼의 새로운 개체로 추가하거나, 더 낮은 레벨로부터 개체를 이주할 수 있다.(최 하위 레벨의 개체는 새롭게 생성하여 추가한다.)

이주는 오직 한 레벨에 대해서만 허용한다.

   

Setting the Parameters of the HFC Model

   

적합도 레벨의 개수,

각 레벨의 적합도 범위

6. ALPS(Age-Layered Population Structure) (2)

ALPS 는 HFC 와 비슷한 개념을 가지고 탄생한 알고리즘이다. ALPS 에서 공정한 경쟁의 요소로 사용되는 것은 개체의 나이가 된다. 여기서 나이란 해당 개체가 얼마나 오랜 시간 동안 진화가 되어 왔느냐를 의미하는 것이다. 즉, 비슷한 시간 동안 진화가 되어온 개체 들 간의 교배만을 허용하는 알고리즘이다.

마찬가지로 HFC 와 같이 조기수렴의 효과를 획기적으로 억제하는 효과를 보여주며, 특히 매우 어려운 문제에서 아주 오랜 세대에 걸쳐 진화연산을 수행할 때에 그 효과가 뛰어난 것으로 알려져 있다.


(*) 약 10만 세대까지는 비슷하지만, 그 세대수가 80만, 100만이 넘어서는 경우에는 확실한 성능차를 보여줌. ((2)참조)


이 ALPS 알고리즘의 구체적인 파라미터나 제한요소들은 아래에 정리되어 있다.


  1. 흐름
    1. 새롭게 임의로 생성되는 개체는 나이 0 을 부여 받는다.
    2. 변이나 재조합에 의해 생성된 개체는 가장 오래된 부모의 나이에 +1만큼 부여 받는다.
    3. 엘리티즘과 같은 방식에 의해 변형 없이 복사될 경우, 나이를 1 증가 시킨다.
    4. 만약에 한 개체가 그 세대에서 여러 번 선택되어 변이될 경우에는 오직 나이를 1만 증가시킨다.
    5. 각각의 개체들은 나이에 의한 계층으로 구분된다.
    6. Age-gap parameter 는 계층에 곱해지는 수치이다. 예를 들어 Polynomial Aging-scheme 에 age gap 20이 곱해질 경우, 20, 40, 80, 180, 320, … 이 된다.

         

  2. 기존의 EA와 다른 몇가지 형태
    1. 개체들은 오직 자신의 계층과 그 이전의 계층과 교배연산을 수행할 수 있다. 예를들어 layer n 의 경우 layer n-1 과 n 의 계층이 교배연산에서 선택될 수 있다.
    2. Layer 0 은 age-gap 세대 마다 새롭게 생성된 개체로 대치된다.
    3. 현재 계층의 개체가 너무 늙게 되면, 이것은 다음의 늙은 계층과 비교하게 되어 만약에 이것이 적어도 하나의 개체보다 좀더 좋은 적합도를 갖는다면 그것은 다음 계층의 개체와 교체하게 된다.
    4. 각각의 계층은 고정된 개체수를 가짐. 논문에서는 총 10개의 계층으로 구분 하여 100개씩의 개체를 갖도록 만들어졌음.
    5. 처음부터 모든 계층이 활성화 되는 것이 아닌, 초기 계층부터 age-gap 마다 새롭게 생성되는 계층에 대해 점증적으로 수행되는 방식. 만약 age-gap 이 20 일 경우, 초기 20 세대에는 첫번째 계층만 수행, 그리고 40세대 까지 첫번째와 두번째 계층만을 유전연산 및 수행, 60 세대 까지는 첫번째, 두번째, 세번째 계층만을 수행하는 방식.


7. 정리

이주 방식 자체는 조기수렴의 감소를 타겟으로 계획된다. 어떤 특정 문제에 대해 연산 자체의 획기적 성능 개선이나 전체적인 리소스의 점유와 같은 것을 염두 하는 것이 아니다. 이주 방식은 오히려 어떠한 문제에서든지 연산 자체의 효율성을 극대화 시켜주는 것을 타겟으로 하기 때문에 범용적인 사회적 문제나 현상을 토대로 알고리즘 화 된 것이 많다. 그러므로 실제적인 문제의 해결에 있어서 문제의 성질에 따른 연산자의 선택이 가장 우선적이며, 그 연산자의 올바른 발전 양상을 유도할 수 있는 이주 방식의 설정은 부차적인 문제가 될 수 있다.


참고 문헌

1. Jianjun Hu, Erik Goodman, Kisung Seo, Zhun Fan, Rondal Rosenberg The Hierarchical Fair Competition(HFC) Framework for Suitable Evolutionary Algorithms. Evolutionary Computation, 2005.

2. G. S. Hornby, "ALPS : The Age-Layered Population Structure for Reducing the Problem of Premature Convergence. " GECCO'06, pp. 815-822, July 8–12, 2006.



  1. Hybrid 2008.12.21 00:25

    와... 정말 여러가지 방법이 많군요.
    전 GA/GP 에 대해서 관심을 갖기 시간한게 그야 말로, 인공 생명(AL) 때문이었는데, 이거 뭐.. 알면 알수록 이쪽 분야가 너무 방대해서, 마냥 관심만 갖다가는 끝도 없을 것 같네요.
    어서 GA/GP 쪽을 대충 접고 AL 쪽으로 공부를 해야겠습니다... ㅜㅜ

    • SHHyun 2008.12.21 19:56

      아직 이게 다가 아니예요;;
      지금 여기에 정리하고 있는 것들은 정말 빙산의 일각일뿐이랍니다;;

      저도 참... 이래저래 틀을 갖고 정리해보자고 조금씩 하고 있는데, 가면갈수록 틀이 무의미해지는걸 느끼고;;; 이제는 번호다는건 포기하고 마구마구 그때그때 좀 정리됐다 싶은걸 포스팅 하고 있답니다;;

Neural Network 는 큰 관심이 있었던 분야는 아니었습니다. 이 녀석이 태생적으로 중간 계층의 Hidden Layer 와 오류역전파 알고리즘 이후로 뭔가 하나의 획을 그을만한 대단한 알고리즘이 나타나지 않았기 때문도 있었지만, 사실 저 둘만으로도 충분히 번거로웠기 때문이었습니다.

항상 중간의 숨겨진 계층의 개수를 조절해야 되고, 그에 따른 가중치 값의 튜닝이 이루어져야 합니다. 그것이 만약 상당한 트레이닝을 거치고서도 개선이 없을 경우에는 다시 계층의 개수 조절에 이은 가중치 값 튜닝이 이루어져야 했었습니다. GA 나 GP 라는 것은 지들이 몇 가지 변수만 대입하면 준 최적 값이라도 잘 돌려줘서 써먹는 데는 큰 지장이 없었기 때문에 주로 쓰고 있었습니다.

그런데 얼마 전부터 좀 관심이 가는 녀석이 생겼습니다.

NEAT 라는 것인데 NeuroEvolution of Augmenting Topoliges 의 약자 입니다. 이것은 GA 나 ES 와 같은 유전자형태를 가지면서 Neural Network(이하 NN) 를 구성하고 스스로 진화시켜나가는 모델입니다. 위에 제가 NN 에 관심을 두지 않았던 가장 큰 이유인 귀찮다! 라는 것을 아주 쉽게 개선시켜줄 수 있습니다.

게다가 인터넷에 소스와 논문들도 널려있습니다. 어쩌다 관심을 가지고 몇 가지를 찾다 보니까 정말 자료가 많이 있더군요. 특히 야후의 그룹에서는 상당히 활발하게 토론되고 발전되어가고 있더군요. NN 에 관심을 가지고 있고, 써볼 데가 있긴 있는데 귀찮아서 도저히 못해먹겠다 싶어서 고민하셨던 분이라면 http://tech.groups.yahoo.com/group/neat/ 이곳에 한번 가보시는걸 추천 드리겠습니다.

P.S. 써보니까 편하긴 한데 파라미터를 좀 많이 손봐야 제대로 성능이 나오는 게 아닌가 싶네요. 단순한 문제는 좀 풀어주는 것 같은데 복잡한 것에는 정말 엄청난 시간이 필요한 듯 싶어요;;


2017년도의 P.S. 이글을 쓴 것이 2008 년인데, 사실 해외에선 슬금슬금 CNN 에 관련된 내용들이 나오기 시작했던 것 같군요.

이 글에서는 여러가지 제어방식에 대해 이제까지 제가 찾아보고 알아낸 정보들을 개략적으로 정리해보고자 합니다. 보행 로봇의 걸음제어에 대해 막 입문하시는 분들께 약간의 도움이라도 되었으면 좋겠습니다.

제가 처음에 보행로봇의 걸음제어에 관심을 가지게 된 것은 Aibo 를 이용한 Robocup 대회 관련된 논문들을 살펴보면서 였습니다. 외국의 많은 팀들은 각자 독특한 여러가지 방식으로 로봇의 걸음새(영어로 Gait 라는 표현을 쓰더군요)를 만들었습니다. 처음에 가장 기초적인 프리미티브(Primitive, 적절한 한글 표현이 없는듯 싶네요;;)방식, 그리고 역기구학 해석을 통한 발자취의 제어 형태, 수학적 알고리즘을 통한 발자취 제어의 최적화 방식, 가장 최근에는 진화연산을 이용한 발자취 파라미터의 최적값을 찾아내는 방식에 이르기까지 상당히 많은 형태의 제어방식이 있습니다.


1. 프리미티브(Primitive) 제어 방식

처음 제가 생각했던 걸음을 만드는 방식은 강아지가 걸어가는 것을 참고로해서 일일이 각각의 각도 값을 전부 기록해서 일종의 리스트로 표현하고 이것을 연속적으로 움직이는 것이었습니다. 이것은 일반적으로 프리미티브 제어라고 하죠. 하나의 프리미티브는 하나의 동작을 의미하게 됩니다.

이를테면 한걸음 앞, 한걸음 뒤, 좌로 30도, 우로 30도 이런식의 정의를 합니다. 그리고 각각의 정의에는 해당하는 움직임에 대한 각도값들의 리스트를 저장해놓습니다. 실제 이용시에는 한걸음 앞을 호출하면 딱 한걸음만 앞으로 가는 그런 형태를 이용하는 것 입니다.

가장 기초적인 제어방식이고 구현도 어려울것이 없습니다.(물론 관절값을 직접 입력할 수 있는 경우에만 그렇습니다.) 그러나 불확실한 환경에 대한 적응력이나 움직임에 대한 오차보정등이 전혀 고려되지 않았다는 단점이 있습니다. 아주 정밀한 모터를 사용하는 로봇이라면 그래도 어느정도 적용에 있어서 그 오차등이 적긴 합니다만, 이 방식을 통해 정밀한 제어는 사실상 매우 어렵습니다.


2. 역기구학 해석을 통한 발자취의 제어 형태

이 방식은 로봇을 연구하는 연구자들의 가장 일반적인 형태의 방식입니다. 제가 이 방식을 처음 본 것은 Robocup 출전팀중 rUNSWift 팀의 2002년 리포트[1]에서 였습니다. 처음 4족 보행 로봇의 제어에 대해 접하신다면 정말 참고할만한 자료가 많습니다. 거의 모든 자료를 공개해놓았기 때문에 실제 이 팀에서 쓴 제어기도 이용해볼 수 있구요.(물론 Aibo ERS-7 모델을 가지고 계실 경우에 그렇다는 말입니다;;)

그리고 아래의 [2] 논문에서는 로봇의 발자취는 사각형으로 고정시킨 상태에서 좌우의 Phase 를 어떻게 조절하느냐에 따른 속도 차이나 이런것에 대한 분석을 해 놓았습니다. 실제 좌우 Phase 의 영향은 로봇의 방향 조절이나 그 속도면에서 어느정도 차이를 보여주는 것으로 알려져 있습니다.

위의 두 자료에서 걸음의 제어에 이용한 방식은 다음과 같습니다. 우선적으로 역기구학 해석을 통해 몸통에 대한, 혹은 전역 좌표계에 대한 발끝의 상대적인 좌표값을 구합니다. 그리고 그 좌표값이 그리는 자취의 도형을 결정하고, 실제 걸음에 적합한 자취의 좌표값을 구합니다. 그리고 그 자취를 통한 걸음의 제어를 수행합니다.

여기서 역기구학 해석이란 아시는 분은 잘 아시겠지만 간단하게 설명하겠습니다. 로봇의 다리는 다수의 관절로 이루어져 있습니다. 이 로봇의 다리가 만약에 3개의 관절로 이루어져 있다고 생각해 보죠. 만약에 로봇의 어느 한 관절이라도 움직인다면, 로봇의 발 끝의 좌표는 그것의 영향으로 변하게 됩니다. 즉, 발끝과 관절들은 상호간의 어떤 관계로서 정의할 수 있다는 말 입니다. 그리고 기구학 해석이란 관절들의 값을 이용해서 발끝의 전역 좌표계상의 위치를 구해내는 것이고, 역기구학 해석이란 발끝의 전역 좌표계상 위치를 통해 현재 관절들의 값을 역으로 해석해내는 것을 말합니다.

발자취를 통한 제어를 이용할 경우에는 로봇을 원하는 방향으로 원하는 만큼 조절하는 것이 가능합니다. 이것이 발자취를 통한 제어의 최대 장점입니다. 게다가 어떤 특정 환경에 대해 가변적으로 움직임을 조절하는 것도 가능합니다. 고로 일반적인 로봇축구 팀들이 가장 많이 쓸 수 있는 방식입니다. 프리미티브 방식에 발자취를 이용한 제어를 결합시킨 형태를 주로 이용합니다.

그러나 이 방식에는 결정해야할 문제가 많습니다. 예를들면 발자취의 도형이나 그 도형의 크기, 도형을 순환하는 속도, 사용할 역기구학의 해석등 상대적으로 많은 문제를 가지고 있습니다. 그래서 가장 처음에는 주로 가장 단순화시킨 직사각형의 형태를 이용하는 것이 대부분입니다. 그리고 역기구학 해석도 yaw, roll, pitch 를 사용해서 행렬로 해석하는 방식을 이용하거나, 기본적인 삼각함수와 거리 함수를 통한 조합을 이용하는 등 어떤 것을 사용할 지 정해야 합니다. 역기구학도 오차나 사용 불가 각도 같은 것도 고려해 줘야 하기 때문에 이것 또한 어떤 걸 쓸지 결정해 주어야 합니다. 그렇기 때문에 수학적 방식을 통한 최적화나 진화연산을 통한 최적화 기법을 이용하곤 합니다. (물론 역기구학의 해석에는 이를 이용할 수 없지만, 도형의 순환속도나 크기 등을 결정하는 데에는 상당한 도움을 줍니다.)


3. 수학적 알고리즘이나 진화 알고리즘을 통한 자취의 최적화

위에서 설명한바와 같이 자취를 이용하는 방식에서는 결정해야할 파라미터가 너무 많기 때문에 이를 해결해주기 위해 가장 처음 시도 되었던 방식이 바로 수학적 알고리즘 입니다. [3]논문에서는 Powell’s (direction set) method for multidimensional minimisation 방식을 통해 직사각형의 자취에서 가변적인 형태의 사각형을 사용하게 되었습니다. 즉, 실제 사각형은 최적의 값으로 적합하지 않다는 것이 처음으로 나타나게 된 논문이라고 할까요? 물론 처음이 아닐수도 있습니다만, 이 이전에 나타난 대부분의 논문들에서는 정적인 사각형을 이용하곤 했습니다. 이에 이어 rUNSWift 팀이나 German team[3-5] 등 다른 로봇축구 팀이나 게이트를 연구하는 사람들은 타원형이나 기울어진 타원, 3차원 공간에서의 다각형, 3차 스플라인 함수로 보간된 도형 등을 이용하게 되었습니다.

어떤 도형을 이용하는지도 문제지만, 그 도형의 크기나 순환 속도 역시 큰 문제가 됩니다. 순환 속도는 너무 짧다면 실제적으로 그 도형과 비슷하게 움직이지 않으므로 너무 짧은 형태의 불규칙적 순환형태로 변질되고, 너무 길경우에는 말 그대로 움직임이 굼뜬 거북이마냥 느리게 되죠. 도형의 크기 또한 해당 로봇의 다리가 커버할 수 없는 크기 정도로 클 경우에는 너무 큰 동작을 수행하려고 해서 로봇의 움직임이 예측 불가능이 되기도 하고, 순환 속도와 크기가 복합적으로 작용해서 전혀 예측하지 못한 형태의 움직임이 나타나기도 합니다.

그러므로 이 문제는 상당히 많은 변수를 지닌 복합적인 문제로서 그 해결에 GA 나 ES 등의 진화 알고리즘을 사용하게 됩니다. GA 나 ES 는 제 다른 포스팅에서도 많이 있듯이 다양한 변수를 가진 문제의 최적화 기법으로서 많이 이용됩니다. 가장 중요한 점은 GA 나 ES 에서는 준최적화된 값도 제공하기 때문에 이것을 이용할 경우에도 사람이 손으로 조작한 값보다는 꽤 향상된 형태를 보여준다는 것이죠.


4. 다른 형태의 보행로봇의 수많은 제어기법

위에서 설명한 방식들외에도 상당히 많은 제어기법이 존재합니다. 위에서 설명한 방식은 각도 자체를 제어하기 보다는 역기구학을 통해서 점에서 각도를 제어하는 형태의 방식이죠. 그러나 각도 자체를 직접적으로 제어하는 기법들도 있습니다.

이를테면 아래의 포스팅에서 간접적으로 소개했던 CPG를 사용한 방식이 있습니다. 이는 두개의 뉴런의 상호작용을 통해 반복적인 비선형 신호를 발생하는 것을 모델화해서 이용하는 것으로서 비선형 신호 자체가 로봇의 관절값을 나타냅니다. 이것을 이용하게 되면 실제 사람이나 동물이 움직이는 것과 같은 아주 부드러운 형태의 움직임이 가능합니다.

그리고 신경회로망을 이용해서 각 로봇의 관절값을 입,출력으로 이용해서 Controller 형태의 보행 제어 기법이 있습니다[6]. 이 논문에서는 로봇의 관절값이 좌, 우 대칭으로 순환한다는 점을 착안해서 신경회로망을 그에 대응하는 모듈형태로 구성해서 제어에 이용한 기법이 사용되었습니다.

또한, 제안한 기법으로는 Genetic Programming 을 사용해 일정한 수학적 함수를 만들어내고 이를 토대로 로봇의 걸음새를 만들어내는 형태의 기법이 있습니다[7]. 네개의 멀티트리 기법을 통해서 각각의 트리는 각각의 관절 자체가 그리는 궤적을 의미하고, 이를 순환적으로 반복해서 로봇의 걸음을 진화시키는 기법이었는데, 최적화 형태의 접근방식입니다. 장점이라면 직선 거리를 이동하는데 있어서 최고의 속도를 기록할 수 있다는 것이지만, 단점이라는 실제적인 제어의 형태에서 적용하기가 어렵고, 외부 환경에 대한 적응성을 갖기 어렵다는 것이 있습니다.


5. 마치면서

보행로봇의 최고의 장점은 역시 걸어간다는 것입니다. 걸어간다는 것은 바퀴로봇과는 달리 계단을 오르거나 장애물을 건너가는 등의 장점을 가질 수 있죠. 그러나 역시 바퀴보다는 느린 속도가 가장 큰 단점이죠. 걸어간다는 것에 속도까지 더해져서 가장 이상적인 형태의 걸음걸이를 만든 다는 일은 완전한 직선형태의 스커트라인을 갖는 필터를 설계하는 것 만큼이나 어려운 일일겁니다. 그러나 역시 안되는 일을 되게 하는것이 공학자들이나 여러 과학자들의 몫이겠죠. 여기서 소개한 걸음 걸이들에 대한 여러가지 이론들은 빙산의 일각이라 할 정도로 수많은 걸음 걸이에 관련된 이론들이 존재합니다.

이제 막 보행로봇의 걸음에 대해 관심을 가지시는 분들에게는 약간이나마 도움이 되었으면 좋겠습니다. 저 역시 아직 부족한 점도 많고, 더 새로운 이론의 적용과 구성을 위해 노력하는 입장이지만, 그래도 조금이라도 도움이 된다면 좋을것 같네요.


[1] rUNSWift team homepage, http://www.cse.unsw.edu.au/~robocup/2005site/index.phtml

[2] D. Golubovic, H. Hu, Parameter optimisation of an evolutionary algorithm for on-line gait generation of quadruped robots. In Proceedings of IEEE International Conference on Industrial Technology ? ICIT’03, Maribor Slovenia December, (2003)

[3] M. S. Kim and W. Uther Automatic gait optimisation for quadruped robots. In Proceedings of the Australasian Conference on Robotics and Automation, Brisbane, Australia, December, (2003)

[4] T. R¨ofer, T. Laue, D. Thomas. Particle-Filter-Based Self-Localization Using Landmarks and Directed Lines. In RoboCup 2005: Robot Soccer World Cup IX, Lecture Notes in Artificial Intelligence, Springer, (2005)

[5] T. Mericli, H. L. Akın, C. Mericli, K. Kaplan, B. Celik, The Cerbus'05 Team Report

[6] V. K. Valsalam, R. Miikkulainen, Modular Neuroevolution for Multilegged Locomotion. In Proceedings of Genetic and Evolutionary Computation Conference 2008 (GECCO 2008), Atlanta, Georgia, USA, July 12-16, pp. 265-272 (2008)

[7] 서기성, 현수환, 관절 공간에서의 GP 기반 진화기법을 이용한 4족 보행로봇의 걸음새 자동 생성, 제어·자동화·시스템공학논문지 - Vol.14, No.6 , (2008)

Automatically Defined Functions(ADFs)?


J. R. Koza 의 94년에 발간된 Genetic Programming II 에 보면 나오는 용어입니다. 말 그대로 풀이하면 자동적으로 정의된 함수들 쯤 될꺼 같습니다. 그 책의 내용에 따르면 이 기법을 사용하게 되면 트리 안에서 어떤 강제적인 흐름을 가지는 구조물을 위치시키게 되고, 이 구조물은 트리 안에서 반복적으로 사용될 수 있게 된다고 하고 있습니다.


GP 는 터미널 노드와 함수 노드를 사용하여 일정한 흐름의 프로그램을 만들어내죠. 이 ADFs 라는 녀석은 그 일정한 흐름의 프로그램들의 한 부분을 ADFs 라는 하나의 구조물안에 가두어서 반복적으로 사용할 수 있는 효과를 가지게 됩니다. 한마디로 어떤 구조가 반복적으로 사용되어 해결하기 좋은 문제일 경우에는 이를 사용할 경우에 톡톡한 효과를 볼 수 있다는 뭐 그런 말입니다.


GP 를 처음 접할 때 ADFs 라는 용어를 듣고, 그 녀석을 접하는 순간, 어떤 문제든 다 갖다 붙이고 싶은 욕구가 마구마구 싹텄었던 기억이 나는군요. 근데 사실 이녀석은 생각보다 널리 쓰기가 어려운 녀석입니다. 특정 몇몇 문제가 아니라면, 사용하는 자체가 오히려 전체적인 구조를 변화하지 못하게 만드는 주요 요인중에 하나가 됩니다.


예를들면, 어떤 회귀문제(어떤 특정 주어진 몇개의 점을 모두 지나가는 함수를 만드는 그런종류의 문제들)에 ADFs 를 사용한다고 생각해 봅시다. 우리가 일반적으로 생각하는 수식들에서 특정 구조가 지속적으로 반복되는 수식이 과연 얼마나 있을까요? ADFs 는 이런 문제의 경우에는 해당 문제를 오히려 특정 구조가 반복되게 만들 수도 있기 때문에 가급적 피하는것이 좋을 수 있습니다.


그러나 회로를 설계하는 문제를 생각해보면 달라집니다. 만약에 어떤 회로에 특정 필터를 사용하는 부분이 반복적으로 나타나야 한다면? ADFs 가 이 필터의 구조를 가지고 있다면, 지속적으로 특정 필터를 사용하는 그런 효과를 낼 수 있겠지요? 하지만 역시 이것도 현실적으로 잘 생각해보시면, 사람이 ADFs 가 아닌 DFs 로 정의해 놓지 않는한 과연 이것을 필터로 인식하고 지속적으로 사용할 것인가는 쉽게 결론이 나오지 않는 문제가 됩니다. 그러나 엄청난 컴퓨팅파워를 갖추고 있다면, 말도 안되는 군집크기와 진화 세대의 반복을 통해 아마도 좋은 결과를 얻어낼 수도 있지 않을지 생각해봅니다.


또한, 네트워크의 다중입출력 관계에 대한 어떤 구조설계를 한다고 할 경우에도 ADFs 를 사용할 수 있습니다. 기본적으로 GP 는 하나의 출력을 가집니다. 루트노드가 곧 출력이 되는 것이지요. 그리고 노드에 대한 다중상속구조를 지원하지 않습니다. 이런 것을 토대로 볼 때, 이를 해결하는 가장 쉬운 방법은 다중의 트리를 사용하고 모든 트리들은 같은 ADFs 를 공유하는 것 입니다. 이렇게 하면 만약 루트 노드 바로 아래에 ADFs 가 위치한다면 서로 특정 같은 구조의 노드들을 가지게 되는 것이므로 다중상속구조를 살짝이나마 가질 수 있는 것이지요.


ADFs 라는 것은 이렇듯 GP 에서 해결해야할 문제에 특화된 어떤 하나의 기술요소입니다. 문제에 따라서 문제 자체를 좀 더 용이하게 해결해 줄 수 있는 방법입니다. 그러나 역시 모든 기술요소가 그렇듯 장점만을 가지고 있는 것은 아니기에 조심스럽게 지금의 문제가 이 기술을 적용하기가 적합한지 아닌지에 대해 잘 고려해봐야할 필요가 있습니다.

Homologous CX 연산자는 기본적으로 동일 구조를 가진 서브트리들 간의 교환만 허용하는 연산자 입니다. 즉, 위의 그림에 Tree1 과 Tree 2 에서, 1-1, 2-2, 3-3, 6-4, 7-7 간의 교환만을 허용한다는 이야기 입니다.

이 연산자의 출발점은 생물체의 교배에 있어서 동일 형질의 유전자 만을 교환한다는 것으로 기억하고 있습니다. 예로서 팔의 유전자와 다리의 유전자를 교환해서는 이상형질이 나타날 수 있다는 것을 들 수 있겠습니다.

실제로 몇가지 테스트 문제에 대해 실험해 보면 매우 빠른 속도로 연산이 이루어지고, 코드의 증가 또한 기본 연산자에 비해서 매우 적게 증가하는 것을 확인할 수 있었습니다.

본 소스코드에 어떤 오류가 있을지는 모르겠습니다만, 혹시 참고하실 분은 첨부된 소스를 받으셔서 돌려보시면 되겠습니다.


homologous.c





요새 관심을 갖고 보고있는 것이 바로 이 CPG 입니다.

Central Pattern Generator 이하 줄여서 CPG 라고 부릅니다.

중추신경발생기? 라고 해야 맞는말인지는 잘 모르겠습니다.

?

어찌되었든, CPG 는 일반적인 생물체의 보행에 관련된 신경을 나타냅니다.

인간의 걸음걸이나 개의 걸음걸이와 같은 2족, 혹은 4족, 또는 그 이상의 곤충들, 기타 모든 생물체의 반복적 움직임에 관여하고 있다고 알려져 있습니다. ( 이 부분은 정확한 것은 아닙니다. )

?

한마디로 표현하면 CPG 라는 것은 규칙적인 순환구조의 패턴을 생성해내는 신호 발생기라고 생각하면 간단합니다.

물론 어디까지나 간단하게 생각하는 차원에서 입니다.

?

위키에 나와 있는 다음의 원문을 번역해본 것 입니다. ( http://en.wikipedia.org/wiki/Central_pattern_generator )

"Central pattern generators (CPGs) can be defined as neural networks that can endogenously (i.e. without rhythmic sensory or central input) produce rhythmic patterned outputs" [1] or as "neural circuits that generate periodic motor commands for rhythmic movements such as locomotion."[2] CPGs have been shown to produce rhythmic outputs resembling normal "rhythmic motor pattern production" even in isolation from motor and sensory feedback from limbs and other muscle targets. [1] [2] To be classified as a rhythmic generator, a CPG requires: 1. "two or more processes that interact such that each process sequentially increases and decreases, and 2. that, as a result of this interaction, the system repeatedly returns to its starting condition.[1]

CPG는 내부적으로 반복적인 패턴의 움직임을 만들어내는 것 또는 운동과 같은 것들의 리듬이 있는 움직임을 위해 주기적인 모터에 명령을 만들어내는 신경 회로망으로 정의할 수 있다. CPG 가 리듬을 생성해내는 것으로서 분류되기 위해서는 (1) 두 개 혹은 그 이상의 처리과정이 서로의 처리과정에 대해 연속적으로 증가하거나 감소하는 것 같이 영향을 주어야 하며, (2) 그런 상호작용의 결과로서 시스템은 반복적으로 초기의 상태로 되돌아 갈 수 있어야 한다.

말의 뜻이 잘 전달 되었는지는 모르겠습니다만,? (오역이 있을수도 있으므로 한번 검토해주시면 감사드리겠습니다 ^^)

?

두 개 이상의 처리과정이 조합되어 서로간에 영향을 주어야 한다는 것이 키 포인트 입니다.

즉, 기존의 단순한 sine파형 발생기나 cosine 파형 발생기를 CPG라고 명명할 순 없다고 볼 수 있겠습니다.

?

로봇이 걸어가는데 단순히 sine, cosine 파형만으로도 걸어갈 수는 있습니다.

그에 따른 feedback 응답으로도 물론 보행로봇이 외부환경에 적응해 나가도록 할 수도 있습니다. 하지만 이녀석은 자연스러운 움직임을 보여주지는 못하죠.

?

그래서 이 CPG 라는 것이 눈길을 받게 되었습니다.

CPG라는 녀석을 통해 보행로봇의 걸음새의 모델을 만들어내면, 인간이 걷는 것과 같이 자연스러운 걸음새도 가능하고,

외부 환경의 변화에도 적응할 수 있는 특징을 가질 수 있기 때문입니다.

* 이에대한 깊은 이해는 여기서 다루지는 않겠습니다. 이 부분은 CPG 관련 논문이나 자료들을 참고하시면 좋을것 같습니다.

?

CPG 를 이용해서 실제적인 걸음새가 만들어지는 것은 다음의 사이트를 참고하시면 도움이 될 것 같습니다.

http://brain.cc.kogakuin.ac.jp/~kanamaru/NN/BC/

?

일반적으로 로봇에 CPG를 이용하는 형태는 다음과 같습니다.

(1) 로봇의 모델링을 통한 CPG 모델의 구성

(2) 파형의 순환형태를 위한 PID 제어 혹은 PD 혹은 PI 제어

(3) 되먹임 루프 구조의 구현

?

저 같은 경우는 CPG에 관심을 가진 이유가 4족 보행의 걸음새 자동생성 방식에 대해 생각하다 관심을 가지게 되었습니다.
혹, CPG가 뭔지 아주 약간의 관심만 있으신 분들에게는 도움이 되었을지 모르겠습니다.

?

P.S. 너무 오랜만의 포스팅인지라... 뭔가 더 장황해진듯 싶네요;;;

(*) CMA(Covariance Matrix Adaptation)
- 공분산 행렬 적응 방식 입니다.
- CMA 통장 말하는거 아니예요 ^^; 그걸 기대하셨다면 back space 를 살포시;;

본 자료는 http://www.bionik.tu-berlin.de/user/niko/cmaesintro.html 
  • Four slides on randomized search and the CMA-ES (pdf).
  • A written tutorial (pdf 460KB).
  • 위의 두 자료를 토대로 나름의 의견을 반영하여 작성 된것임을 미리 밝혀드립니다.
    좀 더 정확한 내용을 원하신다면 위의 두 자료를 참고하시는 것이 좋을 것으로 보여집니다.
    위의 두 자료는 수치해석법에 대한 기본적 지식을 토대로 보시면 더 쉽게 이해하실 수 있을 것으로 보여집니다.

    우선은 문제를 정의할 필요가 있습니다.

    주어진 문제가 다음과 같습니다.

    연속적인 도메인에서 적합도를 최소화 하는 문제 입니다.
    어떤 변수 x 에 대해 f(x) 값을 최소화 하는 문제 라고 가정합니다.

    즉, x -> (B) -> f(x) 이런 시나리오가 됩니다.
    여기서 (B) 는 블랙박스로 어떤 처리가 이루어지는지 알 수 없는 것으로 가정합니다.
    중요한 것은 어쨌든 x 는 블랙박스를 거쳐 f(x) 가 된다는 것입니다.
    저것이 일반적인 ES나 GA에서 사용하는 적합도 함수의 형태가 되는 것입니다.

    한마디로 말해서 우리가 일반적으로 수행해서 최적화(또는 최소화)를 시키고자하는 목적함수가 어떤 속성을 가지고 있는지 알 수 없는 것입니다. 이는 대부분의 실제 일상에서 쓰이는 여러가지 복잡한 문제에서 나타나는 형태입니다. 실세계의 문제들. 즉, 공장자동화가 될 수도 있고, 로봇 게이트 생성 문제일 수도 있고, 다리를 만드는 문제일 수도 있습니다. 이런 문제들의 해로서 이용하는 값들은 그 중간 처리과정을 알 수가 없다는 것이 문제입니다.

    문제 자체가 가지고 있는 어려움들(불연속성, 컨벡스하지 않은 것, 조건이 특이한 경우등등)이 이를 해결하기가 매우 어려운것에 초점을 맞추고 있습니다. 이의 해결을 위해 기존의 GA 나 ES 를 이용했습니다만, 문제가 어려울수록 시간이 오래걸리고 연산량이 늘어나는 단점이 있습니다. 가장 중요한 것은, 확률. 즉 우연에 의존하기 때문에 그 이론적 근거가 매우 미약하다는 단점이 있었죠. 그래서 GA나 ES가 그 효과가 잘 나옴에도 불구하고 많은 무시(뭐.. 말이 그렇다는 거죠. 너무 진지하게 받아들이실 필요는 없어요 ^^)를 당했었습니다.

    하지만 ES 에서 CMA 기법의 등장 이후로 수많은 학자들로부터 관심을 받게 되었습니다. 왜냐면 이녀석은 이론적 근거를 가지고 있고, 그 효과까지 이제까지 나온 거의 모든 기법들에 비해서 매우 우수하기 때문이죠. (하지만 Local Search 기반의 비슷한 알고리즘인 G3 PCX 와 CMA-ES 를 로봇 게이트 문제에서 테스트한 결과는 기본적인 SGA 보다도 좋지 않았습니다.)

    실험 결과를 보면 대표적인 벤치마킹 문제인 Rosenbrock 문제나 Rastrign 문제에 대해서 엄청 우수한 결과를 보여주고 있습니다. 그 결과치에 대해서는 위에 링크한 홈페이지에 가셔서 논문을 뒤져보시면 알 수 있습니다.

    어쨌든 기존의 방식은 랜덤하게 여러가지 포인트를 여러군데를 막 집어 낸 후에 이것을 파악해 나가는 방식이었죠. 하지만 CMA 라는 방식은 비슷하긴 한데 확률적인 데이터를 통한 지점의 변형을 이루어 나갑니다. 공분산행렬이 가지고 있는 정보는 모든 세대에 걸쳐 누적되기도 하고, 바로 전 세대의 데이터만을 누적 시키기도 합니다만, 그 정보를 통해 함수를 어떤 방향으로 진화시켜 나갈지를 결정해 줍니다. 그 방식에 대해서는 차차 알아봐야 겠죠 ^^;;

    어쨌든 오늘은 CMA에 대한 개략적인 내용에 대해서 소개했습니다. 하나하나 천천히 다 집어 들어가게되면 이제까지 GA에 대한 서술한 내용보다 더 많은 내용을 건드리게 되지 않을까 싶습니다.

    유사 - [명사]{주로 일부 명사 앞에 쓰여} 서로 비슷함.

    그렇습니다. 유사하다는 말을 서로 비슷하다는 말입니다.
    비슷하다? 그럼 비슷하다는 말은?

    비슷하다
    [형용사]
    『(…과)』 {‘…과’가 나타나지 않을 때는 여럿임을 뜻하는 말이 주어로 온다} 두 개의 대상이 크기, 모양, 상태, 성질 따위가 똑같지는 아니하지만 전체적 또는 부분적으로 일치하는 점이 많은 상태에 있다. {명사의 단독형 뒤에 쓰여}
    1 정체가 확인되지 아니한 어떤 대상에 대하여 누구 또는 무엇이라고 짐작되는 상태에 있다.
    2 비교가 되는 대상과 어느 정도 일치되지만 다소 미흡한 면이 있다.

    네 그렇습니다. 크기, 모양, 상태, 성질 따위가 똑같지는 않지만, 전체적 또는 부분 적으로 일치하는 점이 많은 상태에 있다 라고 하고 있습니다.

    일반적으로 진화 연산에서 각 개체군의 유사함을 평가하는데에 이용되는 방식은 크게 두가지 방식이라고 할 수 있겠습니다.

    그것은 Genotype 과 Phenotype 의 형태에서 유사함을 평가하는 것 입니다.

    여기서 Genotype 은 순수한 그 개체 자신을 나타내는 것이고,
    Phenotype 은 개체가 어떤 적합도 함수를 거쳐서 결과물로서 나타나는 것을 말합니다.

    Phenotype 을 통한 개체의 유사성 분류는 크게 문제될 것이 없습니다. 일반적인 적합도 함수를 이용한다면, 두개 이상의 값이 나타나지 않습니다. (물론 동시진화기법 (Co-evolution) 을 이용할 경우에는 달라질 수 있습니다만, 이것은 특이한 경우로 분류하겠습니다.) 그러므로, 적합도의 값의 차이, 즉, 유클리디안 거리를 통한 유사도 분류가 가능합니다.

    Phenotype 을 통한 유사성 분류방식은 초기 진화연산 기법에서 많이 이용된 방식 이었습니다. 하지만 금방 단점이 나타나게 되었죠.

    가장큰 단점은 아마도 이것이겠지요.

    " 완전 다른 개체일 경우에도 비슷한 개체로 분류될 수 있다. "

    그렇습니다. 여러분 께서 만약에 GA의 대표적 벤치마크 문제인 f3deceptive 문제를 접해 보셨다면, 무슨 의미인지 확실하게 이해하실 수 있을 것입니다.
    000011000 는 1.8 의 적합도를 가집니다.
    111000001 또한 1.8 의 적합도를 가집니다.

    과연 위의 두 개체를 비슷한 개체라고 부를 수 있을까요?

    이렇듯, 개체의 특성 자체가 반영되지 않은 상태에서 단지 적합도 만을 가지고 유사성을 논하는 것은 매우 큰 오류를 범하는 것을 확인할 수 있습니다.

    그래서 많은 학자들이 Genotype 상태에서의 유사성 분류에 대한 기준을 마련하기 시작했습니다.

    수많은 유전연산 기법들은 그들만의 표현양식(Representation)에 따라 그 유사성 분류 방식이 다를 수 밖에 없습니다. Bit String 표현 기법을 갖는 GA 의 경우에는 해밍거리 를 통한 측정방식이 있습니다. 각각의 위치한 비트를 비교하여 몇개의 비트가 서로 다른 비트 값을 갖는지를 이용하여 측정하는 방식입니다. Real Number 로 표현되는 GA 나 ES 의 경우에는 각각의 개체에 대해 유클리디언 거리측정을 통하면 그 차이를 측정할 수 있죠.

    하지만 GP 의 트리는 아직까지도 확실한 유사성 분류 기준이 없습니다. 트리구조의 유사성을 분류하는 수학적인 기준도 아직까지 없는 것으로 알고 있습니다.

    여기서 짚고 넘어가야 할 게 있는데, 왜 유사성을 분류하는 것이 중요한지에 대한 것입니다. 예전에 GA 나 GP 등의 진화연산에서 중요하게 생각하는 문제중의 하나가 조기수렴 문제라고 언급한 적이 있었습니다. 이는 거의 모든 개체가 한 점으로 수렴해 나가는 현상을 말한다고 말씀 드린 적이 있습니다. 이것은 일반적으로 Phenotype 의 관점에서 봤을 때, 한 점으로 수렴하는 현상을 말 합니다. 하지만, Phenotype 의 관점에서는 한점에 수렴 했다 하더라도, Genotype 의 관점에서는 수 많은 곳으로 분포해 있을 수 있는 것입니다. 이 가능성은 개체들을 여러곳으로 분산시킬 수 있는 다른 효과를 기대해 볼 수 있습니다.

    즉, 유사성 분류기준, 혹은 유사성 측정에 대한 것은 조기수렴을 현상을 돌파할 수 있는 또다른 가능성을 제시해 줄 수 있다고 생각합니다.

    다시 본론으로 돌아가서 트리구조의 유사성 측정에 대해 생각해 보도록 하겠습니다.

    과연 우리가 어떨 때 이 트리가 유사하다고 생각할 수 있을까요?

    제 생각은 이렇습니다.

    1. 트리의 깊이가 비슷하다.
    2. 트리의 퍼진 형태가 비슷하다.
    3. 트리에 분포되어 있는 함수의 형태가 비슷하다.
    4. 마지막으로 트리가 가진 적합도도 비슷하다.

    한마디로 이렇습니다. 우리가 트리가 유사하다라고 하는 것은 트리의 겉 모양을 보고 "아 이것은 생긴게 비슷하다." 라고 할 수 있고, "트리를 거쳐 처리된 결과물이 비슷하다" 라고도 할 수 있습니다.

    하지만, 이것에는 어느정도 괴리가 있습니다.
    저 말들 중에 비슷하다 라는 것을 어떻게 표현할 것인가?

    그래서 이런 방식을 제안해 보고자 합니다.
    트리의 깊이, 터미널 노드의 개수(트리의 퍼진정도), 트리에 분포되어 있는 함수들
    이 세가지 기준에 트리가 가진 적합도까지 추가하여

    퍼지를 통한 분류 기법을 이용해보고자 합니다.
    아직은 추상적이기 때문에, 조금 더 많이 구체화 시켜야 합니다만,
    인간의 주관으로서 비슷하다라고 느끼는 것을 표현할 수 있다면,
    그것을 통한 조기 수렴의 극복 및 새로운 연산기법의 적용이 가능 할 것 같습니다.

    본 글은 어떤 일반론적인 생각도 아니고 어디까지나 제 자신의 개인적인 생각들 임을 사전에 밝히도록 하겠습니다. 짧은 지식을 통해 나오는 생각들이기에 편협할 수도 있고, 좁은 식견이 확 보일수도 있고 정리가 안된 그냥 머리속 튀어나오는 대로 쓰는거지만... 그냥 한번 써보렵니다. 사족이므로 반말나갑니다.

    - 다른 녀석들을 봤을 때 유전프로그래밍이라는 것의 가능성... -

    우선 신경회로망 이라는 녀석. 많이 알고 있는 녀석은 아니지만 태어난지 매우 오래되었음에도 불구하고, 과거의 알고리즘에 비해 심대한 변화는 없는 녀석이다. 다층 퍼셉트론 이후에 오류역전파 알고리즘, 그것들을 제외하고는 어째 크게 발전은 없는 모양이다. 사실 내가 크게 관심이 없어서 그럴수도 있지만, 여러 논문을 검색해 보았을때 다 고만고만 하다. 신경회로망을 어디에다가 적용시켰느냐가 초점이 되는 것이지, 신경 회로망 자체를 어떻게 바꾸었느냐는 그다지 관심들이 없는 모양이다. 더이상 바꿀게 없는건지, 저것 자체로도 충분한건지... 많이 발전되었다고 보인다 해도 사실 다층 퍼셉트론의 컨셉에 오류역전파 알고리즘의 약간 변형된 형태를 크게 벗어나지는 않는것 같다. ( 어디까지나 내가 잘 몰라서 그런걸수도... )

    그리고 유전 알고리즘... 요샌 ES 나 DE 이런 애들한테 입지를 참 많이 뺏기는 느낌? 아니 그것보다도 더이상 전통적 유전알고리즘 이라고 불리는 녀석을 많이 쓰지 않는듯 싶다. 오히려 각각의 알고리즘들의 장점들만 빼와서 조합한 새로운 형태의 알고리즘이 많이 쓰이는거 같고, SGA 자체가 처음 등장때보다도 획기적 성능향상에 기여하고 있는 것 같지도 않다. 개발개발개발 또 개발 되어온 녀석이고, 여러가지 연산자, 표현방식, 알고리즘의 흐름 등등이 새롭게 바뀌었지만... 이젠슬슬 더 바꿀게 없을듯한 그런 한계에 도달 하는 거 같기도 하고, 이녀석은 탄생하고 그것이 전성기를 맞이한 후에 쇠퇴해가는 알고리즘의 한 형태가 아닐까...

    이제 내가 언급하고 싶은 유전 프로그래밍... 이건 한마디로 말해서 너무 어렵다. 다른 ES, EA, GA, PSO, DE,뭐 기타등등 수많은 진화연산 알고리즘 중에서 가장 어렵다고 단언할 수 있다. 여기서 어렵다는 말의 의미는 일단 접근 자체도 너무 힘들고, 한글로 된 GP관련 자료를 찾는건 더 머리아프고, 프로그래밍을 해야하는데 이게 완전 사람 잡는다. 특히 C 언어로 GP를 짜겠다고 덤벼드는 자들... 100에 99는 자빠져서 쓰러질꺼라고 생각한다. 100에 90도 아니다. 99다 99. 자료구조의 기본지식에 응용까지 확실하지 못한자가 여기에 달라든다는건 애초에 자살행위. 위의 녀석들과 비교했을때 난이도가 가장 높다고 생각한다. 문제는 그거다. 이녀석은 정말 난이도가 높다. 하지만 적용시키는 것 자체로 확실한 성능을 보장할 수 있느냐?... 이게 좀 불확실하기에 많은 학자들이 섣불리 뛰어들지는 않는것 같다. 이녀석의 가능성... 글쎄... 어지간한 능력으로 건드릴수 없기에 확실히 대단한 녀석이지만 현재로서는 거의 불확실한 미래에 대한 도전 정도가 되는것 같다.

    - 유전프로그래밍이 대체 뭐가 어떻다고... -

    혹시라도 국내에서 유전프로그래밍 관련 책을 본 사람이 있는지.... 없다. 한마디로 없다. 딱잘라말해 없다. 2007년 11월 11일 현재 책에 섞여있는 몇장에 걸친 언급 외에... 있는걸 본 사람이 있는가? 없다. 없어. 어딜 뒤져도 안나온다. 즉, 이녀석에 대해 알고싶다면 일단 머리아픈 영어에 익숙해야 한다는거... 아니 익숙하지 않아도 좋다. 어쨌든 외국 논문, 외국 서적, 외국 자료들을 봐야 한다. 그 뜻과 의미도 모호한 부분에 대해 정확히 이해할 수 없는 외국인들의 자료들...

    국내에서는 접근 자체도 폐쇄적인데다가 대학원 아니고서는 유전 프로그래밍에 대해 접근하는건 정말 힘들다. 접근성이 너무 나쁘다. 누가 만약에 지나가다 날 붙잡고 유전프로그래밍에 대해 설명좀 해주세요라고 묻는다면... 이론을 요래요래 요런거예요. 그럼 실제 예를 한번 보여 주시겠어요? 가장 깔끔한편인 lil-gp 를 예로 보여주면, 소스에 대해서 좀 언급을 해주시면... 멍... 멍... 왈왈 -_-... 내가 언급을 해줘도 상대가 이해할 수 있을 까도 궁금하지만, 사실 소스를 열었을 때 상대가 과연 저 소스를 이해하고 싶을까... 이게 더 궁금하다. 그정도다 한마디로... 다른것도 그다지 다르지 않다. 내가 그래도 이제까지 봐온 GP 소스 중에서는 lil-gp 가 가장 깔끔한 편에 속한다.

    그래 이렇게 어렵다. 하지만 더 문제는 국내에서 GP 에 대해 같이 연구할 자들도 거의 없다는거다. GA는 참 많다. ES 는 슬슬 많아질 형편이다. 얘가 CMA 라는 획기적인 녀석이 등장한 이후부터는 GA 보다도 더 초점이 맞춰지고 있는 분위기이기 때문에... 하지만 GP는 여전히 크게 뭐 없다. 아무리 외국논문을 보고 연구하고 생각한다고 해도, 내 생각에 절대 혼자하는 연구는 연구가 될 수가 없다. 연구는 고독 한거? 무슨 연구가 원맨쇼도 아니고 어떻게 연구를 고독하게해. 많은 부분에서 연구가 되고 있는것은 분명하지만 그 결과자체를 공개하기도 꺼려지고(왜냐고? 논문 써야지...) 서로간의 연구에 대해서 서로 공유하려는 움직임이 적은것 자체도 있다. 난 내 실력이 부족하지만, 좀 여러 분들과 연구해보고 싶다.

    - 알고리즘에 대한 연구들...(유전프로그래밍 자체에 대한...) -

    국내에서는 사실 알고리즘 자체에 대해 연구하는 분들 몇분 안계신다. 논문 나오는걸 보면 안다. 알고리즘 자체를 어떤 개선을 이루어내서 그것에 대해 외국애들하고 결과비교를 해서 역전했다 라는 결과보다는 그냥 어떤 분야에 이 알고리즘을 어떻게 적용 시켰더니 결과가 좋더라... 뭐 이런 식이다. (다 그렇다는건 아니고... 어디까지나 대부분이... ) 아예 새로운 뭔가를 만들어 냈다는건 더더욱 가뭄에 콩나듯이 찾기 힘들다. 사실 내 생각에도 우리나라 같이 수학적으로 풀어내는데 주력이되고 수학적 이론을 뭔가 발전시키고 이런 공부가 전혀 안되있는 환경에서는 뭘 더 발전시킬래야 발전 시킬 껀덕지가 있어야지... 수식을 보면 그걸 이해하기보다는 풀어내는데 급급한데...

    공학자라는게 사실 그런입장이라는 걸 모르는건 아니지만 늘 아쉽다. 외국애들 알고리즘이라고 만든거 보고 움찔움찔 한다. 생각도 못한 거다 사실. 기본적인 고등학교 정석에나 나오는 그런 공식들도 곧잘 이용해서 새로운걸 만들어낸다. 참 이런거 볼때마다 난 이제까지 무슨 공부를 해온것인가... 회의적인 생각도 든다.

    - 마지막 사족 -

    그렇다. 유전 프로그래밍이건... 유전 알고리즘 이건 문제는 이녀석들 자체로는 돈이 안된다. 그래 돈이 문제지. 이녀석 자체로 돈버는건 미국에서나 가능한 거고... 우리나라에서 "유전프로그래밍 전문가 입니다." 그래서 넌 뭘할줄 아는데?... 글쎄
    유전프로그래밍 전문가래잖아. 그래서 그걸로 뭘 할수 있는데... 이것저것... 근데 어쩌라고. 뭐 이런식? 그렇다. 알고리즘에 대한 중요도는 어디서 굴러먹다온 개뼉다귀만도 못한거다. 알고리즘 자체만 갖고는 아무것도 못하는게 문제... 이걸 어디다가 적용시켜야 그게 비로소 가치를 발한다. 알고리즘 자체가 엄청 발전되어 있다면 물론 적용 시켰을때 좋은 결과를 기대해 볼 수 있다. 하지만 그것만 가지고 있다고 해서 인정해줄 사람은 적어도 난 우리나라 에서는 없다고 본다. 학계에서 논문이 응용분야 적용에 대다수를 차지하는 것도 그런 이유라고 생각한다. 공학이니까. 돈의 논리가 적용되야하는 공학이니까. 하지만 한편으로는 아쉽다. 어디에다가 적용시킬 수 있느냐와 적용시켰을 때의 다른것에 비해 엄청난 향상을 이룰수 있다. 이 둘의 균형이 이루어 질 때에 비로소 가치를 발하는 것이라고 생각하지만, 지금 현 상황에서는 누가봐도 어디에다가 적용시킬 수 있느냐에 초점이 맞춰져 있기에... 그냥 개인적으로 아쉬울 따름이다.

    P.S 그냥 알고리즘과 적용분야에 대해 연구하는 학생으로서 끄적여 봤습니다.

    1. cjswomage 2007.11.21 20:05

      굿!

      • SHHyun 2007.11.26 17:37

        아잉~~

        머쨍님아 ㅋㅋ

        부끄럽게 ㅋㅋ

    + Recent posts