星期五報道#374 - 更智能的機器人

你們好,今天我們要討論一些關於飛行機器人的改進。我們修復了一些被反饋了很多次的問題,所以我希望這次會得到大家的認可 :)。

易玩性 vs 華而不實的功能

"我知道你們很期待新內容的發佈,而僅僅是提高遊戲的易玩性並不會讓人們感到興奮。

如果想在遊戲中添加內容、機制和系統,就並不簡單,總是存在太多的風險。但通過提高遊戲的易玩性,我們減少了小麻煩和煩惱,從而有效地創造了額外的心理空間,可以在遊戲中享受更多樂趣。 這就像在買新玩具之前打掃房間一樣。

所以說清楚一點,我們做出並呈現這些改變的原因並不是因爲我們不想做出新的華而不實的功能,我們只是想讓新的東西令人愉快,而不會有太多的負擔要處理 。

但別擔心,我們下週會展示一些新東西!"


對機器人執行任務進行優化

物流和施工機器人已經出現了一段時間,其核心是相當簡單的。例如,物流機器人可能會被告知從一個箱子中拿起一個物品,然後將其運送到另一個箱子中。到目前爲止一切順利,但在異星工廠中,通常會有不止一個物品需要轉移 —— 那麼當遊戲需要將 500 個物品從一個盒子轉移到另一個盒子時,遊戲會做什麼呢?


舊的工作方式

"在異星工廠 1.1 中,遊戲保留了所有閒置機器人的列表,包括那些隱藏在機器人指令平臺中的機器人,當需要處理任務時,它會從該列表中選擇最近的閒置機器人。因此,如果要將 500 個物品從提供者的箱子轉移到請求者那裏,遊戲將找到距離提供者箱子最近的第一個空閒機器人,並安排其進行轉移。該機器人現在已經有了任務,因此將從空閒機器人列表中刪除。

但我們還有 499 個其他物品需要轉移(爲簡單起見,忽略機器人容量獎勵)。物流網絡將會對所有其他物品重複前面的步驟 - 找到下一個最近的空閒機器人,分配其轉移下一個物品的任務,依此類推,直到機器人負責箱子中的 500 件物品中的每一件。

這種策略的問題在於,雖然前幾個機器人可能位於距離提供者箱子很近的機器人指令平臺中,但當輪到最後一個物品時,網絡可能必須使用工廠另一端的機器人,因爲附近沒有更接近的閒置機器人來完成這項任務。最終的結果是,第一批機器人會到達箱子那裏,拿走物品並運送到目的地,然後充電並在機器人指令平臺小睡 —— 傳送單個物品就是這些機器人的全部任務,剩餘的物品已經分配給其他機器人。之後,來自工廠較遠地區的機器人將緩慢進入並轉移剩餘的物品。"

完整視頻的鏈接在下面:cdn.factorio.com/assets/img/blog/fff-369-logistics-before.mp4

施工機器人的情況類似,並且在使用便攜式機器人指令平臺時尤其明顯。假設玩家想要移除工廠裏的一堆樹。個人機器人指令平臺最多可以擁有 25 個施工機器人,因此玩家的個人機器人最多可以砍伐 25 棵樹。所有剩餘的樹木將被分配給來自主網絡的機器人,玩家必須等待它們到達,樹木纔會消失 —— 即使玩家的個人機器人就在那裏,沒有事情可做!

完整視頻的鏈接在下面:

https://cdn.factorio.com/assets/img/blog/fff-369-construction-before.mp4


新的工作方式

"僅從空閒機器人列表中選擇機器人來執行任務顯然不是最佳策略。將任務分配給當前忙碌但在附近的機器人可能是更好的選擇,即使新任務可能必須等到機器人完成其他任務才能開始執行,這需要對物流網絡代碼進行兩項主要更改。

