하스스톤

개발자의 관점: 과학을 통한 투기장 밸런스 조정

개발자의 관점: 과학을 통한 투기장 밸런스 조정

안녕하세요! 저는 하스스톤의 선임 데이터 과학자인 티앤입니다. 오늘은 여러분께 과학적으로 투기장 밸런스를 조정하는 방법에 대해 말씀 드리고자 합니다. 여러분의 많은 투기장 플레이를 통해 생성된 많은 데이터로 투기장의 밸런스를 조절할 수 있습니다. 만약 제가 붐 연구소에 근무한다면 아마 수리 과학 부서에서 근무하고 있겠네요!

게임의 밸런스 조절

ABunchOfKnobs_option02.jpg투기장 밸런스 조정은 두 단계로 투기장 밸런스 조정은 두 단계로 이루어지는데, 우선 각 카드가 어느 유형에 해당하는지를 판단합니다 (여기서 유형은 성능이 비슷한 카드들을 모은 하위 집합을 가리킵니다). 카드 하나는 보통 두 가지로 분류되고, 전설 및 전설이 아닌 카드, 이 두 가지를 시스템으로 분류합니다. 각 카드의 승률과 선택률에 따라 카드를 어느 유형으로 분류할지 결정합니다. 즉, 카드를 고를 때 주어지는 세 장의 카드는 최대한 비슷한 위력을 가지도록 설정되어 있습니다.

그 다음, 아홉 개 직업의 승률을 서로 비교하여 조절합니다. 모든 직업의 승률이 최대한 50%에 가까워지는 것이 이상적이라고 보고, 각 카드에 주어진 가중치를 조절해서 밸런스를 맞춥니다. 가중치란 선택 단계의 카드가 나타나는 상대적인 확률을 뜻합니다. 가중치가 높을수록 선택할 카드에 등장할 확률이 높습니다. 카드의 가중치를 변경하면, 그 카드가 속하는 유형과 등장할 확률도 달라집니다.

이 시스템이 원활히 돌아가기 위해서는 많은 데이터가 필요하지만, 매일 많은 분들께서 투기장을 즐겨주셔서 데이터를 충분히 얻을 수 있습니다.

ThreeSteps_EK_600x260.png

이 데이터를 활용해서 게임 밸런스를 조정하려면 다음의 세 단계를 거쳐야 합니다.

  1. 모델 구축
  2. 제약 최적화 문제 해결
  3. 가중치 계산

이 작업을 마친 후에는 긴급 수정을 통해 변경 사항을 적용해야 합니다.

모델 구축

투기장을 자주 즐기신다면, 승률 계산에 익숙하실거라 생각합니다. 아시는 것처럼 카드에 따라서 승리 확률에 미치는 영향도 다릅니다. 예를 들어 게임에서 리치 왕 카드를 뽑는 경우, 눈발바닥 펭귄을 뽑는 경우보다 승률에 큰 변화가 생기게 되죠.

EN_SnowFlippaLichKing.png

만약 게임 중에 리치 왕을 뽑았다면, "리치 왕을 뽑으면 승률은 얼마나 될까? 60%? 50%? 이 카드를 정량적으로 평가하려면 어떻게 해야 할까?" 아마 이런 생각을 하게 되겠죠. 하지만 다음 턴에 얼음 보호막을 선택한다고 하면, 승률을 다시 계산해 보고 싶으실 겁니다.

저희는 이런 의문에 답해 주는 기계 학습 모델을 구축했습니다. 이 학습 모델에 대량의 데이터를 입력하게 되면, 컴퓨터는 접근이 가능한 모든 투기장 게임의 데이터를 바탕으로 승률을 예측하는 법을 학습합니다. 좀 더 전문적인 용어를 사용하자면, 구축한 모델을 "훈련"시키는 것입니다. 이 모델은 정보를 요청할 때 마다, 어떤 카드를 뽑았을 경우의 승률을 계산해 줍니다.

제약 최적화 문제 해결

