티스토리 뷰

반응형
재미있었던 로보코드...^^


운동 경기를 보면 쓰는 기술들이 엇비슷하고 반복되는 데도 재미가 있습니다. 같은 기술이라도 간발의 차이에 의해 승부가 나는 박진감 때문일 것입니다. 올해 로보코드 대회 4강 진출자들은 그런 간발의 차이를 내기 위해 어떤 노력을 했는지 들어보겠습니다.

이종혁

▲ 자신만의 특화 전략은 어떻게 구상하셨나요.
김동환: 참가자 대부분이 반중력이나 웨이브서핑(wave surfing)을 이용할 것 같아 타게팅은 예측 인자(guess factor)를 이중으로 사용하여 정밀도를 높이려고 했습니다. 움직임은 필요할 때 랜덤으로 움직이자는 생각으로 구상했고요. 상대방의 체력 변화를 통해 총알 속도를 구하고 상대방과의 거리를 이 속도로 나누어 총알이 나한테 올 거라 예상되는 시간을 측정해 이 예상 시간 안에 상대방과 수직에 가깝게 움직이도록 했습니다.
조규현: 일반화된 전략이 최고라고 생각했습니다. 인터넷을 돌아다니면서 로보코드에 대한 자료들을 수집하고, 어떤 알고리듬이 최적인지 찾아보면서 난타전과 개인전을 따로 준비했습니다. 64강까지는 10개의 로봇이 대전을 함께 하기 때문에 개인전과는 분명 다른 전략이 필요했거든요. 난타전과 개인전이 달랐던 부분은 움직임과 스캐닝, 그리고 대전 시작시 가장 먼저 취하는 행동이었습니다. 그리고 전체적인 공격 전략은 총알을 발사할 때 에너지 감소가 있는 것을 감안하여, 제 에너지 감소는 최소화하고, 상대방의 에너지 소모를 최대한 유도했습니다.
Tartan 팀: Tartan은 일반 반중력에 부분적인 반중력을 더하였고 총알을 하나하나 예측하여 반중력을 추가했습니다. 레이더는 상대 로봇이 많을 경우 자동으로 레이더를 돌려 모든 로봇이 동일하게 업데이트된 정보를 가지도록 했구요. 타게팅은 상대 움직임을 모두 저장하여 각각의 움직임에 그 상황에 따른 점수를 매겨 가장 높은 점수를 가진 움직임을 불러와 예측 사격을 하도록 했습니다.
이종혁: 로보코드는 이제 오래되어 더 이상 새로운 전략이 나올 것이 없다고 해도 과언이 아닙니다. 로보위키(RoboWiki)에서 상위에 올라 있는 로봇들만 보아도 모두 같은 전략이지만, 누가 더 최적화했는지에 따라 순위가 달라지고 있습니다. 제가 적용한 알고리듬은 단체전에서 최소 위험 이동(Minimum Risk Movement), 개인전에서 웨이브서핑, 그리고 타게팅으로는 패턴 매칭입니다. 일반적으로 단체전에서 반중력 포인트를 두어 위험도가 가장 낮은 곳으로 움직이는데, 저는 적들의 정보에 의한 직접 계산으로 최소 위험 이동을 구현했습니다. 그리고 1대1에서 가장 좋은 움직임을 보이는 웨이브 서핑 알고리듬을 적용하였는데, 분석 결과 일반 웨이브 서핑이 회피율이 좋긴 하지만 학습을 하는 적을 만난 경우 그 회피율이 쉽게 떨어진다는 것을 발견하고 회피율을 더 높이고자 좌, 우, 가운데의 위험도를 확인해 회피율을 더 높일 수 있게 했습니다. 마지막으로 타게팅은 적의 자취(trace)를 계속 저장하여 가장 비슷한 패턴을 매칭시켜 적의 다음 위치를 예상하는 방법을 썼는데 이 부분은 특화보다는 최적화라고 해야 할 것 같습니다.

김동환