第一個變化是允許機器人分配多個任務。大部分代碼都是在假設機器人只負責一項工作的情況下編寫的,但經過一些代碼重構後,機器人現在擁有一個任務隊列。

其次,我們需要一種方法來選擇機器人來執行任務。每個任務都有一個起始位置,例如解構順序需要從解構機器人實體開始。到目前爲止,選擇過程很簡單 —— 只需選擇距離該點最近的空閒機器人即可。但現在,當我們還可以選擇具有一個或多個排隊任務的機器人時,這個過程變得有點複雜。

選擇機器人的新指標是到達時間。對於空閒機器人,其到達時間就是到起始位置到目標位置的距離除以其速度。對於一個忙碌的機器人,我們可以查看它的任務隊列,找出機器人完成任務後將在何時何地結束,然後將那個位置添加到新任務的起始位置。爲一項任務選擇機器人時,我們會選擇第一個到達的機器人,即使它在此之前必須處理其他事情。

值得指出的是,到達時間的計算只是一個估計。例如,我們簡化了充電時間的影響。敏銳的玩家無疑會注意到選擇不同的機器人可能會更有效的情況。但從大局來看,似乎並不是很引人注目。

讓我們看看新系統如何處理我們前面的兩個示例。第一批機器人的任務是轉移所有物品,這導致它們在請求者和提供者之間來回移動。"

完整視頻的鏈接在下面:

cdn.factorio.com/assets/img/blog/fff-369-logistics-after.mp4

對於砍伐樹,玩家的每個機器人所做的不僅僅是針對一棵樹。來自主網絡的機器人仍然會提供幫助,但這一次是因爲它們可以幫助更快地完成整個工作。

完整視頻的鏈接在下面:

https://cdn.factorio.com/assets/img/blog/fff-369-construction-after.mp4


表現

"對於小型工廠來說,擁有一份所有工作中的機器人的簡單列表並在每次新任務到來時進行檢查可能會很好,但如果數千個機器人飛來飛去,它會很快消耗電腦性能。爲了緩解這種情況,我們實施了不同的解決方案。

每當機器人的任務隊列更新時,它都會計算其最終位置估計,即其最終位置和完成時間。現在,每個地圖塊都存儲預計完成該塊的所有工作中的機器人的列表。當機器人更新其最終位置時,它會將自己註冊到該機器人列表中。因此,當爲一項任務搜索機器人時,遊戲現在會從任務起始位置所在的區塊開始搜索,並以向外螺旋的方式繼續搜索。

將工作中的機器人分塊存儲並進行螺旋式搜索,性能將會大大提高,即使是擁有數千臺繁忙機器人的工廠也運行良好。"


優化其他方面

在過去的兩年裏,我們在開發擴展的同時,也積累了更多的功能和變化,使機器人感覺更智能,工作得更好。


機器人指令平臺任務

在某些情況下,你需要確保一些機器人指令平臺裏始終有機器人來執行任務。例如,如果你有一個帶有補給箱的小補給點,你希望周圍的物流機器人能夠快速清空垃圾並補充補給品。但當所有材料都在那裏時,這是相當煩人的,但你卻被困在那裏等待,因爲由於自然的機器人遷移模式,該地區的機器人指令平臺非常空。

完整視頻的鏈接在下面:

https://cdn.factorio.com/assets/blog-sync/fff-374-robot-requests-before.mp4

它可以通過請求者的箱子、插入器、電路網絡等來解決……但我們決定採用更平滑的方法。您現在可以直接在機器人指令平臺 GUI 內設置機器人的物流任務。機器人將從其他機器人指令平臺派遣一些過來滿足任務需求(需要注意的是,機器人不會被倉庫或提供者的箱子中取出)。

有了這個新功能,我們可以將補給點附近的所有機器人站設置爲始終有 100 個可用的物流機器人。一旦到達上線,我們的需求就會在創紀錄的時間內得到滿足,之後你可以看到機器人到達,將機器人指令平臺的機器人恢復到 100 個。

