어제 기차 경로가 특정 상황에서 재설정 된다는걸 배웠음.

댓글로 누가 바닐라 ltn 해보려다가 포기했다길래 '병신같은 생각이군, 당장하자' 마인드로 바로 연구해봄.


기차 경로 메커니즘:

https://wiki.factorio.com/Railway/Train_path_finding


이 실험에서는 경로 재설정 메커니즘 중 역에서 기차가 출발할 때 경로가 설정되는 것을 이용함.


ltn이라고 한다면 기차 한 대로 여러 배송을 하는 것이 주 목적이다.

따라서 이번 실험에서는 우선순위 등 다른 부가기능은 빼고 기차 하나로 공급, 요청을 하는것에 주안점을 두었음.







대략적인 실험 스케치

ltn의 능동적인 경로 설정을 구현하기 위해 '검사역' 이라는걸 추가했다.

검사역에서 기차의 물품을 검사하고, 해당 물품을 요청한 요청역으로 기차를 보내는 시스템임.

기차 경로 설정에 붙는 페널티와 경로 재설정 조건을 이용했음.







기차 스케줄은 다음과 같다.

위에서부터 차고지, 공급역, 검사역, 요청역임.

역 이름을 모두 통일해서 하나의 기차로 전부 돌아가게 만듬.

물론 ltn처럼 기차를 더 추가해도 된다.







먼저 요청역에서 요청이 발생한다.

늘 하던 ltn처럼 원하는 품목을 -로 걸고 일정 수 이상 떨어지면 요청이 걸리게 만들었음.

철광석(1)로 발생한 요청은 초록색 전역네트워크를 따라 이동한다.






철광석 (1) 신호를 받아온 철광석 공급역이 활성화된다.

사실 활성화는 원래 되어있고 공급역의 기차수 제한을 0에서 1로 늘리는 것.

이렇게 해야 기차가 차고지에서 요청이 발생할때 까지 대기한다.






공급역에서 철광석을 실은 기차는 검사역으로 이동함.

검사역에 잠시 정차하고, 검사역은 해당 기차가 싣고 있는 품목의 요청역들에 신호를 보냄.

예를들어 철광석을 싣고 있다면 철광석 요청역들에 전부 신호가 감.

하지만 그 중 요청 신호를 보낸 요청역만이 활성화된다.






요청역 활성화는 신호 제어를 사용했음.

검사역으로부터 철광석 기차가 온다는 예보를 받았고, 이 역이 요청신호를 보냈다면 신호에 초록불이 들어옴.

그렇다면 기차는 여러 요청역들 중 오직 여기, 신호에 초록불이 들어와 접근이 가능한 이 역으로 도착하게 된다.



이 방법을 사용하면 운송 품목도 상관없고, 공급역, 요청역 개수도 상관없이 그냥 ltn처럼 돌릴 수 있음.

공급역이랑 요청역도 품목 상관없도록 회로 짜서 스택 수랑 요청량 정도만 조절해주면 됨.

유체도 될거 같은데 잘 모르겠다.

그리드 형식으로 돌리려면 검사역 전용 대기줄 딸린 그리드 하나 파야될듯.


한 가지 큰 단점은 모든 기차가 하나의 검사역을 한번에 하나씩 통과해야 된다는 거임..

거의 기차 세 개 이상은 쓰기 힘들듯...

사실 효율 따질거면 그냥 ltn 쓰면 됨 ㅋㅋ


혹시 보고있는 회로 고수 있으면 개조 부탁함.

검사역 안쓰고 될려나 이게


청사진에 모드는 아마 AAI Container 하나 들어있을 거임.

Co / 8 << 이거 왜 금지어임? 청사진 안올라가네