RiotAPI + 내전 팀 추천 알고리즘

2022. 9. 29. 15:53프로젝트/Spring Project

 지금 하고있는 프로젝트는 소환사 전적과 내전 팀을 짜게 도와주는 웹을 만들고 있다. 추가로 밸런스있게 팀을 짜기 위해 팀 추천 기능도 넣기로 했다. 

 

따로 알고리즘 공부는 열심히 해본적이 없고 수업 들은게 다인데.... 어떻게 해야 밸런스있게 짤지 막막했지만 뭐 일단 해봐야 길이 보일것 같아 기본적인 추천 알고리즘을 이용하기로 했다.

 

우선 추천 알고리즘이란, 사용자가 선호할 만한 아이템을 추측하고 적합한 특정 항목을 제공해 주는 기본적인 알고리즘이라고 한다. 

추천 알고리즘에는 콘텐츠 기반 필터링(Content-based filtering)과 협업 필터링(Collaborative filtering)이 있다.

 

하지만 내전 팀 추천 알고리즘에는 위 추천 알고리즘과는 좀 다르게 해야할 것 같았다. 

위 추천 알고리즘은 콘텐츠(아이템)를 기반으로 이 콘텐츠의 특성과 사용자의 선호도를 비교하여 추천, 특정 집단에서 발생하는 '유사한 사용행동'을 파악하여, 비슷한 성향의 사람들에게 아이템을 추천하는 기술이므로 밸런스있게 팀을 짜 추천해주는 이 프로젝트와는 뭔가 다른 것 같아 다른 방식을 이용했다.

 

우선 각 티어마다 일정 포인트를 부여했다.

소환사 API를 이용하여 받은 소환사 정보에 각 포인트를 부여하는 방식을 사용했다.

 

간단하게 예를 들면 챌린저 2명, 그마, 마스터, 다이아, 플래 1명씩 총 6명이 팀을 짠다고 하면

9, 9, 8, 7, 6, 5 로 포인트를 부여한 후,

짝수, 홀수를 나누는 식을 이용하여 9, 8, 6은 블루 팀, 9, 7, 5는 레드 팀으로 나누어 리스트에 넣어준다.

 

각 팀의 포인트를 합산해보면 블루 팀은 23점, 레드팀은 21점이다.

그리고 6, 5 두 명을 바꾸면 블루 팀은 22점, 레드팀은 22점으로 동일한 합산 점수를 가진다. 

이 부분을 활용하여 각 첫번째 선수가 점수가 동일하면 상관이 없지만 한쪽이 높으면 다음 선수는 반대로 낮은 쪽에 높은 포인트를 가진 선수를 넣어준다. 

9, 8, 6

9, 7, 5

였던 팀을

9, 8, 5

9, 7, 6

으로 변경한다.

 

테스트 케이스로 여러 소환사명으로 시도해보았고 가장 밸런스 있게 짜질 수 있었다.

이걸로만 봤을때는 각 팀을 밸런스있게 짰다고 생각이 들지만 조금 더 깊게 생각해보면, 

우선 각 소환사마다 선호 포지션이 있을 것이다. 아무리 잘 짠것 같아보이지만 선호 포지션이 정글인 5명 혹은 주 라인이 정글인 5명이 한팀에 몰리면 이것 또한 밸런스 있게 짠것이 아니라는 것이다. 

 

추후 이 부분을 조금 더 고려하여 수정할 예정이다.