고등학교때 시작하고 처음 글 써 봅니다.ㅎㅎ
현재 크라이엔진가지고 프로젝트 진행중입니다. 올해 상반기에 스팀에서 보실 수 있을듯.
자세한 내용은 비밀이라 말씀드릴 수가 없네요.
크라이엔진 소스 코드를 가지고 있기에,, 현재 인공지능과 물리엔진 쪽을 손보고 있습니다.
요즘 구글 딥마인드에서 스타크래프트 인공지능 개발한다는 말을 듣고 저도 피가 끓네요.ㅎㅎ
제 인공지능 관련 지식과 게임 인공지능 관련 지식을 걸고 말씀드릴수 있습니다.
얄팍한 수를 동원해서 게임 로직 자체를 인공지능에게 유리하게 바꾸지 않는 이상 인간 고수를 이기는 것은 불가능합니다.
너무 많은 변수(바둑보다 경우의 수는 작지만 전혀 다른 성격. 바둑은 low-bias 모델입니다. 수식적 알고리즘 적용 가능)가 존재하기 때문이고,, 실제로 인간처럼 생각을 해야 얼추 비슷하게나마 맞춰갈 수 있습니다(여기서 불가능). 단순 패턴 인식 데이터 생성과 같은 방식으로는 인간의 순발력을 따라갈 수가 없습니다. 배운다는 것도 수 많은 패턴 중에 확률 높은 모델 고르는거에 지나지 않으므로 스타와 같은 다이나믹 한 게임에선 맥을 몾춥니다.
정말 간단한 예를 들어보죠. 컴퓨터가 프로토스고 인간이 저그라고 생각해봅시다. 저그가 발업 저글링으로 프로토스 일꾼을 몇마리 털어버렸습니다. 그럼 컴퓨터는 생각을 해야됩니다. 지금 가지고 있는 정보는 인간이 발업 저글링 6마리를 뽑았다는 사실 하나인데 이 상태에서 일꾼을 더 뽑을 것인가,, 아니면 방어위주로 할 것인가. 이것 조차도 굉장히 어렵습니다. 맵의 지형적 요소를 고려해서 상대방이 큰 유닛을 뽑을때 못 비집고 들어오도록 건물을 배치해야 하는데,, 컴퓨터가 지정학적인 요소를 계산하고 어떤 유닛은 못들어온다라고 생각해서 거기에 맞게 건물 배치할 수 있는 로직 하나만으로도 논문감입니다.ㅎㅎ 상대방이 멀티위주로 나가는 지 공격을 해 올지 확률은 반반이죠. 밸런스 맞춰서 둘 다 하다간 프로 상대로 바로 gg 입니다.
물론 게임 로직만으로도 특정한 상황에서 이런 저런 행위를 하도록 인공지능을 만들수는 있지만(모든 상황에 다 되진않더라도) 그러면 더 이상 인공지능이 아닌게 됩니다. 인공지능은 말 그대로 프로그래머들이 판을 정교하게 짜주면 거기에서 혼자서 성장할 수 있어야 합니다.
머신 러닝 딥러닝 관련 소프트웨어는 의외로 많습니다. Torch는 100% 오픈 소스이고 마음대로 이용해서 상업용도로 프로그램을 만들 수도 있습니다. 구글의 Tensor flow가 좀 더 좋다는 의견이 많지만,,, 같은 알고리즘으로 탄생된 애들이라 오십보 백보입니다.
비록 한계점도 많고 어렵지만,, 1주일에 하루 정도는 시간내서 구글 Tensor flow나 Torch로 취미 삼아 스타 AI 개발해보려고 합니다.
스타 AI만 dll 파일 컴파일 할 수 있게 블리자드에서 공개했기에,, 굉장히 재밌을 것 같네요.ㅎㅎ
Tensor flow c++ api 입니다. https://www.tensorflow.org/versions/r0.7/api_docs/cc/index.html
보시면 아시겠지만,, api만 일부공개했고,, 스타 수준 인공지능 개발하기엔 매우 역부족으로 보입니다.
shape recognition(물체 분별)과 같은 기능은 아무 쓸모가 없어지는,,
참 인공 지능은 진짜로 게임화면을 보고 이해하는 것이 아닙니다(지금 기술로는 넘사벽). 모든 게임 유닛 물체들을 제가 개체화 및 수식화 시켜서 정보를 실시간으로 스트림해야됩니다. 그 많은 정보들을 캐쉬해서 패킷(네트워킹 데이터 전송 유닛)으로 보내면 buffer overflow 혹은 heap overflow가 발생해서 버그날 확률도 높아지겠네요,,ㅜ
딥러닝 알고리즘이 이용될 수 있는 부분은 굉장히 제한적입니다.
일단 첫번째 목표는 제가 사전에 정해놓은 알고리즘과 딥러닝 만으로 상대방의 리버드롭 탱크 드롭을 사전에 방지하는 전략을 세우는 것입니다. 실제 상황에서 벌어지는 모든 미묘한 요소들을 고려하면,, 실전에서 거의 발릴거라고 생각도들고 거의 불가능할 것 같긴하지만,, 일단 도전해보겠습니다.
일반 게임 AI의 경우 몇 분 뒤에 드롭올 확률이 있으니까 미리 본진에 일부 병력 배치 정도입니다. 하지만 이렇게 하면 반칙이고,, 더 이상 발전도 없죠. 인공 지능이란 원칙적으로 제가 짜놓은 판에서 스스로 익혀서 그게 게임 플레이에 반영되어야만 합니다. 빌드 같은것도 여러 판 해서 혼자서 생각해낼 수 있도록 해야 진정한 AI라고 할 수 있죠.
아까 말했다시피 딥러닝은 물체 실루엣을 파악해서 비슷한 거끼리 모으는데 쓸 수는 있으나 절벽, 평지 이런건 구분을 못합니다.. 스타 맵을 타일화시켜서 높이 정보라든지 네비게이션 정보를 컴퓨터에게 일부 전달해야 합니다. 원칙적으로는 반칙이지만,, 이렇게 하지 않으면 애초에 게임이 성립되지 않습니다. ㅎㅎ
말로 할 수 없는 굉장히 미세하고 기술적인 부분들(이런것들이 결정적인 요소입니다)를 제외하고라도, 제 직감으로는 사실 불가능할 것 같습니다..ㅋㅋㅋ 구글도 일단 큰소리 쳤지만 아마 발 뺄겁니다. 실제로 붙으면 처참하게 깨질겁니다.
바쁘긴 하지만,, 시간나면 작업 진척도를 올리도록 하겠습니다.