]

위는 일반퀄리티의 퀄리티모듈3티어 3개기준 변환표다

전설 퀄리티는 150%의 보너스가 붙으므로 25%, 2.5%, 0.25%, 0.025%라고가정하고 계산해볼게

공정은 철판1개 -> 톱니바퀴1개나오는 공정이라고 가정할게 공정 종류는 직관적으로 생각해보면 중요할거같진않음

또 전설퀄리티의 퀄리티 3티어 모듈을 조립기계랑 재활용기계에 도배한다고 가정함

속도모듈은 생각안할게 속도는 비용과상관없으니까.


여기서 계산을 하기 위해선 행렬로 생각하는게 좋다

재료는 등급이 5가지 있고 인풋 아웃풋이 2개이므로 2*5종류를 다룰거다


내 인벤토리에 철판이 1000개 있다고 하자

인벤토리는 벡터로 나타낼 수 있어

(1000,0,0,0,0,0,0,0,0,0)

순서대로 일반철판, 희귀철판, 레어철판, 유니크철판, 전설철판, 일반톱니, 희귀톱니, 레어톱니, 유니크톱니, 전설톱니이다.

조립기계가 일반 철판을 x1번 조립한다고 하자

결과적으로 내 인벤토리는 이렇게 변한다

(-1, 0, 0, 0, 0, 1- 1111/4000, 1/4, 1/40, 1/400, 1/4000) * x1 + 원래 인벤토리


이제 희귀 철판을 x2번 조립한다고 하자

(0, -1, 0, 0, 0, 0, 1-111/400, 1/4, 1/40, 1/400) * x2 + 원래 인벤토리

재활용기계의 경우는 살짝 다른데 1/4만 돌려준다 그러므로 얻는철판에 1/4을 곱해주자

일반 톱니바퀴를 재활용기계에 x6개 넣는다고 하자

(0.25*(1-1111/4000), 0.25*(1/4), 0.25*(1/400), 0.25*(1/4000), -1, 0, 0, 0, 0)* x6

희귀 레어 유니크 다 이런식으로 변환량을 나타낼 수 있겟지?

물론 x10은 없는데 이건 전설톱니바퀴를 전설철판으로 바꾸는건 자원낭비 그자체기 때문이다.

이걸 전부 모으면 행렬식으로 나타내진다

대충 (10X9)* (9X1) + (10X1) 오른쪽이 숫자들이고 중간이 x1~x9다 왼쪽은 첨에 인벤에있던 (1000,0,0,0,0,0,0,0,0,0)이다

결과물은 당연히 10X1짜리 행렬로 나옴


결과물 행렬은 각 재료들의 변화량인데

결과물의 첫 row는 일반철판으로 -x1 + 0.25*(1-1111/4000)*x6 + 원래 인벤토리에 있던 1000개

우리 목표는 결과물 행렬의 1~9까지 0으로 만드는 x들을 찾으면 10번째 원소가 정답이 된다 (모든 철판을 전설톱니로 바꾼셈이니까)

그림은 다음과같다




-x1 + 0.25*(1-1111/4000)*x6 + 1000 = 0

(1-1111/4000)x1 - x6 = 0 여기서 1-1111/4000 = 0.72225

두식을 풀면 x1 = 1150, x6 = 830 정도다 귀찮으니 소숫점땐다 양해좀

여기서 우리는 철판 1000개를 전설톱니로 전부 바꾸려면 조립기계가 일반철판을 1150번 처리해야하는것을 알수있다.


이런식으로 다 구할수도 있지만 이건 너무 귀찮다

쉬운방법을 찾아보았다.

저기서 x10이 답인데 x10은 행렬을 풀면 당연히 다음과같다 0.025%x1 + 0.25%x2 + 2.5%x3 + 25%x4 + x5 = x10

위 행렬식은 (10X9)* (9X1) + (10X1) 인데 맨 왼쪽에 열을 추가하고 중간에 행을 추가해주면 결과물에서 x10 변수를 없앨 수 있다 다음과같이.

유지하는 부분은 생략하고 그리면


이제 계산은 Ax = b 형태라고 볼 수 있고 역행렬을 계산할 수 있다면

x = A^-1 * b라고볼수있지 b는 넘겨주면 (-1000,0,0,0,0,0,0,0,0,0) 이다

정신건강을 위해 파이썬 numpy 라이브러리를 사용해 계산해봣다.


코드도 첨부함

import numpy as np

m = [
[-1,0,0,0,0,0.25*0.72225,0,0,0,0],
[0,-1,0,0,0,0.25*0.25,0.25*0.7225,0,0,0],
[0,0,-1,0,0,0.25*0.025,0.25*0.25,0.25*0.725,0,0],
[0,0,0,-1,0,0.25*0.0025,0.25*0.025,0.25*0.25,0.25*0.75,0],
[0,0,0,0,-1,0.25*0.00025,0.25*0.0025,0.25*0.025,0.25*0.25,0],
[0.72225,0,0,0,0,-1,0,0,0,0],
[0.25,0.7225,0,0,0,0,-1,0,0,0],
[0.025,0.25,0.725,0,0,0,0,-1,0,0],
[0.0025,0.025,0.25,0.75,0,0,0,0,-1,0],
[0.00025,0.0025,0.025,0.25,1,0,0,0,0,-1]
]
m = np.array(m)
b = np.array([-1000,0,0,0,0,0,0,0,0,0])
x = np.linalg.solve(m, b)
print(x)

x1~x10은 다음과같다.


1000/7.7하면 대충 129.7이다 틀린값이 나오는데 원인을 찾았다.


(수정)

가정이 틀렸는데 비율이 레어부터 0.25*0.1이아니라 0.25*0.25이런식인듯하다

전설템은 0.25^4확률로 나오지않을까?

코드 수정해서 다시 돌려봤다.


import numpy as np

r1 = 0.25
r2 = r1**2
r3 = r1**3
r4 = r1**4
b1 = 1-r1
b2 = 1-r1-r2
b3 = 1-r1-r2-r3
b4 = 1-r1-r2-r3-r4
m = [
[-1, 0 , 0 , 0 , 0 , 0.25*b4, 0 , 0 , 0 , 0 ],
[0 , -1, 0 , 0 , 0 , 0.25*r1, 0.25*b3, 0 , 0 , 0 ],
[0 , 0 , -1, 0 , 0 , 0.25*r2, 0.25*r1, 0.25*b2, 0 , 0 ],
[0 , 0 , 0 , -1, 0 , 0.25*r3, 0.25*r2, 0.25*r1, 0.25*b1, 0 ],
[0 , 0 , 0 , 0 , -1, 0.25*r4, 0.25*r3, 0.25*r2, 0.25*r1, 0 ],
[b4, 0 , 0 , 0 , 0 , -1 , 0 , 0 , 0 , 0 ],
[r1, b3, 0 , 0 , 0 , 0 , -1 , 0 , 0 , 0 ],
[r2, r1, b2, 0 , 0 , 0 , 0 , -1 , 0 , 0 ],
[r3, r2, r1, b1, 0 , 0 , 0 , 0 , -1 , 0 ],
[r4, r3, r2, r1, 1 , 0 , 0 , 0 , 0 , -1]
]
m = np.array(m)
b = np.array([-1000,0,0,0,0,0,0,0,0,0])
x = np.linalg.solve(m, b)

print(x)



1000/24.63755 = 40.5다 53은 아닌데 비슷한거같긴하다

혹시 틀린부분 있으면 댓글에써줘

행렬 최대한 풀어서 열심히 썼는데

재밌게봤으면 개추좀 ㅎ

태클환영~