▲ 알고리듬을 구현하면서 어려웠던 점은 무엇인가요.
Tartan 팀: 지난해 1등을 이겼다고 해서 2, 3, 4등을 이긴다는 보장이 없었습니다. 한 로봇을 중심으로 개발을 하고 나면 그 알고리듬이 다른 로봇에는 잘 적용되지 않는다는 점이 어려웠습니다. 또 가능한 모든 로봇을 이기기 위해 많이 테스팅과 긴 시간이 필요했던 점도 어려웠습니다.
조규현: 레이더와 총의 라디안(radian)이나 이동 범위 설정이었습니다. get으로 적이나 자신의 로봇 정보를 가져와 상황에 따라 세팅을 하는데, 이 때 주로 세팅을 하는 게 레이더와 총신 방향, 발사 시점입니다. 하지만, 상황에 따라 세팅을 하는데 이런 동작들이 서로 충돌하는 것이 많이 어려웠습니다. 로봇 대전시 자세히 보면, 총신이나 로봇의 방향이 ‘부르르’ 쉴새 없이 떠는 로봇들을 볼 수 있는데 이는 세팅 값이 중복으로 설정되었기 때문입니다.
이종혁: 삼각 함수와 인공 지능을 다시 공부했던 부분과, 객체지향과 거리가 먼 세계적인 로봇들의 코드 분석이 어려웠습니다.
김동환: 막상 구현해 보니 가만히 있으면 맞지 않을 총알을 찾아가 맞는 일이 의외로 많았습니다. 몇의 확률로 이동 거리에 몇의 가중치를 줄 것인가에 쓰이는 상수를 구하기 위해 임의로 상수를 정하고 기본적인 웨이브서핑과 리니어 타게팅을 하는 로봇을 상대로 200판씩 10번을 겨뤘습니다. 이를 통해 얻은 최종 점수를 평균을 내 가장 좋았던 점수의 상수를 사용했는데, 이 점이 힘들었습니다.

▲ 준비하면서 참고한 자료(문서, 코드 등) 중 인상적이었던 것은 무엇인가요.
조규현: ‘Robocode 마스터의 비밀’을 많이 보았는데 가장 크게 도움을 주었던 것은 지난해 로보코드 대회 참가자들의 전략집이었습니다.
김동환: 지난해 대회 2등 로봇인 PJEbot 로봇이 코드가 매우 짧고 단순한데 순위권에 있다는 게 놀라웠고 MyBong과 같이 웨이브서핑에 리니어 타게팅을 쓰는 로봇을 압도했다는 것이 상당히 인상적이었습니다. 또한, 로보위키의 방대한 자료와 자세한 설명 그리고 사람들의 적극적인 참여가 매우 인상적이었습니다. 우리나라에도 그러한 포럼이 있었으면 하는 생각이 들었습니다.
Tartan 팀: 지난해 2등 코드가 매우 인상적이었습니다. 예제 코드를 그대로 써서 2등까지 할 수 있었다는 게 정말 대단했습니다.
이종혁: 매우 많은 분야에 대해 체계적으로 정리, 연구되어 있는 로보위키의 방대한 자료에 놀랐습니다. 특히 강화 학습을 더 빠른 학습을 위해 발전시킨 예측 인자가 가장 인상적이었습니다.

