고급 원유 처리를 이제 막 개방해서(뉴비), 샌박으로 중유 경유를 어떻게 관리할지 설계해보고 있었다.
출력부에서 펌프를 통해 중유를 탱크로 보내고, 탱크에 중유가 충분히 차면 펌프 효율이 낮아짐을 이용한 설계
회로 없이 하겠다고 고민을 많이 했는데, 찾아보니까 갤에도 있더라
근데 하다보니까 좀 신기한게 있음.
처음에는 펌프 하나로는 유체가 새길래 두개 세개 쓰다가, 나중에 보니까 하나로도 될 때가 있더라고?
위에 짤에서는 펌프 하나로도 유체 통제가 잘 되는 모습이지만, 어떨 때는 펌프 몇개를 달아도 유체가 새...
그래서 이 부분만 따로 가져와서 재연해봄.
지금 보면 똑같은 배치에서도 다른 결과가 나옴을 확인할 수 있다.(당연히 무한파이프 세팅은 같음)
조금 만지다 보니, 원인은 파이프의 건설 순서에 있음을 확인할 수 있었는데, '아래 파이프를 먼저' 건설한 구조가 가장 안정적이였음
위 짤을 기준으로
ㅁ
ㅁ
ㅁ
파이프가 이렇게 있으면
3
2
1
순서로 건설했을때, 좌측처럼 펌프가 안정적으로 유체를 가져오고 있음.
건설순서가 어떻게 영향을 미치는지는 몰라도, 펌프 직전의 3개 파이프와 펌프의 건설순서를 계속 바꿔가며 실험한 결과,
파이프를 아래에서부터 건설하는 것이 가장 중요해 보였.. 으나
귀찮아서 사진을 안찍어서 그렇지, 몇가지 예외도 존재했다.
///////////// 대표적인 예외 /////////////
2
1
3 순서는 문제가 없었다. (심지어 각 파이프의 유량이나 펌프의 속도도 3 2 1 과 다른점이 없었다)
근데,
3
2
1 순서로 지은다음, 1번째로 지은걸 부수고 다시 지은
3
2
4 는 문제가 있었다. ( 2 1 3과 다를게 없어 보이는데, 결과는 다름 )
이유는 모름.
////////////////////////////////////////////
그러다가 문득, 건설순서가 파이프 계산에 영향을 미친다면, 시스템의 유속에도 건설순서가 중요하지 않을까? 하는 생각이 들었다.
결론부터 말하자면, 아니다.
일단 가장 단순하게, 아래에서 위로, 위에서 아래로 지은 두 시스템을 비교해서 실험함.
(앞으로는 아래에서부터 지은걸 '앙', 위에서부터 지은걸 '윙' 으로 표기하겠음)
좌측은 앙, 우측은 윙이다.
(이 사진은 좌측 위 무한 파이프가 먼저 지어져서 약간 오차가 있다 / 무한파이프도 건설순서에 동일한 영향을 받는걸로 보임)
일단 유속비교 없이 유량만 보자면, 좌측의 유체 시스템에 유체가 더 많이 들어있었다 (좌 904, 우 638, 거의 1.5배 차이)
이번에는 유속을 비교해보자.
펌프로 유속을 확인했는데,(귀찮아서 찍지는 않음) 양쪽 다 동일한 값이 나왔다 (여기서는 1227)
펌프 직전 파이프의 유량은 양쪽다 20.5로 같았는데, 최종 유속이 같은 이유일 것이다. ( 20.5 * 6 0 = 1230 )
재밌는 점은, 우측의 시스템(윙)이 우리 상식과 다른 부분을 보인다는 것
(덧붙이자면 펌프 자체는 건설순서를 뒤바꿔도 시스템에 아무런 영향을 미치지 못했다)
최종 유속은 같은데... 유량은 다 다르다... 이거까지는 그렇다 치는데,
20.5 이전에 5.7이라는 유량은 어떻게 가능한걸까?
유속이나 유압에 대한 기존의 인식으로는 이해하기 어려워 보인다.
개인적으로는, 먼저 설치된 파이프를 하나의 틱에서 먼저 계산하다 보니 생기는 문제라고 추측한다.
다른 게임이나 입자단위의 시뮬레이션 프로그램에서도 자주 볼 수 있는 현상인데, 어디까지나 추측이긴 함.
이게 뭔말이냐면, 위 사진같은 경우는 (앙 기준) 아래에 있는 파이프에 대한 유체 계산을 먼저 하고, 그 다음 위로 차근차근 계산한다는 소리.
이렇게되면 유체가 공급되고있는 위쪽의 유체 계산순서가 뒤에 있게 되는데, 결론적으로 하나의 틱 내에서 유체는 하나의 파이프만 이동하게됨.
솔직히 개발자로 일해본건 아니라 자세한 원리가 맞을지도 모르고, 아예 틀렸을 수는 있다.
글이 좀 길어져서 마무리를 해야할 거 같은데, 틱에대한 계산 순서 얘기를 꺼낸만큼 틱에 대한 실험을해봤다.
사진은 몇장 안찍었는데, UPS를 1.5까지 내려서 틱당 계산을 관찰했다. (실험 다 끝나고 안건데, 에디터 쓰면 한틱씩 넘기기 되더라. 혼자 개지랄함...)
앙.
예상한대로 1틱당 1파이프를 이동하는 것으로 보였다. (UPS가 1.5라서, 2초에 3개를 이동했다)
여기까지는 크게 의미가 없다. 당연히 대조군을 가져와야한다.
윙.
예상에 적중했다. 1틱만에 가장 아래 파이프까지 유체가 도달한 모습.
하나의 틱 내에서 위쪽의 유체를 먼저 계산하고, 바로 아래 유체를 연이어 계산하기 때문에 가능한 일이다.
(Alt 모드라 헷갈린거 아니냐고 생각할 수 있는데, 잘못찍었을 뿐이지 혼자서 여러 상황들을 수차례 실험한 거라 ㄱㅊ)
물론 계산순서 면에서 유리하더라도, 유압의 문제는 똑같기 때문에 아래쪽 파이프의 유량 자체는 매우 적다.
이 계산순서는 청사진이나 복붙에서는 적용되지 않았지만(드론이 건설한 순서를 따름), 재접시에는 동일했다.
/////////////////////////////////////////////////////////////////////////////////////////
사실 호기심에 이런저런 실험을 하게됐는데, 여전히 중유를 끌어당기는 펌프는 이해가 완벽하지 않고,
유체에 있어서 '계산순서'는 무엇인가? 하는 의문, 유량 값의 역행, 결과적으로 같아지는 유속에 대해서는 전혀 모르겠다.
추측에 추측을 더해보자면 파이프는 한번의 계산에서 '주변과의 1회 상호작용'을 하는 것으로 보이고(출/입을 모두 하는지는 모름. 하나만 할 수도 있음),
유량 값의 역행은 뒤바뀐 계산순서에서의 안정상태로 보인다(일종의 계산상 정체가 발생한다고 볼 수 있는데, 잘은 모르겠다).
최종 유속이 앙이랑 윙이 같은건 아예 모르겠는데, 아마 최적화 과정에서 표기값과 실 계산이 다르게 이루어질 수도 있을 거 같다(이것도 실험을 통해 부분적으로 확인 가능할 것으로 보임).
생략한 부분들도 많고, 논리적으로 안맞는 부분도 많을 수 있다.
학생인지라 시간이 없어서 생각이 여기까지 못미친게 조금 아쉽다.
혹시 이 부분에 대해 아는 내용이 있다거나, 내가 한 말 중에 문제되는게 있으면 지적해줬으면 좋겠다.
피곤할때 써서 그런가 글이 엉망진창인데 이해좀 해주셈
유속 관련은 많이 알던 정본데 유량은 처음 들어보네
보통 유량의 차이로 유압이 결정되고, 유압이 유속을 만든다는 식으로 설명하더라고. 근데 이 실험을 보면 뭔가 더 복잡한 코드가 있는 거 같음. 최적화와 관련된 거라고 추측하는데, 여튼 우리가 알던 것과 다름.
수능 끝나고 틱단위로 더 자세히 공부해오겠음
https://forums.factorio.com/viewtopic.php?t=19851
건설
순서에 따라 차이나는 건 처음부터 그랬고 딱히 고칠 생각도 없어 보임.
애초에 설계할 때부터 특정 건설 순서/방향에 따라 작동하는 건 안 만드는 게 좋고
이왜진 ㄷㄷ
여러 시행이 반복되면 최종 유속이 서로 같은건 당연하지만, 유량의 역행같은 부분을 보면 신기한 부분이 많음. 어지간히 큰 공장이나 복잡한 유체관리를 하지 않는 한 문제는 없어서 고칠 필요는 없어보임. 굳이 찾아보면 유속 자체보단 유속 변화율에 영향을 크게 받는 유체 상하차에서 고려할 거 같은데, 몇틱차이라 의미가 있는지는 잘 모르겠음.
먼저 지어진 건물이 어떤 리스트에 먼저 담기고 그걸 틱마다 하나씩 처리할때 어떤곳에서 먼저 인접 파이프로 유체를 이동시킬지가 영향을 미치는건가 그러면 게임 나갔다 들어와서 리셋시키면 결과가 달라지려나 근데 블프 포멧보면 지어진 순서대로 저장되는 구조같기도 하고
본문에도 있지만, 블프의 경우는 해당 값이 저장되지 않아서 드론의 실 건설순서가 계산순서가 됐음. 한편 나갔다 들어온 경우에는 이것이 유지됐는데, 아마 엔티티별로 1부터 차례로 숫자를 배정받고 있을 확률이 높음.
그러나 본문에 쓴 예외상황처럼 계산순서가 동일해 보임에도 결과가 다르기도 한데, 개별 파이프는 계산순서 뿐만 아니라 인접한 4개 타일중 어떤 타일과 먼저 상호작용 할지도 기록하는 것으로 보임. 동서남북의 상호작용에 대해서 무엇을 먼저 처리하는지도 건설순서가 결정하는 것 같음.
오 아하 ㄱㅅㄱㅅ
++ 추가. 앙과 윙에서 유량차이가 발생하는 것은, 최종적으로 하나의 틱만을 우리가 관찰할 수 있기 때문인 거 같음. 앙의 경우는 우리가 세미틱 단위의 계산을 보게되는 거고, 윙의 경우는 해당 시스템에서 연쇄 가능한 모든 세미틱의 계산이 끝난 후에 그 결과만을 관찰하기 때문임.
이 논리대로라면 펌프는 계산순위를 독립적으로 가짐을 알 수 있는데(펌프 직전의 유량 역행으로부터), 아마 다른 파이프보다 계산이 최우선으로 적용되는 거 같음. 여전히 이상한 부분이 많은데, 대략 이렇다는 것. 실제 사용에 있어서 유속차이가 안나는 원인도 세미틱으로 생각해보면 해결이 된다.
대충 이 논리대로면 내가 만든 중유 처리장치도 이해가 가능함. 다른 곳에도 영향을 줄지는 의문인데, 유체 세미틱 사이에 펌프의 세미틱을 배치하느냐 아니냐 빼고는 문제가 없을 거 같음
세미틱 = 엔티티 하나하나의 독립적인 계산 1회. 내가 지은 말임
파딱이 달아준 포럼에서 찾은 사진.
https://truth.bahamut.com.tw/s01/201705/3b3bb060665f672b2e7da21f70aeac03.GIF
열길 사람속은 알아도 한길 물속우 모른다 이마리야~