확장팩 FFF 모음 정리 링크



https://www.factorio.com/blog/post/fff-374

Friday Facts #374 - Smarter robots | FactorioHello, today we are going to talk about some flying robot behavior improvements. Some of the problems we fixed were reported countless times, so I hope that some people will appreciate it :).www.factorio.com


DeepL 번역기로 초벌 번역 돌리고 어색한 부분 몇 군데 수정함

움짤로 만들면서 화질구지됐으니까 고화질 원하면 링크로


--------------



안녕하세요,

오늘은 비행 로봇의 동작 개선에 대해 이야기해 보려고 합니다. 저희가 수정한 문제 중 일부는 수없이 많은 분들이 보고해 주셨던 것이니 많은 도움이 되셨으면 좋겠습니다 :)



삶의 질 vs 화려한 기능 - 코바렉스


여러분은 주로 새로운 콘텐츠를 기대하고 있으며, 단순히 삶의 질이 개선되는 것만으로는 사람들이 게임을 구매하기를 기대하게 만들지 않는다는 것을 알고 있습니다.


하지만 이미 단순하지 않은 게임에 콘텐츠, 메커니즘, 시스템을 추가하려면 항상 지나치게 복잡해질 위험이 있다고 생각합니다. QOL 개선을 통해 사소한 번거로움과 성가심을 줄임으로써 게임을 더 많이 즐길 수 있는 정신적 공간을 효과적으로 확보할 수 있습니다. 새 장난감을 사기 전에 방을 청소하는 것과 같습니다.


명확히 말씀드리자면, 저희가 이런 변화를 시도하는 이유는 새롭고 화려한 기능을 만들고 싶어서가 아니라, 새로운 기능을 너무 많이 다루어야 한다는 부담 없이 즐겁게 사용할 수 있기를 바라는 마음에서입니다.

다음 주에도 새로운 기능을 선보일 예정이니 걱정하지 마세요!




더 스마트한 로봇 작업 - Oxyd


물류 로봇과 건설 로봇은 오래 전부터 게임에 등장해 왔으며, 그 핵심은 매우 단순한 개체에 불과합니다. 예를 들어 물류 로봇에게 상자에서 아이템을 가져와 다른 상자에 전달하라는 지시를 내릴 수 있습니다. 지금까지는 괜찮았지만 팩토리오에서는 보통 한 상자에서 다른 상자로 500개의 아이템을 옮기라는 지시를 받으면 로봇은 어떻게 할까요?




기존 방식


팩토리오 1.1에서 게임은 로보포트에 숨어 있는 로봇을 포함하여 모든 쉬고 있는 로봇의 목록을 보관하고, 처리해야 할 작업이 있을 때 해당 목록에서 가장 가까운 쉬는 로봇을 선택합니다. 따라서 공급 상자에서 요청 상자에게 아이템 500개를 전송하려면 게임에서 공급 상자와 가장 가까운 첫 번째 쉬고 있는 로봇을 찾아서 전송 작업을 수행합니다. 이 로봇은 이제 작업이 있으므로 쉬는 로봇 목록에서 제거됩니다.


하지만 아직 전송해야 할 다른 품목이 499개 남아 있습니다(단순화를 위해 로봇 용량 보너스 무시). 물류 네트워크는 다른 모든 품목에 대해 이전 단계를 반복합니다. 가장 가까운 쉬는 로봇을 찾아 다음 품목을 옮기는 작업을 수행하는 식으로 상자 안에 500개의 품목이 있을 때까지 반복합니다.