▲ 인상적이었던 내용을 자신의 로봇에 어떤 식으로 적용하셨나요.
이종혁: 예측 인자 방식의 가장 큰 장점은 빠른 학습이었습니다. 그리고 적응을 잘 한 경우에는 놀라울 만큼의 성능도 보였고요. 기본적으로 웨이브 서핑이 적용되어 있고, 제가 제출한 다른 로봇 중 하나는 예측 인자 타게팅을 적용했습니다. 하지만 예측 인자 방식은 어느 정도의 성능을 위해서는 매우 많은 시행착오가 필요한데, 움직임에서는 충분한 시행착오가 있었기 때문에 좋은 성능을 냈습니다.
김동환: PJEbot이 상대방의 체력 변화를 통해 움직이고 상대방과 수직을 이루는 점에 착안했습니다. 이 점을 더 발전시켜 상대방의 체력 변화를 통해 총알이 제게 날아올 예상 시간을 움직임의 기준으로 정하고 상대방과 수직에 가깝게 다음 위치를 잡고 이동 거리에 임의의 확률로 가중치를 두었습니다. 그리고 로보위키에서 수많은 로봇의 소스를 보고 무엇을 어떻게 구현했나 자세히 분석하고 연구했습니다. 이해하기 힘든 부분도 정말 많았지만 로봇의 토대와 개발 방향을 잡는 데 매우 많은 도움이 됐습니다.
Tartan 팀: 참고한 자료들을 직접적으로 적용하기보다는 우리가 만든 로봇과 대전을 시켜 점점 발전시켰습니다.
조규현: 로보코드를 시작할 때만 해도 아직 경험이 많지 않았던 터라, 대전시 어떤 상황이 일어날지 예측할 수 없었습니다. 참가자들의 전략집에는 이러한 상황들에 대한 대처법이나 개인들의 전략들이 있습니다. 전략집을 먼저 읽고 로봇을 구현했습니다. 전략집에서 읽은 것들을 토대로 제가 경험하지 못한 상황들을 예측해 설계했습니다.





위로


조규현

▲ 아찔했던 순간은 언제였나요.
이종혁: 8강전에서 HolyTank와 대전 때 지는 줄 알았습니다. 제 타게팅이 중후반이 되어서야 학습 효과가 나타나는 것이라 초반에 너무도 밀렸기 때문입니다.
조규현: 보통 소스 위치가 적절하지 않을 때 복사와 붙여넣기를 많이 사용합니다. 그러다 복사와 붙여넣기를 잘못해 스캐닝이나 공격 시점 등의 순서가 잘못된 채로 컴파일 했을 때가 몇 번 있었습니다. 로보코드란 것이 설계하는 대로 구현하면 좋겠지만, 실제로 대전했을 때 변화가 필요하다고 생각하여 소스를 다시 고치게 됩니다. 그래서 컴파일 하기 전 소스가 30줄 정도가 바뀌면 위치를 다 기억하기가 힘들었습니다. 그래서 가끔 한번씩 필요 없는 변수를 청소할 때도 있었습니다. 또 본선에서 1위를 한 로봇에 졌을 때는 무덤덤했는데 3, 4위전에서는 욕심이 났습니다. 3, 4위전에서는 90% 승률이었지만, 그래도 한 게임을 졌을 때는 아찔했습니다.
김동환: 4강에서 Sunkist와 대전해 7판을 졌을 때 가장 아찔했습니다. 결승전에 진출하지 못하겠구나 하고 아쉬워하고 있었는데 그 반대의 결과가 나와 의외였습니다. 오히려, 내 로봇의 총알 데미지가 높아 최종 점수는 Lamb of God이 더 높았습니다. 반전으로 이긴 경기라 더욱 기쁘기도 했고 아찔하기도 했습니다.
Tartan 팀: 경기 순간마다 아찔했습니다. Tartan이 총알을 맞을 때마다 또 적을 명중시켰을 때마다 아주 아찔했습니다.

▲ 아쉬웠던 점은 무엇인가요.

