일요일, 8월 07, 2016

AI Project: Connect4


2016년 1학기 인공지능 수업에서 프로젝트로 진행했었던 Connect4 게임 인공지능이다. 제출한 데모 버전에 버그 픽스, 기능 추가, UI 개선 등의 과정을 거쳐서 나름 완성에 가까운(?) 버전으로 업그레이드했다.

1. Connect4란 무엇인가
https://en.wikipedia.org/wiki/Connect_Four
Connect4는 한국에서는 생소한 게임이지만, 기본적인 룰은 5목과 유사한 "4목"이라고 할 수 있다. 돌 네 개를 수직, 수평 혹은 대각선으로 일렬로 놓으면 이기는 간단한 게임이다. 그런데 특징은 아무데나 원하는 곳에 돌을 둘 수 있는 것이 아니라 세로줄 중 하나를 선택해서 Stack처럼 아래에서부터 채워야 한다는 것이다. 따라서 생각보다 수읽기가 까다롭다.
게임판은 8x8 또는 7x6으로 두 가지 종류가 있는데, 해당 프로젝트에서는 7x6 보드를 사용하였다.


인공지능은 하, 중, 상의 난이도로 나누었는데, 상의 난이도를 기준으로 하면 대략 10수 앞 정도를 내다보고 수를 둔다고 생각하면 된다. 판에 놓인 돌의 수가 많아질수록 내다보는 수도 점점 증가한다.

2. Demo

3. 개발 환경
Eclipse Java EE IDE for Web Developers.
Version: Mars.2 Release (4.5.2)
Java 언어를 사용하여 개발하였다. IDE로는 이클립스를 사용하였다.
GUI는 복습 겸 awt를 통해 구현하였다. Swing을 사용하지 않아서 꽤나 시간을 많이 잡아먹었다.

4. 구현 알고리즘
Minimax Algorithm + Alpha-beta Pruning (Game Tree)
https://en.wikipedia.org/wiki/Minimax
https://en.wikipedia.org/wiki/Alpha-beta_pruning

5. Heuristic Function
Winning Line의 수를 세는 것을 바탕으로 스코어링을 했다. 일렬로 놓이는 돌의 개수가 많을수록 높은 점수를 얻으며, 가능한 모든 Line에 대한 점수를 합산하여 다음 수를 두는 데 반영하였다.


6. Source Code
자세한 사항은 Github에서 확인할 수 있다. 전체 소스코드와 실행파일(.jar) 및 보고서가 포함되어 있다.
https://github.com/arkainoh/Connect4

jar 파일을 실행하려면, 해당 파일이 있는 위치에서 터미널을 열고 다음 커맨드를 입력하면 된다. 컴퓨터에 Java가 설치되어 있고, 환경변수 설정이 완료된 상태여야 한다.
java -jar Connect4AI.jar

댓글 없음:

댓글 쓰기