요즘 컴퓨터공학, 컴퓨터과학을 2년째 공부하며 이 작고 얇은 물건 안에 얼마나 아름답고 정교한 세계가 존재하는지 느끼고 있습니다
그러던 와중 공략글을 봐주시는 분도 계시는 거 같고, 종강을 하게 되어 글을 계속 잇게 되었습니다
글을 계속 진행하면서 언젠가 후반에 도달한다면 제가 아름답다고 느낀 부분을 어떻게든 녹여내고 싶습니다
아무튼간에 오늘 글에서는 로보포트, 기차역의 간단한 응용 정도만 소개하겠습니다
그럼 갑시다
이 글에서 다루는 내용
로보포트, 기차역을 회로 시스템에서 사용하는 방법
로보포트
로보포트는 신호를 받는 기능은 없고 내보내는 기능 2개를 가집니다.
1. 현재 해당 로보포트가 연결된 물류 네트워크의 로봇 통계 (사용가능/전체 물류/건설 로봇의 수) 읽기
2. 현재 해당 로보포트가 연결된 물류 네트워크의 아이템 읽기
먼저 첫 번째로 소개할 기능은 해당 로보포트가 속한 물류 네트워크의 드론 관련 수를 출력하는 기능입니다.
사용할 수 있는 물류 로봇, 전체 물류 로봇, 사용할 수 있는 건설 로봇, 전체 건설 로봇 이렇게 4가지 정보를 원하는 종류의 신호로 출력할 수 있습니다
출력 신호의 종류는 기본값으로 위처럼 [X], [Y], [Z], [T]로 설정되어 있습니다. (임의의 신호로 변경할 수 있습니다)
주의할 점이, 저 신호는해당 로보포트 한 개가 아닌 로보포트가 연결된 물류 네트워크 전체의 정보를 출력한다는 것입니다.
가장 많이, 그리고 거의 유일하게 쓰이는 응용은 위처럼 선택적으로 새 로봇을 공급하는 것입니다.
로보포트에서 현재 사용 가능한 물류 로봇을 읽어서, 현재 사용가능 로봇이 10 미만일 때만 투입기가 작동하도록 합니다.
물류 네트워크의 로봇들이 바쁘게 움직여 사용 가능한 로봇의 수가 적어지면, 투입기는 공장에서 생산된 로봇을 네트워크로 공급하게 됩니다.
이렇게 하면 네트워크의 로보포트들이 담을 수 있는 한계까지 자동으로 로봇을 채우게 되는 것을 막고 수요에 맞춰 로봇을 공급할 수 있습니다.
또 다른 응용으로는 전체 로봇 수를 읽어 서로 독립적인 물류 네트워크 사이의 로봇 개수를 밸런싱하는 것입니다.
후반에 숲 철거 등으로 한 곳에 로봇 부하가 몰리면 로봇들이 한 지역에 집중되어 저장되어 버려서, 로봇이 반대쪽의 지역으로 가는 시간이 길어진다는 문제가 있는데요,
이를 해결하기 위해 물류 네트워크를 모든 기지를 커버하는 한 개만 쓰는 것이 아니라 독립된 물류 네트워크 여러 개를 쓰는 접근이 존재합니다.
그리고 독립된 물류 네트워크 사이에 로봇 수를 수요에 따라 잘 밸런싱하면 이론적으로는 굉장히 효율적으로 동작할 수 있겠습니다.
하지만 현실적으로 로봇을 잘 분배하는 시스템을 구축하는 것이 힘들고 비용이 많이 들어 실용적인 방법은 아니라고 생각합니다. 물론 재미있긴 하겠습니다.
게다가 팩토리오 2.0에서 해당 문제를 해결하는 방법을 제시했던 거 같은데 그 때가 되면 별 필요없어질 수도 있겠습니다.
두 번째 기능은 해당 로보포트가 속한 물류 네트워크의 아이템을 읽는 것입니다.
아이템은 파란색인 요청 상자를 제외한 4개의 상자에 있는 아이템만 읽습니다.
즉 요청 상자에서 요청했을 때 가져올 수 있는 아이템만 읽는다고 생각하시면 됩니다.
참고로 드론이 운송 중인 아이템은 읽히지 않습니다.
여기서 보라 -> 노랑, 보라/빨강/노랑 -> 초록 의 운송 과정에서 신호가 없어졌다가 다시 생기는 일이 발생하니 시스템을 설계할 때 이 점을 주의해야 합니다.
딱히 해볼만한 응용은 떠오르지 않는데요, 개인적인 생각으로는 팩토리오는 굉장히 분산된 시스템을 추구하는 게임이라고 생각합니다.
공장은 자신과 연결된 투입기 혹은 파이프와만 상호작용을 하고, 그렇게 인접한 요소들의 상호작용이 모여 전체의 공장을 형성합니다.
벨트의 앞쪽이 막히면 뒷쪽도 같이 멈추는 등의 동작이 요소 사이를 동기화시킵니다.
그런데 물류 네트워크의 모든 인출 가능한 아이템 정보를 읽겠다는 행위는 굉장히 중앙 집중적인 것처럼 보입니다.
중앙에 위치한 하나의 시스템이 저 값을 읽어서 무언가 처리를 하겠다는 거죠.
그런 것보단 분산형의 시스템이 팩토리오와 더 잘 어울리지 않나라는 생각을 합니다.
기차역
다음은 기차역입니다.
기차역은 신호를 받는 기능 3개와 신호를 내보내는 기능 3개, 즉 6개나 되는 많은 기능을 가집니다.
1. 활성화/비활성화 : 활성화 조건을 설정합니다. 비활성화시 기차역이 없는 것과 같은 효과를 냅니다
2. 기차에 신호 보냄 : 기차가 받은 신호를 출발 조건으로 활용할 수 있습니다
3. 기차 수 제한 설정 : 기차역으로 가는 기차의 수를 제한합니다. 0이라면 비활성화시와 같은 효과를 낼 것입니다
4. 기차 내용물 읽기 : 기차가 옮기는 아이템을 읽습니다. 기차 연료는 제외됩니다
5. 정차한 기차 읽기 : 기차 ID를 읽습니다
실험 결과, 기차 ID는 기차를 새로 만든 순서대로 1씩 증가합니다. 맵을 저장하고 나와도 1부터 시작하지 않고 계속 증가합니다
맨 처음 배치한 기차 ID는 2로 확인되었습니다.
서로 연결된 기차는 방향이 서로 다르든 같든 같은 ID를 가지며, 기차 배치 시, 기차 연결 시, 기차 연결 해제 시 매번 기차 ID가 할당됩니다.
A B 기차 가운데에 기차 C를 삽입하여 A-B-C가 연결된다면 C삽입 - C-B연결 - A-C-B연결 로 기차 ID가 3 증가합니다.
기차 ID는 유일함이(다른 것과 겹치지 않음이) 보장됩니다. 단 42억을 넘으면 처음으로 돌아갈 것으로 예상합니다.
- 위 결과들은 실험한 내용이므로 충분히 틀릴 수 있습니다
6. 기차 수 읽기 : 역으로 가고 있는 (역에 정차해 대기하고 있는 것 포함) 기차의 수를 출력합니다
기차역은 초급 수준에서 응용하기 애매한 것 같습니다. 기차역에 회로를 사용하면 좋은 명확한 응용이 생각나지 않고,
응용한다고 하면 죄다 어렵고 쓸데없어 보이는 접근만 생각납니다.
궁극적으로는 바닐라 LTN 하라고 다양한 옵션을 만들어 놓은 것 같습니다. 기차가 스스로 실시간으로 길을 찾을 수 있다는 능력은 매우 유용하게 쓰일 수 있습니다.
바닐라 LTN같은 경우는 고급 주제로 나중에 다뤄보겠습니다.
마치며
로보포트, 기차역의 회로 응용은 실용적인 게임 플레이에서 거의 쓰이지 않을 수 있으나 매우 복잡한 물류 시스템을 만드는 핵심 구성요소가 될 수 있습니다.
복잡한 시스템을 설계하고 구현하는 데 흥미가 느껴진다면 이 둘의 기능을 생각하면서 다양한 접근을 시도해 봅시다.
내용 수정
- 2023. 12. 16. 03:28 : 최초 작성
좋은글 고마워. 공략글 덕분에 회로 만들 때 많은 도움이 되었음
님기다리구잇짜느
감사하다