이종혁: 이번 대회는 지난해 대회와는 다르게 매우 강한 로봇이 많이 나온 것 같습니다. 순위가 대부분 타게팅에서 갈린 것으로 보이는데, 제가 구현한 패턴 매칭 타게팅의 학습 효과가 라운드 중후반에서야 나타나 초반에 상대 로봇에게 많이 당한 것이 아쉽습니다.
김동환: 집에서 만들 때는 단체전에서 제 로봇이 얼마나 상대방을 잘 맞추는지 눈으로 보기 위해 총알을 빨간색으로 지정했는데, 대회에서는 제가 앉은 자리에서 총알이 제대로 보이지 않아 제 로봇이 상대방을 얼마나 맞추는지 보질 못했습니다. 이 점이 아쉬웠습니다.
조규현: 아쉬웠던 점은 역시 1위를 한 로봇과 대전시에 80%의 승률을 내고도 총점에서 점수가 낮아 진 것입니다. 또 후배들이 많이 참가했으면 하는 바람이 있습니다. 로보코드에 참여하기 위해 몇 번의 세미나를 했습니다. 지방대이고 IT 관련 대회가 많지 않아 좋은 기회라고 생각해 후배들에게 참여하도록 많이 권했지만, 생각보다 후배들이 많이 참가하지 않았습니다. 다들 프로젝트 때문에 바쁜 것도 있었지만, 로보코드가 그렇게 많은 시간을 투자하지 않아도 되는 것을 생각하면 아쉬운 부분이었습니다.
Tartan 팀: 아쉬웠던 점은 대회 준비 기간이었습니다. 준결승에서 상대 로봇이 멈추었을 때 득점을 많이 땄어야 하는데 이 대회를 너무 늦게 알았고 팀원 4명 다 평일에는 회사에서 인턴을 하느라 충분한 테스팅을 하지 못해 여러 경우를 생각 못한 점이 너무 아쉽습니다.





위로


김광연 외 3명

▲ 대회를 통해 무엇을 얻으셨나요.
Tartan 팀: 이번 대회를 통해 팀워크의 중요성을 다시 한번 느꼈습니다. 만약 혼자서 이 대회에 참여했다면 절대로 4강까지 오지 못했을 것입니다. 2주간의 아주 짧은 기간 동안 팀원 4명이 협력하여 이룬 성과라 봅니다.
조규현: 대회를 통해 얻은 것은 응원하는 즐거움이었습니다. 로보코드 대회장이 생각보다 조용했는데 아무래도 좌석 배치가 16강 진출자 좌석이 따로 있어서라고 생각합니다. 저는 일부러 16강 진출자 자리에 앉지 않고 지인들과 함께 뒤쪽에 앉았습니다. 그래서 이야기도 하고 함께 응원도 했습니다. 그리고 다른 로봇의 알고리듬을 예상하고 분석도 해보았는데 그런 점들이 즐거웠습니다. 또 개발을 하면서 웃을 수 있는 기회가 그렇게 많지 않았는데 이번 로보코드는 같은 개발이라는 맥락에서 보면 즐거움을 주었다고 생각합니다.
김동환: 손댄 프로그래밍 언어는 많지만 제대로 할 줄 아는 것은 없는 게 사실이었습니다. 하지만, 이번 대회를 통해 자바라는 언어에 대해 자신감을 얻었고 단순히 게임을 즐기는 것보다 게임을 개발하는 것이 더 재미있다는 사실을 알게 됐습니다.
이종혁: 대학 생활 막바지에 좋은 경험을 얻었습니다.

▲ 만약 이런 류의 게임을 만든다면 어떤 식으로 개발하시고 싶나요.
김동환: 상품으로 받은 맥북을 쓰면서 우리나라에서 맥을 즐기기가 여러모로 힘들다는 점을 알았습니다. 윈도우를 쓰든지 맥을 쓰든지 리눅스를 쓰든지 플랫폼에 상관없이 즐길 수 있고 사용자가 주어진 조건 하에서 자신의 머신을 스스로 개발할 수도 있고 개발한 머신으로 직접 플레이해 다른 사용자들과 겨뤄볼 수 있는, 단순히 즐기는 것 이상의 게임을 만들고 싶습니다.
이종혁: 로보코드는 단순한 환경 속에서 복잡하게 전투를 한다고 생각합니다. 자바 언어 학습을 위해서는 로보코드가 이미 있으니 로봇 자체 설계, 여러 가지 환경 요소 등을 추가한 더 고난도 전투 시뮬레이터를 만들면 좋을 것 같습니다.
조규현: 현재 로보코드는 인터넷에서 상대방과 실시간으로 대전을 할 수 있는 시스템이 아닙니다. 게임을 하려면 주위 사람들이 함께 로보코드를 해야만 합니다. 대전을 통해서만 자기 로봇의 우수성을 증명할 수 있기 때문입니다. 웹에 로봇을 올려 누군가가 대전해주길 바라기보다 실시간으로 상대방과 대전을 할 수 있는 시스템이 마련되면 좋겠다는 생각을 해봅니다. 그렇게 되면 지속적인 관심을 받을 수 있으리라 생각합니다.
Tartan 팀: 조금 더 높은 난이도의 게임을 만들고 싶습니다. 단순히 배틀 필드에서 싸움을 하기 보다는 장애물이나 어떠한 임무를 가지고 싸울 수 있는 게임을 개발하고 싶습니다.

