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

품질작 오버플로우 방지처리 꼭 해줘야됨?완제품으로 품질작 돌리다가 특정 재료만 너무 많이 쌓여서 막힐 가능성은 없을까? 3줄요약- 버퍼 크기와 상관없이 반드시 막힌다. - 근데 그 전에 원자재 고갈난다. - 안전한 정도는 버퍼 크기의 제곱에 비례한다. 밑에gall.dcinside.com





요약 




이거 박으면 품질작 많이 돌려도 안터짐 























어제 계산한 파칩 루프의 오버플로우 시간에는 사실 문제가 하나 있다.


조건부 기댓값을 고려할 때, 파칩을 갈다 보면 

- 청칩 오버플로우(91%) 또는

- 빨칩 오버플로우(9%) 


가 발생하는데, 이때 빨칩의 오버플로우 시간은 청칩의 약 20배다. 



실제로는 벨트와 비교할 수 없는 속도로 청칩 오버플로우가 발생하며,


확률 분포에 매우 큰 왜곡이 발생한다는 뜻이다. 


따라서, 평균값과 함께 중앙값과 5% 분위수를 고려해 보자. 


기댓값과 마찬가지로, 적절한 근사를 거치면 분위수를 비롯한 많은 통계량이 버퍼 크기의 제곱에 비례(~x^2)함을 증명할 수 있다. 이는 재료의 개수와 무관하다.






제곱 법칙의 의미는 



이런 미니 다이소가 4개 있을때 




이 시스템보다 




이 시스템이 4배~16배는 오래 버틴다. 














이제 여러 아이템의 hitting time을 알아보자. 아이템이 3개 이상이면 closed form을 구하는 게 불가능에 가깝다. 어제처럼




팩토리오 안에서 시뮬레이션을 돌리는게 좋겠지만, 여러모로 번거롭고 컴퓨팅 자원도 부족하다. 







주어진 시스템을 대강 모조해 보자. 





버퍼 크기 500, 샘플 횟수 100으로 놓고 돌리면








mk1 벨트. 1에서 크게 벗어나지 않는다. 






품질작 많이 돌리는 중간 자재. 평균만 보면 1을 벗어나지 않는 것처럼 보이지만, 재료비 차이가 심해서인지 백분위수는 많이 낮다.







모듈. 재료 비율이 불균형한 속도3 모듈만 왜곡이 심하다. 나머지는 1에서 크게 벗어나지 않는다.








많이 쓰이는 공장들. 











공장을 반영구적으로 돌리기 위해선 어느 정도의 상자가 필요할까?



가정. 

- 초당 1M개의 아이템을 재활용기에 넣는다. 

- 공장을 1000시간 = 1e7초동안 가동한다.

- t/x^2=0.01

- 1스택 = 200. 노란 상자 하나가 9.6k개의 아이템을 수용한다. 


=> x = (1e6*1e7/0.01)^0.5 = 3e7개 = 노란상자 3e3개







이 정도의 버퍼면 오버플로우가 발생할 가능성은 매우 낮다. 

















그러나, 동서고금을 막론하고 영생에 대한 욕망은 언제나 있어왔다. 









다시 가정. 


- 초당 1B개의 아이템을 재활용기에 넣는다. 전설 파칩 1M/s 뽑다 보면 이 정도 수치는 나오지 않을까 

- 공장을 100년 = 3e9초동안 가동한다.

- t/x^2=0.01

- 1스택 = 100. 전설 노란 상자 하나가 12k개의 아이템을 수용한다. 


=> x = (1e9 * 3e9 /0.01)^0.5 = 1.7e10개 = 노란상자 1.4e6개 = (37청크)^2 












문제 해결.








파일 크기가 기가바이트 단위도 안 되니 누구나 해봄직하다.
























물론 이것보다 현실적인 방법이 있는데 





이런 느낌으로 모든 버퍼 상자가 꽉 찼을 때 요청 상자를 이용해서 가장 많은 아이템을 폐기하는 것이다. 


모든 버퍼를 공유한다는 점에서 오는 봇 물류의 사기성이 드러난다. 


(사진은 실동작하지 않는 개략도다. 예시 청사진은 https://factoriobin.com/post/38q28z)