스탯을 올리면 캐릭터가 강해지지

올려야 할 스탯이 한 가지 밖에 없다면, 생각할 필요도 없이 그 스탯만을 최대한 올리면 되겠지만

만약 두 종류 이상의 스탯을 두고 고민하는 상황이라면

한정된 기회어떻게 투자할 것인지에 관심을 가져볼 수 있는 문제일거야


우리는 캐릭터, 또는 파티가 스탯에 따라서 어떻게 강해지는지 알아보고 육성의 방향을 가늠해볼 수 있어

물론 이런 스탯은 수식에서처럼 우리가 마음대로 할 수 있는게 아니라 류웨이가 점지해주는 거지만

정상에 오르기만 하면 다 똑같다고 해서, 멀쩡한 등산로를 놔두고 절벽을 기어올라갈 필요는 없지 않겠어?

바로 그 최적의 등산로를 찾아보는게 우리가 하려는 일이지

그것도 대충 해보는 정도가 아니라 아예 캐릭터를 해체해보는 수준을 원해



옛날에도 주제 자체에 대해 간단히 소개는 한 적이 있지만

이번엔 그 내용을 가지고 실제로 직접 분석을 할 수 있는 수준을 달성하는게 목표야

마지막에 예제 파일도 있으니 관심있다면 뜯어서 만지작거려봐


저번에 썼던 글의 후편이라고 할 수 있는데

지금 다룰 내용이 복잡한 개념이 적기도 하고, 내용 상으로도 이걸 먼저 읽는게 이해는 더 잘 될거야

무슨 거창한 이론을 가져다 쓰는 것도 없고, 급식 수준만 돼도 크게 어려운 개념은 없을거라고 봐


이 글에서는 지오지브라 클래식이라는 웹 프로그램을 사용하고 있어

원래는 급식들 교육용에서 출발했지만, 수상할 정도로 뛰어난 인터페이스와 다양한 해석 도구들을 갖추고 있고, 심지어 무료

성능이랑 안정성은 좀 떨어지긴 한데, 여기서 필요한 기능들은 충실히 갖추고 있고, 공짜인 시점에서 감지덕지지


1. 좌표평면과 등위곡선

가장 먼저 알아야할 것은 바로 등위곡선이야

사실 그냥 초딩때 사회 시간에 배웠던 등고선이랑 다를게 없어. 그냥 수학 느낌나게 부르면 그렇게 된다는 거지



저렇게 생긴 산이 있다고 치자. 저 산에서 높이가 같은 지점끼리 주욱 선을 그으면 위 그림처럼 되겠지?



그걸 위에서 바라본다면? 위 그림처럼 같은 높이를 나타내는 지점들이 평면 상에서 같은 선으로 이어질거야



만약 우리가 최대로 만들고 싶어하는 어떤 대미지 z가 두 스탯 x, y의 영향을 받을 때

xy를 위도와 경도, 그리고 z를 고도에 대응시킬 수 있겠지

그리고 z를 어떤 특정한 값 h로 고정한다면, 그 값을 만족하는 xy값을 구할 수 있을거야





그걸 좌표공간에 나타내면 바로 위 그림과 같은 모습이 되는거지

점선으로 그려진 수직선은 곡면 위(산의 표면)에 그려진 등위곡선이 바닥 평면에 수직으로 투영된 걸 나타내



이걸 옆에서 바라보면 이런 모습이 될거야

등위곡선이 높이(대미지)가 같은 지점들을 수평으로 이어주는게 보이지?



그리고 위에서 바라보면? 이게 우리가 앞으로 다루게 될 좌표평면 위의 등위곡선이야

티바트에선 스탯을 올려서 대미지가 줄어드는 일이 없기 때문에

등위곡선이 원점에서 멀리 떨어질수록 더 높은 대미지를 나타낸다고 봐도 되겠지



2. 판정선

우리가 어떤 것의 효율을 따지는 이유는 그 선택에 기회비용이 있기 때문이지

캐릭터의 스펙을 내가 원하는 대로 설정할 수 있다면 생각할 필요 없이 가장 높은 값으로 설정하면 돼

하지만 현실에서는 하나를 선택하면 다른 하나를 내려놔야 하는 경우가 대부분이야

이걸 식으로 나타내면 어떻게 될까?