ABunchOfKnobs_option03.jpg잠깐 다른 얘기를 해보면, 한 모델이 손잡이가 잔뜩 달린 상자라고 가정해 봅시다. 손잡이 하나가 특정 카드를 나타내고, 손잡이는 돌려서 조절할 수 있습니다. 하나의 손잡이를 돌리면, 그 카드와 관련이 있는 각종 수치를 조절할 수 있습니다.

손잡이를 돌리기 전에, 이 상자의 현재 승리 확률이 40%로 가정해 봅니다. 여기서 손잡이를 돌리면 예상 승률이 46%로 조정됩니다. 이 시점에서 손잡이 여러 개를 조절하면, 승률을 원하는 수치로 변경할 수 있는지에 대해, 아주 흥미로운 의문이 생깁니다.

이런 의문을 해결하려면 최적화 문제를 해결해야 합니다. 이 문제를 해결하기 위해 수학적으로 다가가면, 현실적으로 가능한 모든 방법 중에서 가장 최선의 방법을 찾아야합니다. "손잡이 여러 개"를 한꺼번에 돌려서 승리 확률을 최대한 목표에 가깝게 바꿔야하는데, 전문 용어로 표현하자면 고차원 벡터에서 목적함수 값을 최소화하고 싶은 것 입니다.

투기장 밸런스를 조절할 때는 모든 직업의 예상 승률이 최대한 50%에 가까워지도록 각 카드의 수치들을 변경합니다.

하지만 손잡이는 제약이 있기 때문에 마음대로 돌릴 수가 없습니다. 저희가 이 "상자"에 프로그램한 제약은 다음과 같습니다.

  • 수치는 현재 값의 +/-30% 범위 내에서 변경해야 합니다. 극적인 변화는 게임의 재미가 떨어질 수 있기 때문이죠.
  • 투기장에서 한 직업의 힘을 낮추고 싶은 경우, 가장 강한 카드의 등장 빈도가 약한 카드의 등장 빈도보다 낮아야 합니다. 직업의 힘을 높이고 싶다면 그 반대가 되겠죠.
  • 최적화 문제의 유효성을 유지하기 위해서는 물리적인 제약도 감안해야 합니다. 예를 들어, 등장 확률의 이득 합계는 손실 합계와 동일해야 합니다(수학 용어로 제로 섬이라고 하죠).

가중치 계산

HeavyLooking.png투기장 데이터로 밸런스를 조절하는 작업의 마지막 단계는, 앞의 두 단계에서 얻은 결과를 바탕으로 각 카드의 가중치를 조절하는 것입니다. 일반적으로 가중치가 2.0인 카드는 1.0인 카드보다 두 배 자주 등장합니다. 제약 최적화 문제를 통해 "어느 손잡이를 돌릴" 것이며 "얼마나 돌릴" 것인지를 알 수 있죠. 그 다음에 각 "손잡이"를 각 카드가 선택 단계에서 등장할 확률에 연결합니다. 그러면 각 카드의 가중치, 그리고 카드의 속성(주문, 무기, 확장팩 등)에 따른 보정치를 어느 정도 변경해야 하는지 알 수 있습니다.

공정한 게임을 위해

밸런스 조절이 지금 단계까지 마무리되고 나면, 아홉 직업의 평균적인 승률이 +/-50%에 최대한 가까워지는 것이 가장 바람직합니다. 하지만 드물게 밸런스 조절 후에도 승률이 최적화가 어려운 경우가 있습니다. 이런 경우는 조절하기 전보다는 적절한 수치이지만, 가중치 조절 전에 특정 직업의 승률이 50% 보다 더 높았기 때문에 목표 수치를 달성하지 못한 것입니다.

저희는 감사하게도 이 시스템을 통해 투기장 데이터를 고급 전산 수학과 기계 학습에 활용함으로써, 특정 직업을 조정해야 하는지를 판단하고 각 직업의 카드 하나하나에 최적의 가중치를 부여하는 방법으로 투기장 밸런스 조정을 하고 있습니다.

ABunchOfKnobs_option05.jpg

투기장 밸런스를 과학적으로 조절하는 방법에 대한 정보가 흥미로웠으면 좋겠습니다!

다음 글

주요 소식