속도를 조금 더 개선하기 위해 myBoard를 함수 내의 지역 변수로 copy해서 작업하는 대신 함수의 인자로 받은 2차원 포인터를 통해 직접 myBoard를 건드리고자 했습니다. 이러면 copy하는 시간(361개를 copy해야하고 생각보다 빈번해서 시간을 꽤 많이 잡아먹는다고 생각함)을 절약하니까 더 빨라질 줄 알았는데 전혀 그렇지 않고 도리어 속도가 4배에서 심하게는 10배 가까이 느려졌습니다. 구현에서 실수를 했나 싶어서 코드를 꼼꼼히 살펴보았는데 딱히 그런 것도 없었습니다.
현재 스택에서 멀리 떨어진 곳의 변수를 다룰 때 속도가 급격하게 느려지는 것 같다는 심증만 있을 뿐 정확히 왜 이런 일이 발생했는지는 잘 이해가 가지 않습니다. 어쩔 수 없이 코드를 싹 밀고 원상태로 되돌렸습니다.
그리고 승리조건이 만족될 때 턴을 줄이는 것, 시간을 넘겼을 때 현재 보고있는 탐색 대상은 무시하는 것 등을 짰는데 (-1, -1), (-1, -1)을 기록하라는 명령이 계속 발생했고 왜 이런 오류가 발생했는지 도저히 찾을 수가 없어서 어쩔 수 없이 Find_BestDoubleMovesByDepthSearch 함수도 갈아엎었습니다.
결국 하루종일 한거라고는 유전 알고리즘 결과를 본 것과, 이것저것 짰다가 오류나서 되돌린 것 밖에 없네요. 멘탈 잡고 내일부터는 다시 개선을 해나가야겠습니다.
-------------------------------------------
자기 전에 마지막으로 시도해본다는 생각으로 Find_BestDoubleMovesByDepthSearch를 다시 확인해봤는데 잘못된 점을 찾았습니다. tmpMax의 초기값을 -10000000으로 뒀는데 현재 내가 필패일 때 계산 과정에서 -10000000보다 값이 작아질 수 있어서 (-1, -1), (-1, -1)이 반환되었습니다. 기분 좋으면서도 살짝 허탈하네요.
현재까지 Breadth = 5, Depth = 6까지 시간 내에 통과됩니다. 유전 알고리즘 결과가 어느정도 수렴하는 것으로 보여지면 Factor를 확정하고 Breadth, Depth를 얼마로 할지 고민해봐야겠네요. 아직까지는 1위가 승률 60~70%, 16위가 승률 40%여서 편차가 큰 편입니다.
'대회 > 육목 알고리즘 대회' 카테고리의 다른 글
[2017 삼성 육목대회] 15. 최종 프로그램 (0) | 2018.01.16 |
---|---|
[2017 삼성 육목대회] 14. Factor 확정 및 합리적인 Breadth, Depth 정하기 (0) | 2018.01.16 |
[2017 삼성 육목대회] 13. 유전 알고리즘 결과 확인 (0) | 2018.01.16 |
[2017 삼성 육목대회] 11. 유전 알고리즘 중간 결과 및 추가 개선 사항 (0) | 2018.01.16 |
[2017 삼성 육목대회] 10. 버그 수정 및 적절한 Factor를 찾기 위한 유전 알고리즘 (0) | 2018.01.16 |
[2017 삼성 육목대회] 9. 효율적인 계산을 위한 함수 수정 (0) | 2018.01.16 |