【幸福工廠】算法與電子遊戲


3樓貓 發佈時間:2022-07-10 12:19:39 作者:高質量擺爛選手 Language

——基於遊戲《幸福工廠》機械產能的思考

前言:這不是一篇結論性文章,更不可能是一篇論文,這僅是一篇來自普通玩家在遊戲過程中產生的思考及其記錄。

《幸福工廠》是由Coffeestain Studio於2019年發行的一款工廠管理模擬遊戲

該遊戲的核心玩法是收集材料生產出各種具有有層級關係的產品,最終的目的是需要在一臺巨大的太空電梯中交付相當數量的高級材料

【幸福工廠】算法與電子遊戲-第0張

(太空i電梯——遊戲內截圖)

遊戲最大的特點就是可以通過建設全自動生產線來解放雙手實現“材料自由”,因此這是一款十分休閒不需要思考太多的遊戲(?)在體驗了幾天後,引起了我的一些思考。


對於一條生產線來說,不同材料的原料和產率是一個需要提前考慮的問題。對於最基礎的材料——鐵錠——只要找到一口鐵礦就能生產,在不進行超頻生產(即使用特殊材料提高該機械的生產量,耗電量、原料耗費也會同步提高)的情況下,一臺冶煉機的產率是30鐵錠/min,同時消耗30鐵礦(1:1)。以純淨鐵礦(純淨度會影響礦機的產量)為例,一臺一級礦機就可以同時為4臺冶煉機提供鐵礦,而且都是100%效率(不會有產能過剩和原料不足的情況)。鐵錠的下一級產物是鐵棒和鐵板,產率是15鐵棒/min耗費15鐵錠/min和20鐵板/min耗費30鐵錠/min,值得注意的地方是,鐵板的原料和產物比例並不是1:1而是3:2,在遊戲中這樣原料和產物比不是1:1的材料有很多。這就導致了在生產線中,如果要保證每臺機械的效率都是100%,那各生產機械之間就並不只是一對一的關係,可能還會有一對多和多對多的關係。下面用我的一條轉子生產線來舉例說明這個問題:

首先來看轉子的配方和產率:

【幸福工廠】算法與電子遊戲-第1張

轉子

在不超頻的情況下,每分鐘生產4個轉子,耗費20鐵棒和100螺絲,而螺絲產率為60/min耗費10鐵棒/min。也就是說如果搭建一條轉子產線,使用120鐵礦/min的礦機,可以得出該公式:


120鐵礦=8轉子+20鐵棒+40螺絲

也就是說如果按照這個公式搭建的生產線在100%效率的情況下每分鐘不僅可以生產4轉子,還可以積累40螺絲和20鐵棒,一舉多得

理論計算完之後就需要畫出實現的線路圖了:


【幸福工廠】算法與電子遊戲-第2張

由於這個遊戲不能隨意控制傳送帶的傳輸速率,所以使用分離器(把一條傳送帶平分二等分或三等分)和合並器(把最多三條傳送帶合為一條)達到控制各生產機械輸入量的目的,但是這種方法會出現一種問題,這在後面會提到。


這套生產線裡的每一臺機器的效率都是100%,並且沿中間的倉庫軸對稱(強迫症狂喜),左右兩邊獨立工作互不影響,上下兩層可以共用同一個倉庫(垂直對齊)


【幸福工廠】算法與電子遊戲-第3張

完全對稱

【幸福工廠】算法與電子遊戲-第4張

產線部分截圖

這套生產線在設計和實現時都沒有遇到什麼問題,唯一一點引起我注意的,就是感覺這種設計思路有種莫名的熟悉,但也說不上具體是什麼思路。

 

在完成了轉子生產線的建設後,我發現還缺少一條模塊化框架的生產線,於是我打算如法炮製出一條仍舊以全機器滿效率為設計思路的模塊化框架產線,但這次就沒有這麼容易了。

首先是這個十分噁心人的初始配方:

