오르카의 아틀리에



한창 신입생 때 Facebook에서 서비스하던 테트리스 게임이 유행했었다. 같은 동아리 안에서 그 테트리스를 엄청나게 잘하는 형이 있었는데 범접하기 힘든 수준…. 같은 학교 동기였던 나와 정수는 기계의 힘을 빌려서라도 그 형을 이기고 싶어서 유전 알고리즘을 이용하여 Facebook Tetris AI를 만들려 했다. 하지만 프로젝트가 끝날 즈음에 게임 등급 심의 위원회가 태클을 거는 바람에 Facebook이 테트리스 서비스를 종료하게 되면서 프로젝트가 중간에서 멈춰버리게 되었다.


게등위 때문에 프로젝트를 마감하지 못한 것에 부들부들하고 있을 때 그냥 지금까지 한 내용이라도 정리해서 동아리 문서도 만들고 내부 세미나에서 발표를 했는데, 날려버린 줄 알았던 그 자료를 발견하게 되어서 간단하게나마 포스팅을 해보려 한다.

유전 알고리즘

유전 알고리즘이란? 한 마디로 유전 알고리즘은 유전이라는 자연 현상을 이용하여 특정한 문제에 대한 최적해 에 가까운 답을 구하기 위한 알고리즘이라고 할 수 있다. 비교적 심플한 방법의 머신러닝 기법이다. (근데 나는 이대 머신러닝의 "ㅁ"자도 몰랐다고 한다...) 기본적인 것만 설명해보면, 기본적으로 학습단위는 "세대"이고 서로 다른 유전자를 가진 개체를 여러 개 만든 뒤, 성능을 측정하고 성능을 기반으로 표본을 추출한 뒤 적당히 유전자를 섞어서 다음 세대의 개체를 만드는 사이클을 가지고 있다. 이 사이클을 여러 번 돌리면서 최적화를 해나가는 것이다. 모델을 보면 정말 우리가 과학 시간에 배웠던 <유전학>과 <진화론>을 기반으로 두고 있다는 것을 알 수 있다.


인터넷에서 커뮤니티를 좀했거나 유튜브에 놀기 좋아했다면, 한번쯤 봤을만한 영상이고 시리즈도 꽤많은 유전 알고리즘관련 영상이있다.



사실, 테트리스를 유전 알고리즘으로 최적화해보자는 생각도 이 영상을 보고 하게 되었다. 영상을 보면 알겠지만, 처음에는 되게 멍청하게 움직이지만, 마지막에 가서는 동작은 조금 어색할지 몰라도 그네를 확실히 잘 타고 있는 것 같다는 느낌이 든다. 자세한 내용을 포스팅 내용으로 풀어쓰지는 않을 것이지만, 그때 당시 작성했던 PPT와 문서를 공유할 것이니 참고하면 도움이 될 것 같다.

PPT

동아리에서 내부 세미나 발표에 사용한 PPT인데, 그림 설명 위주이기때문에 대략적인 흐름만 파악하고, 보다 자세하게 작성된 관련 문서를 참고는 것이 좋을 것같다. 애니메이션을 사용하지 않았기 때문에 페이지를 넘기는 것으로 애니메이션 페이즈를 넣었다. 생각보다 분량이 적으니, 부담없이 읽는 것이 좋을 것 같다.