[2017 삼성 육목대회] 11. 유전 알고리즘 중간 결과 및 추가 개선 사항

67세대에 도달했을 때 승률 1위는


double PlayerFactor[6] = { 0.0, 1.0, 37.05, 158.25, 0.0, 0.0 }; 

double OpponentFactor[6] = { 0.0, 1.73, 36.24, 266.28, 0.0, 0.0 };  이었습니다.(같은 세대의 다른 개체들과 대결했을 때 승률 대략 60%)


맨 처음에 사용하던


double PlayerFactor[6] = { 0.0, 1.0, 2.0, 6.0, 0.0, 0.0 }; 

double OpponentFactor[6] = { 0.0, 1.05, 5.0, 11.05, 0.0, 0.0 }; 와 비교했을 때 많은 변화가 있었네요.


유전 알고리즘은 일단 계속 돌릴 계획이고 이외에도 추가적으로 일정한 시간(현재는 6.2초로 두었는데 6.7초 내지는 6.9초로 앞당길까 생각하고 있습니다.)이 지날 경우 탐색을 중단하는 것과 더불어 아예 후보에서 제하도록 코드를 수정했습니다.(이전에는 탐색은 중단하지만 운이 나쁘면 후보로 들어갈 수도 있었습니다.)


전반적으로 Threat을 계산할 떄 매 (x, y)에 대해서 (x, y)부터 (x+5*dx[dir], y+5*dy[dir])까지 6칸을 전부 확인하는 대신 DP를 이용하면 계산을 줄일 수 있을 것 같긴 하지만 그렇게 될 경우 코드를 너무 많이 고쳐야해서 포기했습니다.


두 수를 착점할 때 Score를 계산하는 Get_ScoreOfDoubleMoves 함수를 여러 번 호출할 때 계산한 것을 또 계산하는 문제점이 있는 것으로 보입니다. 내일 이 함수를 잘 손봐서 계산을 조금 더 효율적으로 하도록 만들 계획입니다.

  Comments