이 전략의 문제점은 처음 몇 대의 로봇은 공급 상자와 상당히 가까운 로보포트에 위치할 수 있지만, 마지막 품목에 도달할 때쯤에는 작업에 적합한 쉬고있는 로봇이 없기 때문에 네트워크가 공장의 다른 쪽 끝에 있는 로봇을 찾아야 할 수 있다는 것입니다. 결국 첫 번째 배치의 로봇이 상자에 도착하여 물품을 가져와 목적지로 배송한 다음 재충전하고 로봇 포트에서 낮잠을 자게 되는데, 이 로봇은 물품 한 개를 옮기는 것이 임무의 전부이며 나머지 물품은 이미 다른 로봇에게 할당된 상태입니다. 그 후에는 공장의 멀리 떨어진 곳에서 로봇들이 천천히 날아와 나머지 물품을 옮깁니다.


건설 로봇도 상황은 비슷하며, 특히 휴대용 로보포트를 사용할 때 이러한 현상이 더욱 두드러집니다. 플레이어가 공장에서 나무를 많이 제거하려고 한다고 가정해 보겠습니다. 하나의 개인용 로보포트에는 최대 50대의 건설 로봇을 보유할 수 있으므로 플레이어의 개인용 로봇을 사용하여 해체할 수 있는 나무는 최대 50그루입니다. 남은 나무는 모두 기본 물류 네트워크의 로봇에 할당되며, 플레이어는 플레이어의 개인 로봇이 더 이상 할 일이 없는데도 나무가 사라질 때까지 로봇이 도착할 때까지 기다려야 합니다!







새로운 방식


쉬고있는 로봇 목록에서만 작업을 수행할 로봇을 선택하는 것은 분명 최선의 전략이 아닙니다. 현재 사용 중이지만 근처에 있는 로봇에 작업을 할당하는 것이 새 작업이 로봇의 다른 작업이 끝날 때까지 기다려야 하는 경우에도 더 나은 선택일 수 있습니다. 이를 위해서는 물류 네트워크 코드에 두 가지 주요 변경 사항이 필요했습니다.


첫 번째 변경 사항은 로봇에 여러 작업을 할당할 수 있도록 허용하는 것이었습니다. 대부분의 코드는 로봇이 정확히 하나의 작업을 수행한다는 가정 하에 작성되었지만, 몇 가지 코드 리팩터링을 통해 이제 로봇은 작업 대기열을 갖게 되었습니다.


둘째, 작업을 위해 로봇을 선택하는 방법이 필요합니다. 각 작업에는 시작 위치가 있습니다. 예를 들어 해체 작업은 해체할 엔티티에서 시작됩니다. 지금까지는 해당 지점에서 가장 가까운 쉬는 로봇을 선택하기만 하면 되는 간단한 선택 프로세스였습니다.

하지만 이제 대기 중인 작업이 하나 이상 있는 로봇도 선택할 수 있게 되면 프로세스가 조금 더 복잡해집니다.


로봇 선택의 새로운 기준은 도착 시간입니다. 쉬고있는 로봇의 경우 도착 시간은 단순히 시작 위치까지의 거리를 속도로 나눈 값입니다. 바쁜 로봇의 경우 작업 대기열을 살펴보고 로봇이 작업이 끝나면 언제 어디로 갈지 파악한 다음 거기에서 새 작업의 시작 위치까지 비행 시간을 더할 수 있습니다.

작업을 위해 로봇을 선택할 때는 그 전에 다른 일을 처리해야 하는 경우에도 가장 먼저 도착할 로봇을 선택합니다.


도착 시간 계산은 추정치일 뿐이라는 점을 지적할 필요가 있습니다. 예를 들어 충전 시간의 영향을 단순화했습니다. 예리한 눈을 가진 플레이어라면 다른 로봇을 선택했다면 조금 더 효율적일 수 있는 상황을 알아차릴 수 있을 것입니다. 하지만 큰 그림에서 보면 그다지 눈에 띄지 않는 것 같습니다.


새로운 시스템이 앞의 두 가지 예시를 어떻게 처리하는지 살펴보겠습니다. 초기 배치의 로봇은 모든 항목을 전송하는 작업을 수행하며, 그 결과 요청 상자와 공급 상자 사이를 왔다 갔다 하게 됩니다.






