품질1의 재료를 시작으로 품질5의 생산품을 만드는데에는 총 9종의 제작법이 필요하다

1. 품질1 재료 -> 품질1↑생산품

2. 품질2 재료 -> 품질2↑생산품

3. 품질3 재료 -> 품질3↑생산품

4. 품질4 재료 -> 품질4↑생산품

5. 품질5 재료 -> 품질5 생산품

6. 품질1 생산품 -> 품질1↑ 재료(25%)

7. 품질2 생산품 -> 품질2↑ 재료(25%)

8. 품질3 생산품 -> 품질3↑ 재료(25%)

9. 품질4 생산품 -> 품질4↑ 재료(25%)


여기서 5번 제작법은 품질5가 이미 확정이기 때문에 품질모듈을 쓸 이유가 전혀 없고 생산모듈을 전부 껴주면 된다.

6~9번 제작법은 재활용 기계를 돌리는 것이기 때문에 생산모듈을 낄 수 없을 것이다. 전부 품질모듈을 껴주면 된다.

그외의 1~4번 제작법은 품질 모듈을 낄 수도 있고 생산 모듈을 낄 수도 있는데 가장 최적의 수가 뭔지 알아보자

하나의 제작법마다 5개의 선택지가 있고(품질4, 품질3생산1, 품질2생산2, 품질1생산3, 생산4) 고려대상의 레시피는 4개다

경우의 수가 5^4=625개 밖에 안되니 코드 짜서 최적의 수를 계산해보자


처음에 품질1 재료가 1,000,000개 있다고 치고 계속 모든 제작법을 뺑뺑이 돌려서 품질5 생산품만 남을 때 까지 충분히 루프를 돌린 다음(1만회) 몇 개의 결과물이 나왔는지 확인하는 방식으로 진행할거고 가장 좋은 결과가 나온 경우와 특이한 경우 몇개를 써볼것임


코드는 아래의 매트랩 코드를 사용했다


function x=ingre2prod(from_tier,to_tier,q)

  %p_factor=0.25;

  %q_factor=0.62;

  p_factor=0.10;

  q_factor=0.25;

  p=4-q;

  x=(1+p*p_factor);

  qq=q*q_factor;

  if from_tier > to_tier 

    x=x*0;

  elseif from_tier == to_tier

    if to_tier!=5

      x=x*(1-qq/10);

    end

  else

    diff=to_tier-from_tier;

    if to_tier==5

      x=x*( qq*(1/(10^diff) ) );

    else

      x=x*( qq*(1/(10^diff)-1/(10^(diff+1))) );

    end

  end

end


min=Inf;

max=0;

Qmin=0;

Qmx=0;


res=zeros(256,5);

for i=0:((5^4)-1)

%Q=[0;0;0;0;0;0;0;0;0;0];

%Q=[0;4;4;4;4;0;4;4;4;4];4

itmp=i;

Qtmp=zeros(4,1);

for j=1:4

  Qtmp(j)=mod(itmp, 5);

  itmp=floor(itmp / 5);

end

Q=[0;Qtmp(1:4);0;4;4;4;4];


A=zeros(10,10);

A(1,1)=1;

A(1:5,6:10)=[ingre2prod(5,5,Q(1)) ingre2prod(4,5,Q(2)) ingre2prod(3,5,Q(3)) ingre2prod(2,5,Q(4)) ingre2prod(1,5,Q(5));

             0                    ingre2prod(4,4,Q(2)) ingre2prod(3,4,Q(3)) ingre2prod(2,4,Q(4)) ingre2prod(1,4,Q(5));

             0                    0                    ingre2prod(3,3,Q(3)) ingre2prod(2,3,Q(4)) ingre2prod(1,3,Q(5));

             0                    0                    0                    ingre2prod(2,2,Q(4)) ingre2prod(1,2,Q(5));

             0                    0                    0                    0                    ingre2prod(1,1,Q(5))];

  

A(6:10,1:5)=[0                    ingre2prod(4,5,Q(7)) ingre2prod(3,5,Q(8)) ingre2prod(2,5,Q(9)) ingre2prod(1,5,Q(10));

             0                    ingre2prod(4,4,Q(7)) ingre2prod(3,4,Q(8)) ingre2prod(2,4,Q(9)) ingre2prod(1,4,Q(10));

             0                    0                    ingre2prod(3,3,Q(8)) ingre2prod(2,3,Q(9)) ingre2prod(1,3,Q(10));

             0                    0                    0                    ingre2prod(2,2,Q(9)) ingre2prod(1,2,Q(10));

             0                    0                    0                    0                    ingre2prod(1,1,Q(10))] .*0.25;