n번의 기회를 xy에 분배하는 경우를 생각해보면, xy를 더해서 n이 된다고도 볼 수 있겠지?

이 방정식을 평면에 나타나면 아래와 같아



바로 저 직선이 바로 n번의 기회를 나눌 수 있는 모든 경우의 수를 나타내는 것이지

이걸 이용해서 효율을 판단하게 될거고, 자주 써야하니 편의상 판정선이라고 부를게


3. 사전조건1: 좌표축의 눈금 조절

본격적으로 시작하기에 앞서 또 하나 짚어볼 점은, 각 좌표축의 눈금 하나기회의 측면에서 서로 같은 가치를 가져야 한다는 거야

위에서 판정선을 설명할 때 n번의 기회를 나눈다고 했었지?

각각의 좌표축에 대응하는 스탯의 값 또한 같은 1번의 기회라고 할 수 있는 값으로 정해줘야 한다는 말이야


티바트에서는 이 값을 성유물을 기준으로 판단해볼 수 있어

성유물 부옵 1개당 붙을 수 있는 스탯의 기대값이란게 정해져 있고, 주옵의 값도 그 비율에 맞춰서 정해져 있기 때문에

자연스럽게 1번의 강화 → 1칸의 눈금이라는 설정이 가장 합리적이라 할 수 있는거지



HP공격력방어력HP%공격력%방어력%치명타 확률치명타 피해원소 충전 효율원소 마스터리
가능값209.1313.6216.204.08%4.08%5.10%2.72%5.44%4.53%16.32
239.0015.5618.524.66%4.66%5.83%3.11%6.22%5.18%18.65
268.8817.5120.835.25%5.25%6.56%3.50%6.99%5.83%20.98
298.7519.4523.155.83%5.83%7.29%3.89%7.77%6.48%23.31
기댓값253.9416.53519.6754.955%4.955%6.195%3.305%6.605%5.505%19.815

▲ 스탯별 부옵 1개당 기댓값


예를 들어서 xy을 각각 공격력방어력으로 정한다면

위 표에서 찾을 수 있듯이 x축 한칸을 공격력 16.535, y축 한칸을 방어력 19.675로 잡을 수 있다는거야



4. 사전조건2: 판정식 설계와 영점 설정

좌표축에 대해서 이해했다면 이제는 실제 비교 대상이 되어줄 판정식을 세워야해

비교 대상은 대미지, 힐량, 실드량 등 다양할 수 있지만, 여기선 제일 많이 사용할만한 대미지를 기준으로 설명해보자

이 파트는 어느정도 원론적인 부분이라 머리 좀 굵었다 싶으면 대충 슥 보고 넘겨도 될거야


원신의 대미지 공식은 크게 보면 독립적인 변수나 스탯으로 결정되는 여러 인수들의 곱으로 결정돼

실제 공식은 좀 더 복잡하지만 간단하게 표현해보면 아래와 같아


대미지 = 스킬 공격력 × 피해 증가 × 치명타 × 내성 × 방어력


실제 비교에 사용할 판정식, 즉, 좌표공간의 높이인 z값이 될 식은 대미지의 구성 성분들을 전부 포함할 필요는 없어

식을 복잡하게 만들 필요 없이, 관심있는 변수가 포함된 인수만 따로 뽑아서 식을 세울 수 있지

예를 들어 공격력 계수를 가지는 스킬에서 공격력피해 증가량 사이의 관계를 알아보고 싶다면

공격력과 피해 증가의 영향을 받지않는 치명타, 내성, 방어력식에서 제외해도 상관 없다는 뜻이야


다만 관심 변수가 여러 인수에 영향을 미치거나, 관심 변수가 포함된 인수에 다른 변수가 영향을 미치는 경우에는

해당하는 인수를 식에서 섣불리 제외해서는 안돼



예를 들어 x, y에 대응시킬 관심 변수를 a, b라고 할 때

구성식이 아래와 같은 모습일 때는 스킬 공격력과 피해 증가항만 뽑아내는게 가능


하지만 이 식에서는 스킬 공격력의 변수 a치명타에도 영향을 주고 있어


또 이 식에서는 변수 a의 영향을 받는 스킬 공격력내성 변수 d의 영향을 받고 있지


같은 경우에는 식의 구조와 변수의 특성을 잘 따져봐야해