나무를 해체할 때 플레이어의 각 개인 로봇은 나무 하나만 해체하는 것이 아니라 그 이상의 작업을 수행합니다. 메인 네트워크의 로봇이 여전히 도움을 주지만, 이번에는 전체 작업을 더 빨리 완료할 수 있도록 도와주기 때문입니다.






성능


사용 중인 모든 로봇의 간단한 목록을 작성하고 새로운 작업이 들어올 때마다 이를 검토하는 것은 소규모 공장에서는 괜찮을지 모르지만, 수천 대의 로봇이 사방에서 돌아다니는 공장에서는 금방 UPS를 소모하는 일이 될 수 있습니다. 이러한 문제를 완화하기 위해 우리는 다른 표현을 구현했습니다.


로봇의 작업 대기열이 업데이트될 때마다 로봇은 최종 위치 추정치, 즉 최종 위치와 완료될 시간을 계산합니다. 이제 각 맵 청크에는 해당 청크에서 완료될 것으로 예상되는 모든 작업 중인 로봇의 목록이 저장됩니다. 따라서 로봇이 최종 위치 추정치를 업데이트하면 해당 청크의 로봇 목록에 자신을 등록합니다. 특정 작업을 수행할 로봇을 검색할 때 이제 게임은 해당 작업의 시작 위치가 있는 청크에서 검색을 시작하고 바깥쪽으로 나선형으로 검색을 계속합니다.


바쁜 로봇을 덩어리 단위로 저장하고 나선형으로 검색하면 성능이 크게 향상되어 수천 대의 바쁜 로봇이 있는 공장도 원활하게 운영됩니다.





더 똑똑한 로봇 다른 것들 - 클로난


지난 2년간 확장팩을 플레이하고 개발하는 동안 로봇이 더 똑똑해지고 더 잘 작동하도록 몇 가지 기능을 추가하고 변경했습니다.



로보포트 로봇 요청


일부 로봇 포트에 항상 로봇을 배치하여 작업을 처리해야 하는 상황이 있습니다. 예를 들어, 버퍼 상자가 있는 작은 재보급 지점(역주 : 다이소같은곳) 에 물류 로봇을 배치하여 쓰레기를 빠르게 비우고 보급품을 다시 채워야 하는 경우입니다. 모든 재료가 바로 옆에 있는데 로봇의 자연스러운 이동 패턴으로 인해 해당 지역의 로보포트가 상당히 비어 있으면 매우 짜증날 수 있습니다.





요청 상자, 삽입기, 회로망 등으로 해결할 수도 있지만 더 원활한 접근 방식을 결정했습니다. 이제 로봇에 대한 물류 요청을 로보포트 GUI에서 직접 설정할 수 있습니다. 요청을 이행하기 위해 다른 로보포트에서 로봇이 파견됩니다(중요한 점은 보관 상자나 공급 상자에서는 로봇을 가져올 수 없다는 점입니다).






이 새로운 기능을 사용하면 재보급 지점 근처의 모든 로보포트에 항상 100대의 물류 로봇을 사용할 수 있도록 설정할 수 있습니다. 일단 도착하면 필요한 서비스를 빠른 시간 내에 받을 수 있으며, 이후에는 로봇이 도착하여 로보포트가 100대까지 채워지는 것을 볼 수 있습니다.








이 기능의 또 다른 좋은 용도는 로보포트 요청을 사용하여 네트워크에서 특정 로봇을 제거할 수 있다는 것입니다. 품질이 좋은 작업 로봇이 있는 모드가 있다면, 품질이 낮은 로봇을 요청하고 필터 삽입기로 제거하여 시간이 지남에 따라 더 나쁜 로봇을 유통네트워크에서 제거할 수 있습니다.





더 나은 로봇 충전 휴리스틱