【幸福工廠】算法與電子遊戲-第5張

鐵棒的產量在不超頻下是15/min,而加強板是5/min耗費30鐵板、60螺絲/min,怎麼看都對不上。只能是取他們的倍數,輸入x3、輸出x5也就是:


15加強板+60鐵棒=10模塊化框架

 換算成鐵礦就是:

240鐵礦=10模塊化框架


二級礦機純淨礦剛好是240鐵礦/min,需要8臺冶煉機,好嘛,工程量還挺大

還是一樣,先計算一下分配情況:

【幸福工廠】算法與電子遊戲-第6張

這計算起來就沒有轉子線那麼簡單了,還需要把兩臺機器降頻(和超頻相對),不過最起碼第一步理論證明部分通過了。

接下來是流程圖環節:

【幸福工廠】算法與電子遊戲-第7張

分離的過程還是比較曲折的,正當我準備把加強板和鐵棒對接以完成最後的搭建時,一個致命的問題出現了,就是我在上面提到的,由於這個遊戲不能隨意控制傳送帶傳輸速率,因此採用合併器和分離器這種“曲線救國”的方式。現在,我只需要把60個鐵棒分成5等分即每份12,再送到5臺構造機裡就可以完成這條產線的搭建,這聽起來很簡單不是嗎?但是,我要怎麼在只能除2或3且不能進行減法的情況下,把60分成5等分?很明顯,通過分離器的拆分以及合併器的組合並不能實現這個需求,並且對於15個加強板,也無法將其分成5等分。這種通過調整輸入速率以保證滿效率的方法,最終在實現的時候會暴露出侷限性——無法應對所有的數值。


 那接下來怎麼辦?將模塊框架的產量削減為8?還是增加鐵棒和加強板的產量?無論前者後者都會違背效率至上的初心,但是從這個公式上來看,對於整體來說,240鐵錠確實是可以不差毫釐的生產10個模塊化組件的,所以就著整體性的方向,我想到了下面這種辦法:

【幸福工廠】算法與電子遊戲-第8張

較遠機器的效率會逐步提高


通過逐個輸入,可以使靠前的機器的在剛運作時就具有較高的效率,而在第一臺機器快要輸入過剩時,多餘的材料會被送到下一臺機器以提高其效率。也就是說,當這套生產線啟動時,有一部分的機器在剛開始時沒有達到滿效率,但在啟動一段時間後,也就是積累了一定的原料後,所有的機器都能達到滿效率,並且會一直維持滿效率。而效率最低的機器達到滿效率所需要的時間,取決於機器可以存放的最大原料數,最大原料數越低,達到滿效率所需的時間越短。


 在搭建完模塊框架產線後,我打開了我的教材,看見了這兩個熟悉且折磨的老朋友:


【幸福工廠】算法與電子遊戲-第9張

我說怎麼在設計的時候有種說不出來的的熟悉感,原來是你,Dijkstra

總所周知,貪心算法是以貪心著稱:

【幸福工廠】算法與電子遊戲-第10張

“總是做出在當前來看最好的選擇”這不就與對於每臺機器,都以滿效率作為設計目標是師出同門嗎?甚至就連該算法的侷限性都繼承了下來


對於另一條產線,又有:


【幸福工廠】算法與電子遊戲-第11張


從一開始的通過公式計算的理論可行,再基於產物往上推進,到最後的產線搭建,這就是一個自底向上的設計過程。每一道中間產物的產線,都是多階段決策問題中的一環,最後經由時間推進,以達到最佳決策——滿效率。

總結:這並不是一篇結論性文章,因此也不會有結論性的總結,更多的是基於遊戲特性引起的啟發和思考,如若真是想證明些什麼,那我或許想說:玩遊戲其實也能激起並不亞於書籍和電影的思考。


 

以上


 


© 2022 3樓貓 下載APP 站點地圖 廣告合作:asmrly666@gmail.com