구글 제미나이 캔버스로 AI 프로토타이핑 오목 게임 만들기 3탄

지난 2편에서는 제미나이 캔버스를 활용해 난이도를 구현하여 플레이를 할 수 있도록 만들었다.

1편 : https://soonsoon.io/google-gemini-canvas-ai-prototyping-omok-game-making-part-1/

2편 : https://soonsoon.io/https-soonsoon-io-google-gemini-canvas-ai-prototyping-omok-game-making-part-2/

이번에는 다른 알고리즘을 추가하여 AI끼리 대결하는 시뮬레이션 게임을 만들어보려고 한다.

이번 글에서는 기존 AI에게 추가적으로 알고리즘을 부여하여, 기존 점수 기반 시스템과 오목에서 많이 활용되는 미니맥스 알고리즘을 추가하여 둘이 대결하는 것을 구현해 볼 것이다.

< 이미지 출처 : 구글 딥마인드 >

미니맥스 는 인공지능 , 의사결정 이론 , 조합 게임 이론 , 통계학 , 철학 에서 최악의 경우( 최대 손실) 에 대한 가능한 손실을 최소화하기 위해 사용되는 의사결정 규칙 입니다. 이득을 다룰 때는 최소 이득을 최대화한다는 의미로 “maximin”이라고 합니다. 원래는 여러 플레이어가 번갈아 움직이는 경우와 동시에 움직이는 경우를 모두 포함하는 여러 플레이어의 제로섬 게임 이론을 위해 공식화되었지만, 더 복잡한 게임과 불확실성이 있는 상황에서의 일반적인 의사결정으로 확장되었습니다. – 출처 위키디피아

먼저, 알고리즘 간 배틀이 구현이 가능한지 확인해보기 위해 내용을 넣어보았다.

즉, 기존의 알고리즘은 단순히 각 자리를 점수로 계산해서 가장 높은 점수를 얻을 수 있는 부분에 돌을 둠으로써 승리를 하고자 노력했다면, 이제는 미니맥스 알고리즘을 써서 몇수 앞을 내다보는 기능을 부여하는 것이다.

그리고 추가적으로 “운” 이라는 파라미터를 생성해서, 이 운 수치로 알고리즘이 발동하는 확률을 작동시켜서, AI 의 능력치 개념을 부여하는 것이 목표이다.

따라해보고 싶은 분들은 이전 편에 이어서 아래 프롬프트를 입력하면 된다.

✅ 프롬프트

AI 설정을 위한 UI를 만들고, AI들이 차례대로 돌을 두는 기본 흐름을 구현해 주세요.

요구사항:

설정 패널 UI: ‘AI 1 (흑돌)’과 ‘AI 2 (백돌)’을 위한 설정 영역을 만듭니다. 각 영역에는 다음 두 가지를 추가해주세요.

지능 선택: ‘점수 기반’과 ‘미니맥스’ 버튼을 만듭니다.

운 (정확도) 선택: 0%부터 100%까지 조절 가능한 슬라이더를 만듭니다.

게임 흐름: ‘AI 대결 시작’ 버튼을 누르면, 두 AI가 번갈아가면서 일단은 랜덤한 빈칸에 돌을 두도록 만들어주세요.

게임 종료: 한쪽이 5개의 돌을 연속으로 두면 게임이 끝나고, 화면 전체를 덮는 승리 메시지와 ‘다시 하기’ 버튼이 나타나게 해주세요.

실제로는 재미나이 캔버스에서 조금씩 UI 가 달라질 수 있다. ( AI 코딩의 한계? )

바로 구현되었고, 돌도 잘 놓아주는 모습을 볼 수 있다. 이어서 다음 작업을 진행하였다.

✅ 프롬프트

이제 AI가 똑똑하게 수를 두도록 ‘지능’ 알고리즘을 구현해주세요.

요구사항:

설정 패널에서 ‘점수 기반’을 선택하면, AI는 각 빈칸에 돌을 놓았을 때의 공격 점수와 수비 점수를 계산해서 가장 좋은 자리를 찾아 두게 해주세요.

