어제 지하 파이프 수율이 좀 낮게 나오는 원인을 알았다. 








이런. 









다시 계산해 보자. 


지하 파이프 내부 순환 과정에서 41.2%의 지하 파이프가 추가로 생성되며, 

정확한 유량비는 다음과 같다. 

  [전설 철판(출력) 1 : 지하 파이프(입력) 35.11 : 지하 파이프(계) 49.57]


즉, 겉보기 수율 1/47.4의 누수량은 그렇게 크지 않다.









그리고 이 상황으로부터 (진지하게) 심각한 문제가 도출된다. 


측정.


수율과 생산 속도를 어떻게 측정할 것인가? 








단순히 10000개 투입해서 몇 개 나오는지 보면 끝이 아니다. 안정화 시간, 버퍼 내 부산물 등으로 통계가 오염되기 때문에 


공장이 안정적으로 돌아가는 상황에서 유량을 재야 한다.




그래프부터 좀 끔찍하다. 일단 생산 통계가 간헐적이고, 요동치는 범위가 극단적이며, 주기도 은근 들쑥날쑥하다. 평균값도 1시간 범위까지는 계속 요동친다. 


오차를 10배 줄이려면 적어도 100배는 더 관측해야 하는데, 보이는 걸로 어림해도 수십~수백시간이 소요된다. 









통계학 용어로 시계열 분석이 필요하다. 다만 복잡한 모델에 대해서는 아는 게 하나도 없다. 


전통적으로 쓸 수 있는 방법은 이동 평균 또는 지수 이동 평균(=low-pass filter)가 있다. 

- 이동 합은 회로 수준에서 구현하기에는 쉬우나, 메모리 소모(공간 소모)가 매우 크다. 


- 지수 이동 평균은 구현이 정말 간단하다.


https://forums.factorio.com/viewtopic.php?t=101198


Kalman filter for simple average belt flow measurementI'd like to share a very compact design to measure a belt flow. I know that there is a way to measure the flow by connecting 100 belts in a line together, bu…forums.factorio.com


입력 신호에 적당히 큰 수 (10000 정도)를 곱한 뒤 다음 수식을 그대로 구현하면 된다. 



다만 정밀도 문제 및 int32 오버플로우 때문에 1시간 단위에서 평균을 재기는 힘들다. int32 바탕의 int64 구현체가 필요하다. 








결국은 가장 단순한 해법으로 돌아왔다.

1초, 1분, 1시간 등 일정 구간마다 모든 통계의 누적값을 기록하는 것이다. (binning)




팩토리오 생산창에서 값 읽어오는 것과 뭐가 다르냐고 묻는다면 할 말이 없다.


다만 비슷한 공장 여러가지 굴릴 때 통계값을 분리하려면 다른 방법이 없다. 





다음은 1초 주기로 지나가는 모든 아이템을 세는 회로이다. 







구성은 메모리 셀 2개로 단순하다. 다만, (1) 입력 조건과 (2) 초기화 조건이 다르다. 




- 첫 번째 메모리 셀은 (1) 입력으로 들어오는 모든 신호 펄스를 합산하며, (2) 60틱마다 한 번 누적된 값을 초기화한다. 클락이 내장되어 있다. 






- 두 번째 메모리 셀은 (1) 60틱마다 한 번, 옆 셀에서 값을 끌어와 (2) 덮어씌운다. 










만약 유량 측정을 포기하고 수율만 재려면 조합기 셀 하나로도 충분하다.


공장이 완전히 안정화된 상태에서,




아래와 같이 설정해두고














잘라내기 + 붙여넣기로 내용물을 초기화한다. 









조악한 통계지만 그래도 쓸만하다.


수율 측정값 35.4, 이론값 35.1 


손실 단 1%  (전설~희귀 품목의 레시피 스위칭을 좀 대충 해서 오는 부분이 없잖아 있다.)






으흐흐 