작업 로봇의 에너지가 부족해지면 가까운 로보포트를 찾아 충전해야 하는데, 이를 위해서는 약간의 현명함이 필요합니다. 예를 들어 항상 가장 가까운 로보포트를 선택하면 일부 로보포트에는 대기열이 생기고 교통 체증이 발생하지만 다른 로보포트는 완전히 비어 있을 수 있습니다.


이러한 '스마트'를 위해 우리는 로보포트가 얼마나 가까운지뿐만 아니라 현재 충전 중인 다른 로봇의 수까지 고려하는 아주 간단한 휴리스틱을 사용합니다. 일반적으로 이 방식은 '충분히 잘' 작동하지만, 가끔씩 일부 로봇 포트에는 여전히 로봇이 몰려 있고 조금 더 멀리 있는 다른 로봇은 무시되는 약간 불편한 상황이 발생할 수 있습니다.







일부 극단적인 경우에는 충전을 기다리는 로봇이 여전히 호버링에 에너지를 사용하므로 더 많은 에너지를 잃게 되고, 대기열에 합류한 모든 로봇이 차례를 기다리는 동안 에너지가 0으로 떨어지는 무한 루프가 발생하기 때문에 실제로 상당한 문제가 될 수 있습니다. 일반적으로 여기서 가장 큰 문제는 플레이어가 로봇을 보고 "이 로봇들은 너무 멍청해..."라고 생각한다는 것입니다. 이 문제가 세상의 종말을 초래하지는 않지만 우리는 더 잘할 수 있습니다...


놀랍게도 이 경우 휴리스틱 로직을 조금만 개선하면 문제를 크게 해결할 수 있었습니다. 로봇은 충전할 로보포트를 결정할 때 해당 로보포트로 가는 길에 있는 현재 로봇은 고려하지 않고 이미 대기열에 있는 로봇만 고려했으며, 로보포트에 열려 있는 무료 충전 스팟의 수를 고려하지 않았습니다. 이 두 가지 추가 매개 변수를 방정식에 추가하면 로봇의 분포가 상당히 개선됩니다.








호수 위 로봇 경로를 위한 개선 조치


로봇은 경로 탐색에 있어 상당히 멍청하고 물류 네트워크가 닿지 않는 지역을 비행하려고 시도하는 등 오랫동안 문제가 되어 왔습니다. 이는 성능상의 이유로 경로 탐색을 전혀 수행하지 않기 때문입니다. 로봇은 작업 위치까지 직선으로만 비행합니다.


로봇이 무한 루프에 갇힐 수 있다는 점이 가장 큰 문제입니다. 로봇은 사람이 살지 않는 지역으로 날아가 배터리가 다 떨어지면 다시 돌아와서 재충전을 하고 다시 시도하기 때문입니다. 분명히 그들은 결코 성공하지 못할 것입니다.






이 문제는 충분히 눈에 띄고 성가신 문제였기 때문에 저희는 해결책을 마련하고 싶었습니다. 우리가 찾은 해결책은 에너지가 부족할 때 로봇 포트 선택에 스마트한 트릭을 적용하는 것이었습니다. 보통 로봇은 가장 가까운 로보포트 중 하나를 선택하는데, 일반적인 상황에서는 괜찮지만 이 경우 로봇이 방전 나면 완전히 돌아서게 됩니다.


그래서 우리는 로봇이 항상 로봇보다 목적지에 더 가까운 로봇 포트에서 충전을 시도하도록 선택 로직을 변경했습니다. 즉, 로봇이 잠재적으로 낮은 에너지로 더 오래 비행하더라도 항상 목표를 향해 어느 정도 진전하여 결국 임무를 완수할 수 있습니다.






완벽한 해결책은 아니지만, 이러한 기술적 제약으로 인한 가장 심각한 문제를 예방하는 데 도움이 되기를 바랍니다.


언제나 그렇듯이 평소 자주 이용하는 장소에서 여러분의 의견을 알려주세요.