Previous Contents 51

모토쿼티 프로요 업데이트 소감

본래 쿼티자판덕분에 참 잘쓰던 모토쿼티인데, 사실 좀 느린감이 없지않아 있었습니다. 오늘자인지 프로요 업데이트가 나왔길래 바로 달렸습니다. 업데이트 후에 버벅버벅 하시길래 그냥 아무생각없이 공장초기화를 수행 했습죠; 애초에 포맷하려고 마음 먹었던지라... 아무 미련없이 질러주시고, 부팅하고 나니 신세계네요 공장초기화 방법 - http://blog.naver.com/PostView.nhn?blogId=ajg147&logNo=100116711177 1. 기본 런처도 꽤 빠르게 반응함 이거 별거 아니지만 좀 충격입니다. 처음에 모토쿼티 부팅후에 버벅버벅 거리는 그 기본 런쳐를 보고 엄청난 실망감이 들었었는데, 이번엔 아니군요. 런쳐프로 깔았을때 느끼는 그 속도 수준으로 잘 움직여서 상당히 놀랐습니다;; 프로요..

CGP(Cartesian Genetic Programming)

CGP는 본래 논리 회로에 대해서 많이 사용되기 때문에, 별 관심이 없다가 최근에 몇가지 가능성을 보고 찾게된 이론이다. Linear GP 나 CGP 등 사실 Tree 기반의 GP 보다 구현이 쉽기 때문에 찾아보게 된 이유도 있다. 우선 기법에 대해 살펴보면 아래와 같다. 기존의 Tree 기반의 Genetic Programming과는 약간 다른 Integer String 으로 개체를 구성한다. 하나의 개체는 아래의 그림과 같이 구성할 수 있는데, (1) (2) 는 입력을 의미하고, (3) 은 해당 노드의 연산자를 의미한다. 즉, 1, 2 로 부터의 입력을 3 의 처리를 거쳐 output 1 을 만들어내는 식인데, 이때 CGP 에서 출력은 사용자가 지정하는 것이 아니라 자동으로 지정되는 형태를 갖는다. 이..

윈 7 32bit 에서 ReadyFor4GB 를 통한 메모리 4GB 사용의 문제

ReadyFor4GB 라는 프로그램을 사용해서 윈 7 32비트에서도 메모리를 4기가 모두 사용할 수 있는 것으로 알려져 있습니다. 4GB(3.11GB 사용가능) 과 같이 4GB를 쓰는데 왠지 4GB를 다 못쓰는것 같아서 좀 아까운 기분도 들고 저도 한번 사용해 봤는데, 부작용이 발생했습니다. Firewire 관련 부작용인데, PCMCIA Express 타입의 IEEE1394 카드에 Firewire 형태의 외부 카메라를 연결했는데, 인식만 되고 사용이 전혀 되지 않았습니다. PC IEEE1394 상의 데이터 전송 대역폭이 모자라서 데이터 전송이 불가능하다는 메세지가 계속 나타나더군요. 본래 잘 쓰던 카메라라 당연히 잘 될거라 생각했는데 안되니 좀 어이가 없었습니다. 원인을 한시간 가까이 찾아 헤메다가 이전..

SGA using CUDA

이전에 간단하게 만들어두었던 SGA의 Fitness Evaluation 동작만을 CUDA 에서 실행하는 코드 난 지금까지 이걸 올렸다고 생각하고 있었는데, 다시보니 그게 아니었다. 이건 뭐 XX도 아니고...;; (*) 일단 코드는 최적화는 전혀 되어 있지 않은 상태이며, 오히려 기본 GA보다도 Evaluation 성능이 떨어질 수 있다. 컴파일 환경은 쓰고싶은대로 아무거나 써도 이상이 없을 코드이며, 이전엔 Visual Studio 2008 에서 작업했었다. CUDA에 대해서 가장 기본적인 코드라고 생각해도 될 코드이기때문에 혹시라도 이런 종류의 알고리즘을 다뤄보고 싶으신분은 살펴보면 좋을 것 같다.

휴머노이드 보행 로봇의 적용을 위한 해 공간의 특성 분석 자료