식을 잘 정리해서 cd같은 중첩 변수의 영향을 분리하는게 가능할 수도 있고

그런게 아니라면 이런 부분을 영점 조건에 포함해서 분석해야겠지

이런 부분은 딱 저런 세가지 유형으로만 분류되는게 아니라 여러 경우가 있을 수 있기 때문에 유의하면 돼


특히 단일 대미지가 아니라 사이클을 전체적으로 분석하고 싶다면

해당하는 대미지를 모두 식으로 더한 뒤 거기서부터 식을 정리해나가야 한다는 걸 잊어선 안돼



판정식 분석이 끝났다면 이젠 좌표평면의 영점, 즉 출발선이 되는 기준 스탯을 정해줘야해


성유물을 살펴보자면, 시계/성배/뚝까지 전부 비워놓은 상태를 기준으로 잡을 수도 있고

시계는 원마, 성배는 원소피증, 뚝은 치피 같은 식으로 미리 정해둘 수도 있겠지


또는 특정 무기를 장비하거나, 그렇지 않거나 하는 경우를 영점 조건에 지정할 수도 있을거야

위에서 말한 소위 중첩 변수 같은 것도 여기서 값을 가정하고 들어갈 수도 있겠지

이런 ▽ 친구들 처럼 여러 스탯이 서로 발을 걸치고 있는 케이스에서 이 부분을 고민해볼 일이 있을거야


만약 영점에서 지정하려는 조건이 판정식을 단순히 평행이동 시키는 형태라면

영점에서 미리 정해두지 않는 편이 보다 유연한 해석에 도움이 될 수 있어

지금 뭔가 와닿지 않는다면 이 부분은 일단 넘어가도록 하자



사실 판정식을 설계하고 영점을 잡아주는 일이 여기에서 가장 어려운 일이라고 할 수 있어

다른 부분은 방법만 알면 어느정도 기계적으로 뚝딱 해치울 수 있는 일이지만

이건 캐릭터, 무기, 성유물, 파티마다 정형화된 방법이 존재할 수도 있고, 아닐 수도 있는데다

분석의 완성도에 있어서 결정적인 부분임과 동시에, 타당성을 확보하는데 능지와 노력의 영향이 크기 때문이지

비단 이 글 뿐만 아니라 모든 정보글에 적용되는 내용이지만, 중요성을 다시 강조하지 않을 이유는 없을거야


5. 최적 판정선과 최적곡선

이제부터 본격적으로 효율곡선을 그려볼 차례가 왔어

먼저 좌표평면에 등위곡선판정선 하나를 그리고, 판정선을 움직이면서 등위곡선과 만나는 지점을 찾아보자



옵션의 개수 n을 늘려가면서 가장 먼저 등위곡선에 접하는 순간의 n값

등위곡선에 해당하는 대미지를 달성하기 위한 최소 옵션 수를 의미해

즉, 저 교점의 좌표값이 대미지 효율 100%를 나타내는 최적 지점이라고 할 수 있지


여기서 판정선과 등위곡선이 한 점에서 접할 때

교점에서 등위곡선의 기울기는 판정선의 기울기와 같은 -1이라는 사실에 주목할 필요가 있어

티바트에서 판정식은 미분 불가능한 구조로 나오지 않는다는 점,

다시 말해, 그 판정식에서 나온 등위곡선의 기울기가 연속적으로 변한다는 점을 고려하면 자연스러운 결과라고 할 수 있지

급식 원붕이들은 평균값 정리랑 비슷한 감각으로 이해해보면 될거야



그렇다면 반대로 등위곡선의 기울기가 -1인 지점을 찾으면 판정선과 한 점에서 접하는 지점을 찾을 수 있지 않을까?



위 식은 어떤 대미지 h에 대한 등위곡선을 나타내는 방정식이지

이걸 x에 대하여 전체 미분하면 아래와 같아



여기서 우변은 x, y, y'으로 구성된 식이 나오겠지?

등위곡선의 기울기가 -1이기 때문에 y' = -1로 두면 x, y로만 구성된 방정식이 나올 것이고, 이건 h값에 상관없이 동일하기 때문에

이게 바로 해당 판정식의 모든 등위곡선에서 기울기가 -1인 지점을 나타내는 방정식이지