完整視頻的鏈接在下面:

https://cdn.factorio.com/assets/blog-sync/fff-374-robot-requests-after.mp4

另一個很好的用途是我們可以使用機器人指令平臺任務從網絡中刪除某些機器人。也許我們有一些具有較高質量的工人機器人模組,我們可以要求低質量的機器人執行任務並用過濾器插入器將其移除,隨着時間的推移,將較差的機器人從流通中移除。


更好的機器人充電模式

"當工作機器人的能量不足時,它們需要找到附近的機器人指令平臺來充電,但它們需要聰明一點。例如,如果它們總是選擇最近的機器人機場,那麼在一些機器人指令平臺會出現排隊和交通擁堵,而另一些則完全空無一人。

對此,我們使用非常簡單的模式,不僅考慮機器人港口的距離,還考慮目前有多少其他機器人正在那裏充電。通常情況下,這種方法“足夠好”,但時不時你可能會遇到一些不方便的情況,它們仍然聚集在一些機器人指令平臺上,而忽略了其他稍微遠一點的機器人指令平臺。"

完整視頻的鏈接在下面:

https://cdn.factorio.com/assets/blog-sync/fff-374-charging-heuristic-before.mp4

在某些極端情況下,這實際上可能是一個很大的問題,因爲等待充電的機器人仍然使用能量進行懸停,因此會損失更多能量,在正反饋循環中,所有加入隊列的機器人在等待時都會降至 0 能量。一般來說,玩家看着機器人並認爲“這些機器人太笨了......”。

我們可以做得更好......令人驚訝的是,在這種情況下,只需對模式邏輯進行一點小小的改進,問題就可以得到很大幫助。在決定在哪個機器人場充電時,機器人沒有考慮當前正在前往該機器人場的機器人,而只考慮已經在隊列中的機器人,並且沒有考慮機器人場開放了多少個免費充電點。通過將這兩個額外參數添加到方程中,機器人的分佈得到了很好的改善。

完整視頻的鏈接在下面:

https://cdn.factorio.com/assets/blog-sync/fff-374-charging-heuristic-after.mp4


緩解機器人在湖泊上行走的問題

"這個問題已經存在很長一段時間了,機器人在尋路方面相當愚蠢,並試圖飛越沒有物流網絡覆蓋的區域。這是因爲出於性能原因,我們根本不進行任何尋路。機器人只是直線飛行到工作位置。

其中一個主要問題是機器人有可能陷入無限循環。這是因爲它們飛過未覆蓋的區域,耗盡電池,然後返回充電並重試。顯然這樣一來,它們永遠不會成功。"

完整視頻的鏈接在下面:

https://cdn.factorio.com/assets/blog-sync/fff-374-robot-path-before.mp4

這個問題對我們來說足夠煩人,以至於我們確實出有效的解決方案。 我們找到的解決方案是在機器人快要耗盡能量時做出一個聰明的選擇。通常機器人只會選擇最近的機器人指令平臺之一,這在正常情況下沒問題,但在這種情況下會導致機器人掉頭返回而導致任務失敗。

所以我們改變了選擇邏輯,讓機器人在更接近目的地的機器人指令平臺充電。 這意味着,即使機器人可能會以低能量飛行更長時間,它也始終能夠朝着目標取得一些進展,並最終完成任務。

完整視頻的鏈接在下面:

https://cdn.factorio.com/assets/blog-sync/fff-374-robot-path-after.mp4


這不是一個完美的解決方案,但也許可以修復問題。

#pc遊戲#            #單機遊戲#           #steam遊戲#          #遊戲推薦#         #多人遊戲#        #異星工廠#       #太空時代#      #基地建設#     #自動化#    #沙盒#   #資願管理#  #星期五報道# 

更多遊戲資訊請關註:電玩幫遊戲資訊專區

電玩幫圖文攻略 www.vgover.com