N = 10000;

X=[0;0;0;0;0;0;0;0;0;1000000];

Y=(A^N)*X;

ratio=X(10)/Y(1);

if ratio>max 

  max=ratio;

  Qmax=Q;

elseif ratio<min

  min=ratio;

  Qmin=Q;

end

res(i+1,:)=[ratio, round(Qtmp')];


end




테스트 결과 상당히 재밌는 결과를 얻었다




효율이 가장 안 좋은 경우


1. 품질1 재료 -> 품질1↑생산품 -> (품질4 또는 생산4)

2. 품질2 재료 -> 품질2↑생산품 -> (품질4 또는 생산4)

3. 품질3 재료 -> 품질3↑생산품 -> (품질4 또는 생산4)

4. 품질4 재료 -> 품질4↑생산품 -> (품질4 또는 생산4)

5. 품질5 재료 -> 품질5 생산품 -> (생산4)

6. 품질1 생산품 -> 품질1↑ 재료(25%) -> (품질4)

7. 품질2 생산품 -> 품질2↑ 재료(25%) -> (품질4)

8. 품질3 생산품 -> 품질3↑ 재료(25%) -> (품질4)

9. 품질4 생산품 -> 품질4↑ 재료(25%) -> (품질4)


정말 흥미로웠는데 4종 제작법 전부 한가지 모듈로 통일을 하였을 경우 최악의 효율이였다.
모듈을 품질모듈로 통일하든, 생산모듈로 통일하든 동일한 값이 나와서 정말 신기했다
1,000,000개의 재료를 넣었을 경우 8,617개의 품질5 생산품을 얻을 수 있었고 이 때의 교환비는 116.05이다



Aa가 품질모듈 올인일 경우 사용한 행렬이고

Ab가 생산모듈 올인일 경우 사용한 행렬인데 분명히 다른 값이다


그런데 반복시행을 50회정도 하고 나니 둘 다 값이 같아져버린다

선형대수학 지식 딸려서 왜 이러는건진 모르겠는데 암튼 존나 신기하다



효율이 가장 좋은 경우


1. 품질1 재료 -> 품질1↑생산품 -> (품질2 + 생산2)

2. 품질2 재료 -> 품질2↑생산품 -> (품질2 + 생산2)

3. 품질3 재료 -> 품질3↑생산품 -> (품질2 + 생산2)

4. 품질4 재료 -> 품질4↑생산품 -> (품질2 + 생산2)

5. 품질5 재료 -> 품질5 생산품 -> (생산4)

6. 품질1 생산품 -> 품질1↑ 재료(25%) -> (품질4)

7. 품질2 생산품 -> 품질2↑ 재료(25%) -> (품질4)

8. 품질3 생산품 -> 품질3↑ 재료(25%) -> (품질4)

9. 품질4 생산품 -> 품질4↑ 재료(25%) -> (품질4)


이 경우도 나름 흥미로운데 4공정 모두 품질모듈2개 생산모듈2개를 섞어서 사용했을 때 최고의 효율을 얻었다
이때는 1,000,000개의 재료를 사용하여 12,519개의 품질5 생산품을 얻을 수 있었으며 이 때의 교환비는 79.879였다.
FFF에서는 전설템 가격이 56배라고 했는데 왜 여기서는 80배냐고?




진짜 모르겠다 아직도 뭘 빼 먹은게 있는건가?




표로 한눈에 보기





한가운데를 보면 모듈을 품질2개+생산2개 섞었을 때 가장 교환비가 작은 것을 확인 할 수 있다

그리고 가장자리 쪽에 모듈을 올인해서 사용한 경우 가장 교환비가 높은 것 또한 확인할 수 있다



그래프로 한눈에 보기

(대충 가운데로 갈수록 움푹 패여서 좋다는 뜻)




품질5 모듈이 아니라 품질1 모듈을 사용할 경우

사용하는 모듈의 대상을 품질5품질모듈3,품질5생산모듈3이 아니라 품질1품질모듈3,품질1생산모듈3을 사용하는 경우도 궁금할 것이다

위에 있는 코드에서 q_factor의 값을 0.62->0.25로 조정, p_factor의 값을 0.25->0.10으로 바꿔서 돌리면 되는데 이 때의 결과는 아래와 같다


이번에는 그냥 닥치고 품질모듈에 올인하는 것이 가장 효율이 좋다

모든 공정에 품질모듈3 4개를 박을 경우 교환비 1072.6으로 품질5 생산품을 얻을 수 있을 것이다

자원이 미친듯이 갈려나갈 예정이니 마음의 준비를 하도록 하자