편의를 위해서, 이 방정식을 판정식의 접방정식, 방정식의 곡선을 판정식의 접곡선이라고 부르기로 하자



그러면 이제 접방정식을 판정선과 등위곡선이 한 점에서 접하는 지점이라고 할 수 있는걸까?

결론은 판정선과 접하는 지점은 찾을 수 있지만, 그 지점을 지나는 판정선이 최소 옵션 조건을 만족하는지는 알 수 없어



위 그림에서 검은색 등위곡선의 기울기가 -1이 되는 지점을 통과하는 두 개의 판정선이 보일거야

두 판정선 모두 등위곡선과 한 점에서 접하지만, 최적 지점을 나타내는 것은 원점과 더 가깝게 위치한 판정선 뿐이지

이렇듯 기울기가 -1이 되는 지점은 등위곡선의 형태에 따라서 여러개가 될 수 있고

그 중에서 최적 판정선과 최적 지점을 골라내는 건 우리가 해야할 몫이야



여기서 다시 판정식의 접곡선을 살펴보고 가자



이제 접곡선 위에서 최적지점이 결정된다는건 알겠는데

접곡선이 지나지 않는 영역, 즉, 등위곡선의 기울기가 -1이 되지 않는 영역에서는 어떻게 최적을 판정할 수 있을까?

답은 다시 등위곡선의 형태를 살펴보면 찾을 수 있어



위에서 보이는 검은색 등위곡선은 모든 구간에서 기울기가 -1보다 작기 때문에 판정식의 접곡선과 만나지 않아

대신, 이 등위곡선에 닿기 위한 옵션의 최소값등위곡선과 x축의 교점으로 결정되고

이 점을 지나는 판정선최적 판정선이 되는거지

반대로 등위곡선의 기울기가 -1보다 큰 형태였다면 등위곡선과 y축의 교점최적 지점이 됐을거야



최종적으로 우리가 살펴봐야할 판정선은 총 세종류로 나눌 수 있어


판정식의 접곡선과 등위곡선의 교점에서 발생하는 접판정선

등위곡선과 x축의 교점에서 발생하는 X판정선

등위곡선과 y축의 교점에서 발생하는 Y판정선


결과적으로 이 세 종류의 판정선 중에서 원점과 가장 가까운 판정선이 최적 판정선이 되는 것이지

여기서 접판정선의 개수는 1개 이상이 될 수 있기 때문에, 실제로 따져야할 판정선의 개수도 3개 이상이 될 수 있어


대미지 값이 증가하면서 최적 판정선이 어떻게 변할 수 있는지 아래 짤에 나와있어



등위곡선이 영점에서 시작할땐 접판정선이 아직 형성되지 않고, 보라색의 X판정선최적 판정선으로 작용하지

등위곡선이 접곡선과 만나는 순간 접판정선이 드러나지만, X판정선이 원점에 더 가깝기 때문에 아직 최적 판정선은 아니야

그러다가 중간 부분부터 접판정선 중 하나가 X판정선과 교차하여 나오는 순간 이후로 최적 판정선이 되는게 보일꺼야

이렇게 변화하는 최적 판정선을 고려해서 최적곡선을 그려보면 아래와 같아



영점을 시작으로 해서 파란색 최적곡선을 주욱 따라가면 두 옵션의 효율을 100% 끌어낼 수 있다는 뜻이지



5-1. 이득계수와 라그랑주 승수법(선택)

만약 이득계수 편을 보고 왔다면 이득계수를 통한 분석에서 오류가 발생하는 이유도 여기서 찾을 수 있어

간단하게 말하면 이득계수는 오로지 판정식의 접곡선만 판단할 수 있기 때문이지


이 방면에서 쓰인다고 하는 라그랑주 승수법도 똑같은 유형의 오류에 걸릴 수가 있어

라그랑주 승수법의 원리가 바로 접곡선(접다양체)을 찾는 원이기 때문이야


판정식과 판정선이 접하는 지점에서는 두 함수의 기울기 벡터의 방향이 같다고 할 수 있기 때문에 식으로 나타내면 아래와 같아



여기서 람다( λ ) 는 두 벡터의 크기는 상관이 없다는 조건을 나타내는 어떤 상수야

이걸 전부 한 변으로 옮기면 다음의 라그랑주 조건식이 만들어지는거지