로봇 게이트 생성 기법을 4족 보행 -> 휴머노이드로 이전하면서, 해공간의 특성 분석이 필요해서 몇가지 샘플트리에 대해 적합도 공간 변화가 어떤지 체크해본 그래프이다. 4족 보행 로봇의 경우 네 발로 지탱하는 특성 때문에, 안정성에 대한 지표가 크게 변하지 않지만, 휴머노이드는 넘어짐이라는 특성이 발생하기 때문에 아주 작은 변화에도 결과에 매우 큰 영향을 주는 현상이 나타날 수 있다고 생각했고, 그것을 증명하기 위한 그래프 자료이다. 아래와 같은 각각의 트리에서 ERC 값, 즉 실수값을 P1, P2, ... ,P8 의 변수로 표현하여, 각각 0.001 씩 증가시키면서 해공간의 변화를 나타낸 것이다. x 축은 0.001씩 몇번이나 증가 시켰는지를 의미하며, y 축은 적합도값을 의미한다. HP: (/ (/ ..

최적화와 학습이란 용어 대한 생각...

내가 주로 연구하는 것은 최적화(Optimization)이다. 학습에 대해서는 분명 최적화만큼의 지식이 없으며, 이에 대해 여전히 상당한 혼란을 겪고 있음을 사전에 밝힌다. 최적화는 일반적으로 수학에서 많이 쓰이는 용어이며, 가장 대표적인 예로는 실수 최적화가 있다. 어떠한 주어진 함수 f(x) 의 최대 혹은 최소 값을 찾아내는 문제로서, 미분이 가장 대표적으로 사용되는 기법이다. f'(x) = 0 인 지점을 변곡점이라 하고, 이 변곡점들에서 최대, 최소값이 발견될 수 있다. 유전 알고리즘이나 진화 전략(Evolutionary Strategies) 혹은 PSO(Particle Swarm Optimization) 기법들 또한 이런 최적화를 위한 도구이며, 종종 최적화라는 이름으로 언급되곤 한다. 학습(Le..

GAlib for visual studio 2008 lib file

GAlib 가 가볍고 잘 만든 Genetic Algorithm Library 인데 개발 중단된지도 오래되었고, 현재 최신버전의 컴파일러에서 컴파일은 되지만 링크가 되지 않는 문제가 있다. http://www.hyperdrifter.com/software/tutorial/compiling_galib_using_microsoft_visual_cpp.html 위의 링크에서 말하는대로 컴파일하면 링크이상없이 잘 수행되는 것을 확인할 수 있고, 첨부된 파일은 귀찮고 단지 library 파일만 쓰고싶은 사람을 위한 것이다.

GA나 GP의 이론 검증의 어려움

GP 의 해가 가지는 특성을 파악하기 위해 실험을 통해 대규모의 데이터를 수집하였다고 가정하자. 그리고 대부분의 해에서 나타나는 어떠한 특성이 발견 되었다면, 과연 여기서 대부분의 해는 반드시 그 어떤 특성을 갖게 되는 것일까? GA, GP 의 조기수렴이 해의 다양성에 악영향을 끼치고, 좋은 결과로 수렴하는 것을 방해한다고 했을 때, 조기수렴을 막으면 반드시 해가 다양성을 폭넓게 가지면서, 좋은 결과로 수렴할 것인가? 어떠한 명제를 가정했을 때, 그 역이 반드시 참일것이라는 보장 같은 것은 없다. 결국 우리가 일반적으로 데이터를 수집하여 하는 일은 대부분이 그러한 특성을 보인다는 것에서 끝나는 것인데, 이것의 역을 증명해낼 좋은 방법은 없을것인가? 몇년째 계속 고민해보지만, GA, GP 쪽에서는 이를 어..

CUDA Programming

병렬처리는 결국 필수 불가결한 요소가 될 것임에는 분명하다. 확실히 단일 코어 발전 대비 성능 비율이 언젠가부터 매우 낮아진다는 것을 확인할 수 있다. CPU 를 듀얼 혹은 쿼드로 쓰는 것도 꽤 매리트가 있지만, 알고리즘을 연구하는 사람으로써 그런 한 두개의 병렬을 가지고 큰 효과를 보기에는 그 한계가 명확하다. 결국 요래저래 살펴보다가 또다시 GPU 쪽으로 눈이 돌아가게 되었는데, 그 당시에는 그렇게 어렵게만 느껴지던 CUDA 라는 것이 그렇게 어려운 녀석이 아니었다. 일련의 흐름에 따라서 프로그래밍을 하면 되는데, 1. 디바이스의 초기화 2. GPU 상의 메모리 할당 ( cudaMalloc ) 3. CPU 상에서 GPU 상으로 처리할 내용을 복사 ( cudaMemcpy ) 4. 커널을 수행함으로써 원..

윈도우에서 Sleep 함수 사용

#include #include void wait(double sec) { unsigned int msec; assert(sec > 0); msec = (unsigned int) floor(sec * 1e3); assert(msec >= 10); Sleep(msec); } 리눅스용 프로그램을 윈도우로 변환하다가 가끔씩 애를 먹었던 부분인데 ( 나만 그런지 모르겠지만…;; 윈도우에서 Sleep 함수는 저런 형태로 사용할 수 있다. 리눅스에서는 #include #include void wait(double sec) { unsigned int msec; assert(sec > 0); msec = (unsigned int) floor(sec * 1e3); assert(msec >= 10); usleep(msec..