김광연 외 3명

▲ 로보코드에서 개선되기를 바라는 점은 무엇인가요.
김동환: 편집기가 사용하기에는 많이 불편했습니다. 작업을 하다 보면 알 수 없는 이유로 코드 하단 부분이 조금 삭제되기도 했습니다. 더 개발하기 편한 편집기가 제공되었으면 좋겠고 어떤 로봇과 100판을 겨뤄 10판을 졌을 때 그 10판에 대한 리플레이를 따로 지원해주면 좋을 듯 합니다. 일일이 100판을 다 리플레이 하기는 힘들기 때문입니다.
조규현: 이클립스와 에디트플러스를 사용했는데 기본으로 제공되는 편집기가 기능이 너무 없어서였습니다. 찾기 기능도 새로운 버전에서 보여줬지만 많이 떨어진다는 생각이 들었습니다. 좀 더 기능이 많은 편집기를 기본으로 제공하면 좋겠습니다. 그리고 API 한국어 번역도 많은 도움을 줄 수 있으리라 생각합니다. 현재 API는 영어로 제공되는데 해석이 애매한 것들은 해당 메서드나 클래스가 들어간 로봇을 찾아 구현해 봐야지만 이해할 수 있었습니다.
Tartan 팀: 로보코드 프로그램 자체는 아주 훌륭하다고 봅니다. 초급자부터 상급자까지 누구나 쉽게 배우면서 할 수 있는 좋은 프로그램입니다.
이종혁: 이미 로보코드 환경에 대해 굉장히 많은 연구와 성과가 있기 때문에, 환경적인 요소(지형지물, 바람)를 추가하면, 더 다양한 전략이 나올 수 있다고 생각합니다.

 

[수상자 소개]
1위, 김동환: 고려대학교 신소재공학부 2학년에 재학 중이다. 록/메탈을 듣는 것을 좋아해 로봇 이름을 개인적으로 좋아하는 미국의 메탈코어 밴드 Lamb of God에서 따왔다. 또, 웹 디자인과 웹 프로그래밍에 관심이 많아 틈이 나면 홈페이지를 제작하기도 한다.
2위, 이종혁: 경기대학교 컴퓨터과학과 4학년이다. 이번 대회에는 ActionSchool 시리즈(ActionMask, ActionHero, SilverZero) 로봇 세 개를 제출했다.
3위, 조규현: 호남대학교 인터넷소프트웨어학과 4학년에 재학 중이다. 졸업을 앞둔 터라 취업 준비 때문에 로보코드 참여를 망설였지만, 재미있을 것 같아 시간을 내어 참여했다. 로봇 이름인 Sunkist는 프로젝트를 하던 건물 5층 자판기 음료수에서 따온 것이다.
4위, Tartan 팀: Tartan을 만든 팀원들은 현재 미국 카네기 멜론 대학교(Carnegie Mellon University)에 재학 중이다. 전기•컴퓨터 공학을 전공하는 김광연(2학년), 정재윤(3학년), 그리고 컴퓨터과학을 전공하는 김민규(2학년), 허제웅(2학년)으로 구성됐다. 현재 각각 한국IBM, 삼성전자, 삼성SDS, LG전자 등에서 인턴으로 일하고 있다.

반응형
댓글