여기서 벡터 Lx성분과 y성분이 모두 0이 되도록 하는 x, y의 집합이 바로 정류점, 두 함수의 기울기 벡터의 방향이 같은 지점이야

그래, 기울기 벡터의 방향 같은 지점이지


기울기 벡터의 방향이 같은 지점이 반드시 최적 지점이 아니라는건 위에서 살펴봤을거야

단순한 문제에서는 단순히 정류점을 찾고, 극값을 판정하는 것 만으로 충분하지만

분석할 식에 대해서 모든걸 파악하고 있지 않다면, '마침 내가 분석하는 식이 그런 식이었어' 같은 이 따라줘야 하는 문제가 되지


이렇기 때문에 최적화 문제에서 라그랑주 승수법은 최적에 대한 판단을 오롯이 사용자의 몫으로 남겨놓고 있어

이런 도구들을 어떻게 적재적소에 활용할 수 있을진 잘 고민해봐야할 문제겠지



6. n% 효율구간 구하기

이제 다음으로 해볼건 100% 효율이 아닌 다양한 효율에 대한 효율곡선을 찾아보는거야

아무리 효율이 100%라고 해도 캐릭터 세팅을 거기에 정확히 맞춰가는건 실질적으로 어렵겠지?

때문에 99%98% 효율곡선 같은게 실용적으로 도움이 될 수 있어


이런 n% 효율곡선최적 판정선n% 등위곡선을 통해서 그릴 수 있지



어떤 기준 등위곡선이 있고, 거기에 대한 최적 판정선이 있다고 하자

이때, 최적 판정선기준 등위곡선 대미지의 99%에 해당하는 등위곡선과 만나는 지점을 생각해볼 수 있어

같은 옵션 개수를 투자해서 최대 대미지의 99%를 얻을 수 있다면, 그걸 바로 99% 효율지점이라고 할 수 있지 않을까?


따라서 이런 n% 등위곡선을 구해서 최적 판정선과 만나는 교점의 방정식을 구하면 n% 효율구간을 구할 수 있어

이걸 해석적으로 구하면 존나 복잡하고 귀찮기 때문에, 컴퓨터의 도움을 받아서 간단하게 뚝딱하는걸 추천할게



위 그림은 우에엥 CAS에몽으로 99% 효율구간을 실제로 구해본 모습이야

평면 위에 곡선들이 흩뿌려져 있는게 보이는데, 저것들이 바로 99% 등위곡선과 최적 판정선의 교점이 만들어낸 자취들이지


이 사례에서는 주 판정선X판정선과 하나의 접판정선으로 구성되는데

이 판정선들이 최적 판정선일때 99% 등위곡선과 만나는 교점의 자취를 구하면 되는 거야


그림에서 효율구간에 속하지 않고 삐죽삐죽 튀어나와있는 곡선

그 곡선을 만들어낸 교점의 판정선최적 판정선이 아닌 순간이었다는걸 나타내

이런 부분은 또 우리가 직접 골라내줘야 하는 부분이지



7. 연립 판정식의 효율 곡선

만약 판정식을 구성하는 식들이 변수의 범위에 따라 달라진다면 어떻게 할까?



이런 친구들처럼 스탯 범위에 따라서 판정식이 갈리는 경우는, 범위에 따라서 별개의 판정식을 만들어주면 돼

별개의 판정식별개의 등위곡선을 그리고, 별개의 최적 판정선을 찾고..

단지 그뿐인 이야기고 뭐 더 말할 것도 없으니 이런 케이스가 있다는 것만 알면 될 것 같아


부록. 예제 파일

https://www.geogebra.org/m/egqvcb63

위 파일은 체력(또는 공격)-압축치명 두 변수를 가정하고 예시를 만들어 본거야

링크를 타고가서 우측 상단 드롭다운 메뉴의 '앱에서 열기'를 누르면 돼

사용법은 그냥 슥슥 만지다보면 자연스럽게 터득할 수 있을거야



값을 편하게 바꿔볼 수 있게 슬라이더도 여러개 만들어놨고..



효율구간을 구해보고 싶다면 점의 자취를 구하는 아래 명령어를 활용해보면 좋을거야

창에 자취가 올라가는 순간 성능이 개씹나락으로 떨어지기 때문에 주의해



관심 있으면 한번 갖고 놀아보셂..