[2017 삼성 육목대회] 15. 최종 프로그램

Depth 5, 6, 7 끼리 자가대결을 했을 때 Depth 5 vs Depth 6 / Depth 5 vs Depth 7 은 승률이 반반이었으나 Depth 6 vs Depth 7에서 Depth 7이 압도적으로(승률 80% 이상) 이기는 것을 보고 Depth = 7로 정했습니다.


앞의 게시글에 적어두었듯이 Breadth = 3, Depth = 7로 설정하면 지금 쓰는 데스크탑에서 매 턴마다 대략 3초 내외를 사용했고 주어진 시간을 최대한 다 활용하기 위해서


i) 현재 보드에서 맨 처음 내가 둘 수 있는 수의 후보는 3개로 제한하지 않고 시간이 허락하는 한 최대한 많이 트리를 만듬

ii) i에서 계산한 현재 보드에서 맨 처음 내가 둘 수 있는 수의 후보 각각에 대해 상대의 대응수 후보 중에 점수가 높은 4개를 계산

iii) ii에서 계산한 상대의 대응수에 대한 나의 대응수를 3개 계산

iv) iii에서 계산한 나의 대응수에 대한 상대의 대응수를 3개 계산

.

.

.


이렇게 총 7단계를 들어갑니다.


즉 제일 상위 레벨에서는 Breadth에 제한을 두지 않고 시간이 허락하는 한 최대한 크게 잡고, 바로 밑의 레벨에서는 Breadth = 4이고, 그 이후로는 Breadth = 3입니다.


예선과 비교했을 때


1. 예선에서는 Breadth = 4, Depth = 5였지만 지금은 Breadth = 3, Depth = 7이다. 여러 함수들을 최적화시켜서 두 수를 더 내다볼 수 있게 되었다.

2. 예선에서 Factor를 주먹구구식으로 정했지만 지금은 합리적인 방법으로 최적의 Factor를 정했다.

3. 대회에 쓰이는 컴퓨터의 연산이 예상보다 많이 느리거나 많이 빠르더라도 주어진 시간을 최대한 활용해서 최적의 답을 얻어낼 수 있도록 코드를 수정했다.


정도가 큰 차이라고 볼 수 있겠습니다. 결선용 최종 프로그램과 예선때 제출한 프로그램을 대결시켜보았을 때 결선용 프로그램이 거의 승률 90% 정도는 나오는 것 같습니다. 매우 만족스럽네요.


예선떄와 비슷하게 일주일만에 정말 모든걸 쏟아부어서 만들어냈습니다. 개발기간동안 진짜 하루종일 어떻게 하면 더 개선할 수 있을까 그 생각만 한 것 같습니다. 맨날 해떠오를 때쯤 자고(지금이 오전 8시경인데 아직까지 안자고있네요. 빨리 끝내고싶어서ㅠㅠ) 잘 때에도 프로그램을 돌려놓고 일어나자마자 결과 확인하고 코드 수정하고 그런 생활의 반복이었습니다.


그래도 정말 좋은 경험이었습니다. 대체 어디서부터 어떻게 해야하나 막막했었는데 어느 순간부터 제 실력을 훌쩍 뛰어넘어버린 제 프로그램을 보는게 꽤 재밌었습니다. 또 "육목에서 최적의 수 찾기"라는 다소 추상적인 큰 문제를 해결하기 위해 이런저런 알고리즘들을 적절하게 변형해서 적용시켜보고 실패도 해보는 과정들이 좋았습니다.


2017 삼성 육목대회 결선 후기 : https://blog.encrypted.gg/220


육목 코드 : https://github.com/blisstoner/Connect6AI_SamsungDSCompetition

  Comments