윗 글의 후속글




https://gall.dcinside.com/mgallery/board/view/?id=factorio&no=62733

FFF #399 - 쓰레기를 보물로확장팩 FFF 모음 정리 링크https://www.factorio.com/blog/post/fff-399FFF #399 - 쓰레기를 보물로게시자 Earendel, Kovarex, V4530002024-02-23안녕하세gall.dcinside.com



몇주전 풀고라에 대한 정보가 공개 되면서 전자기 플랜트가 처음 등장했다



전자기 플랜트는 제작 속도 2, 기본 생산성 보너스 +50%, 모듈 슬롯 5개가 있는 4x4 크기의 기계인데

기존의 조립기계3이 제작속도 1.25, 기본 생산성 보너스같은거 없음, 모듈 슬롯 4개인 것에 비하면 매우 매우 월등한 성능을 보유하고 있음


전자기플랜트를 사용할 때 기준으로 이전에 한 계산을 다시 해보려고 함





품질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번 제작법은 품질 모듈을 낄 수도 있고 생산 모듈을 낄 수도 있는데 가장 최적의 수가 뭔지 알아보자

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

이번에는 경우의 수가 기존의 5^4=625개에서 6^4=1296개로 늘긴했지만 여전히 전수조사 할만한 정도니 코드 짜서 최적의 수를 계산해보자



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


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

global assembler_slot;

global recycle_slot;

global default_p;


assembler_slot=5;

recycle_slot=4;

default_p=0.5;


function x=ingre2prod(from_tier,to_tier,q,is_assembler)

global assembler_slot;

global recycle_slot;

global default_p;

p_factor=0.25;

q_factor=0.62;

%p_factor=0.10;

%q_factor=0.25;

if is_assembler

slot = assembler_slot;

else

slot = recycle_slot;

end

p=slot-q;

x=(1+p*p_factor);

if is_assembler

x=x+default_p;

end

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((assembler_slot+1)^4,5);

for i=0:(((assembler_slot+1)^4)-1)

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

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

itmp=i;

Qtmp=zeros(4,1);

for j=1:4

Qtmp(j)=mod(itmp, (assembler_slot + 1));

itmp=floor(itmp / (assembler_slot + 1));

end

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


A=zeros(10,10);

A(1,1)=1;

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

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

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

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

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

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

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

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

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

0 0 0 0 ingre2prod(1,1,Q(10),0)] .*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;

Amax=A;

elseif ratio<min

min=ratio;

Qmin=Q;

Amin=A;

end

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


end



일단 지난번 조립기계3이였을때의 결과를 리마인드 하자면

효율이 가장 좋은 경우는 모든 레시피에 품질2개 생산2개를 사용할 경우 79.879이였고

효율이 가장 안좋은 경우는 모든 레시피에 품질4개 또는 생산4개를 몰빵해서 사용할 경우 116.05였다


이제 플랜트에서의 결과를 알아보자



효율이 가장 안 좋은 경우


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

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

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

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

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

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

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

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

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


4종 제작법 전부 품질5 모듈로 통일을 하였을 경우가 최악의 효율이였다.

1,000,000개의 재료를 넣었을 경우 42,591개의 품질5 생산품을 얻을 수 있었고 이 때의 교환비는 23.479이다

최악이라고는 하지만 그래도 조립기계를 사용하였을때의 가장 좋은 교환비였던 79.879에 비하면 월등히 우월하다




효율이 가장 좋은 경우


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

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

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

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

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

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

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

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

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


이번에는 4공정 모두 품질모듈1개 생산모듈4개를 섞어서 사용했을 때 최고의 효율을 얻었다

이 경우에는 생산성이 +150%가 되고 1등급 위의 제품이 나올확률은 6.2%, 2등급 위의 제품이 나올확률은 0.62%...로 나오게 된다

이때는 1,000,000개의 재료를 사용하여 75,563개의 품질5 생산품을 얻을 수 있었으며 이 때의 교환비는 13.234였다.


교환비가 79.879에서 13.234가 되면서 기존보다 6배의 효율을 보여주게 된다

전자기 플랜트는 진짜 게임을 획기적으로 뒤집어준다


표로 한눈에 보기


대체적으로 생산모듈을 쓰는 쪽이 교환비가 좋게 나오는것을 볼 수 있다




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


전자기 플랜트를 사용할 때 사용하는 모듈의 대상을 품질5품질모듈3,품질5생산모듈3이 아니라 품질1품질모듈3,품질1생산모듈3을 사용하는 경우도 또한 궁금할 것이다


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





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


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


조립기계를 쓰던 시절에 교환비가 1072.6였던 것을 생각하면 획기적으로 줄었지만 그래도 비싸긴 비싸다 ㅋㅋ