여기까지 온 김에, 회로 좀 다듬고


지하파이프 레시피 돌리는 방향도 역순으로 바꿨다 (고급(2) -> 희귀(3) -> 특급(4) -> 전설(5) -> 일반(1)).



https://factoriobin.com/post/cr8cna


iron_plate_5_udp - FactorioBinFactorioBin is a site for quickly and easily sharing Factorio blueprintsfactoriobin.com




이제 이걸 불카누스에 갖다박기만 하면 철판 전설작을 할 수 있다!

















한편으로, 지하 파이프 루프와 저밀구 셔플을 만지다가 알게 된 건 







이 녀석이 충분히 준비되지 않으면 영원히 돌아가는 공장을 만들 수 없다...


지속적인 전설 플라스틱의 수급이 우선시되어야 한다. 


전설작 공정 설계 순서를 충분히 계획하지 않은 탓이다. 







생산성 +300%을 찍은 시점에서 전설 플라스틱을 얻을 방법은


생 저밀구 루프 (수율 1 + 대량의 부산물)와 파칩 (수율 1/4 + 대량의 부산물)가 있다. 


공간 소모를 생각하면 여러모로 파칩이 유리하다. 






파칩을 갈면 전설 녹칩, 전설 빨칩, 전설 철판, 전설 구리판, 전설 플라스틱이 모두 나온다. 


심지어 수율도 지하파이프 루프와 비교할 수 없이 높다. 


처음부터 파칩 전설작에 집중했으면 모든 일이 쉬워지지 않았을까? 






전에 만들어진 파칩 루프를 개선할 때가 되었다....






사실, 수율 1인 파칩 업사이클링에서도 공간을 아끼려면 레시피 스위칭을 해야 한다. 그 이유는 



1. 전설 칩을 생산하는 공장은 필연적으로 놀 수 밖에 없다. 










2. 전자기 공장은 1개뿐이여도 병목이 되기 힘들다. 당장 비컨 2개만 걸어도 터보벨트 4스택 반줄을 소모하는데 



루프 횟수의 기댓값은 14.8회다. 전설칩을 저만큼 뽑으려면 적어도 벨트 5줄 이상이 필요하다는 이야기다.






이렇게 플랜트 딱 1개, 비컨 1개 박고 레시피 스위칭을 해도 재활용기가 감당을 못한다. 








처음부터 다시 생각해보자.


파칩 루프의 특징적인 점은 수율이 1에 가깝다는 점으로,


품질 수치는 오로지 루프 횟수와 생산 유량에만 영향을 미친다. 





어제 논의했던 대로, '속도 모듈'로 공장의 속도를 조금 깎아도 


루프 횟수가 늘어나는 것 말고는 아무런 문제가 없다는 뜻이다. 




전력 소모를 배제하면, 2.1에서 전설 속도 모듈의 사양은 다음과 같다. 

- 전설 t1s: 속도 +0.5 품질 -0.01

- 전설 t2s = 전설 t1s 1.5개

- 전설 t3s = 전설 t1s 2.5개

즉 모든 단위를 전설 t1s로 통일할 수 있다. 




얼마나 속도 모듈을 박아야 하는가? 


더 많은 계산.





전설 t1s의 개수에 따른 재활용기 속도, 루프 횟수, 출력 유량을 알아보자. 












중요한 건 output rate가 최대가 되는 지점이다. 







비품질 비컨과 속도 모듈의 혼합으로 유효 t1s의 개수를 잘 조절해서 


재활용기 속도를 8로 맞추면 재활용기 1개당 출력 유량을 공짜로 4.4배 높일 수 있다!


(단, 루프 횟수가 2배 가까이 증가한다는 점을 간과해서는 안 된다.) 







이런 느낌으로 말이다.






이 계산이 제대로 된 건지 검증하는 과정이 남았으나


오늘은 지쳐서 더 이상 공장을 조물딱거릴 수 없다...






차근차근 추적해 보자...