‘미니맥스’를 선택하면, AI는 몇 수 앞을 내다보고, 특히 상대방이 4개의 돌을 놓아 바로 이길 수 있는 결정적인 자리는 최우선으로 막도록 만들어주세요.

지금은 ‘운(정확도)’ 슬라이더는 무시하고, 항상 계산된 최선의 수를 두도록 해주세요.

두 AI가 번갈아가며 공격과 방어를 진행하면서 오목을 두는 것을 확인할 수 있다.

알고리즘은 구현되었으니 이제 더 게임처럼 느껴지도록 AI에게 인간적인 실수를 추가하기로 하였다.

이제, 운에 따라서 AI 들의 능력치가 차이나는 것을 볼수 있다. 약간이나마 게임 같은 느낌이 들기 시작한다.

100%일때는 무승부만 나올 정도로 둘이 공방을 이어갔지만, 운이 줄자마자 선공이 유리한 오목답게 흑이 바로 승리를 거뒀다.

AI 패턴을 만들어놓고, 왜 이런일이 생길까 곰곰히 분석을 해보니….

점수 기반 AI는 자신의 턴마다 가장 유리한 위치를 놓고, 미니맥스는 상대가 돌을 놓은 다음 가장 유리한 수를 계산하다보니 방어적인데, 그러다 보니 선 후공 유무에 따라서 승률이 차이나는 것을 확인할 수 있었다.

현재 점수 기반 AI는 눈 앞에 이득을 보는 알고리즘이다보니, 빠르게 현재 상황에서 가장 이득을 볼 수 있는 곳에 돌을 놓고, 미니맥스 AI는 여기에 두었을 때 상대방이 나올지를 미리 시뮬레이션 해보고 유리한 결과를 가져오는 수를 선택하고 있다.

인간 프로 기사처럼 수십 수 앞을 내다보게 하려면, AI가 계산해야 할 경우의 수가 기하급수적으로 늘어나 웹 환경에서는 구현하기가 무척 까다로워지기에 현재의 미니맥스는 두어 수 앞만 내다보는 수준이다. 지금은 웹에서 문제 없이 돌아가는 수준만을 구현해 놓았기에 승률 차이가 나는 것 같다.

전체적인 제작 과정은 아래 영상을 참고하길 바란다.

이번 내용을 통해서 AI 프로토타입의 한계와 가능성을 동시에 깨달을 수 있었다.

먼저, AI 에게 손쉽게 코딩을 시키다보니, 테스트해보고자 하는 기능을 빠르게 구현해보고 그 과정속에서 어떤 부분이 문제인지, 어떤걸 좀 더 구체적으로 생각해야 하는지를 고민할 수 있는 장면이 연출 되었다.

이번 글에서 보면

  1. 흑돌이 무조건 유리한데, 이를 어떻게 해결 할 것인가.
  2. 단순히 점수와 예측 수만으로 오목을 두게하면 게임이 단조로워진다.

인 부분 같다.

즉, 실제 게임을 만들기 위해서 “사람” 이 두는 것 처럼 AI 코어를 만들기 위해서는 더 많은 고민이 필요하다는 부분이다.

즉, 이 부분을 해결하기 위해서 AI 도움을 받을 수 도 있지만, 동시에 인간이 좀 더 사고판단을 하고 로직을 짜고 AI 에게 올바른 길을 지시할 필요가 있다는 생각이 든다.

정리하자면, AI 는 빠르게 사고하고 빠르게 구현함으로써 인간에게 다양한 가능성을 제시해주지만, 이는 동시에 원래 목표에서 좀 돌아가는 경향이 생기기 때문에 적절한 순간에 잘 분석하고 판단하는 것은 아직은 인간의 몫인것 같다.

다음 편은 더 시뮬레이션을 발전시켜 실제 오목 고수랑 하는 게임처럼 더 재미있게 느껴지도록 하는 과정을 올려보려 한다.

Category: ,

Comments

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다