導(dǎo) 《戴森球計劃》中所謂的生產(chǎn)線設(shè)計,其理論根源應(yīng)當(dāng)是工廠的廠內(nèi)物流規(guī)劃設(shè)計,那么現(xiàn)在為大家?guī)怼熬摭堉ⅰ狈窒淼摹洞魃蛴媱潯肺锪魉吧a(chǎn)線設(shè)計指南,希望對大家有所幫助。 廠內(nèi)物流規(guī)劃設(shè)計 所謂廠內(nèi)...

《戴森球計劃》中所謂的生產(chǎn)線設(shè)計,其理論根源應(yīng)當(dāng)是工廠的廠內(nèi)物流規(guī)劃設(shè)計,那么現(xiàn)在為大家?guī)怼熬摭堉ⅰ狈窒淼摹洞魃蛴媱潯肺锪魉吧a(chǎn)線設(shè)計指南,希望對大家有所幫助。

廠內(nèi)物流規(guī)劃設(shè)計

所謂廠內(nèi)物流如果去掉工作人員,那么我認(rèn)為就有以下幾點(diǎn):

生產(chǎn)線平衡。

工作地布置規(guī)劃。

物料存儲區(qū)規(guī)劃。

那么在游戲里,有體現(xiàn)的就比如:小小大工廠(Little Big Workshop),這個游戲如果你要真以用最快的速度完成的話,你就必須要考慮到上述三點(diǎn)。否則,你的員工就會滑水摸魚。

再比如異星工廠(Factorio),這個游戲的火車,本質(zhì)上就可以理解成“物料存儲區(qū)規(guī)劃”。在物流規(guī)劃里,這部分有幾個要素:

對于大價值的零件,要有最小臨時庫存。對于小價值零件,要根據(jù)包裝的收容數(shù)確定。

具體到游戲里,對于大價值零件。比如藍(lán)板,衛(wèi)星等。都是現(xiàn)場制作,現(xiàn)場使用。對于小價值零件,比如銅鐵礦,直接集中擺上若干個廠就完事。

包裝形式根據(jù)具體情況制定。

具體到游戲里,根據(jù)生產(chǎn)區(qū)的實(shí)際流量大小和生產(chǎn)要求。選用正確的包裝形式,要么選傳送帶上貨品,要么選無人機(jī)一次多個。

再者,需要考慮到工位(也就是每一個工廠)需要從包裝中取勝貨物的方法(比如人運(yùn),分揀器和機(jī)械爪)。那么這樣,一個工廠的基本結(jié)構(gòu)就出來了

考慮物流成本,物流成本在要綜合考慮廠區(qū)自身資金和供應(yīng)商運(yùn)輸壓力

具體到游戲里,所謂工廠本身的資金就是你的肝。玩這游戲,你的生產(chǎn)成本有兩個:一就是你的肝,二就是游戲里的地皮。而供應(yīng)商的運(yùn)輸壓力其實(shí)是不存在的。游戲里不存在供應(yīng)商壓貨的需求。

在了解以上理論以后,再去掉游戲中根據(jù)不需要考慮的合理性要求。那么,設(shè)計一個工廠最簡單,最好想的形式就出來了:總線。

從這個角度考慮,物流塔的存在,使得物流成本大幅度降低。在物流成本極大降低增加的情況下,“物料存儲區(qū)規(guī)劃”就不存在問題。那么,玩家所說的游戲體驗(yàn)降低就是一個客觀存在。

廠內(nèi)物流規(guī)劃設(shè)計-方法論

根據(jù)上述觀點(diǎn),限制物流塔是必須的。那么,假定持有這種觀點(diǎn),物流塔應(yīng)當(dāng)如何限制,才能保證游戲樂趣呢?同樣,也要從上述理論考慮:

1. 限制物流塔的數(shù)目是不足夠的,物流塔的存在就是一種技術(shù)突破。而對于任何一種理論,只要技術(shù)突破了就一定不能只從舊的理論的出發(fā)。比如,當(dāng)相對論出現(xiàn)以后,雖然經(jīng)典物理體系一樣能用,但是用的時候就一定要注意使用范圍。

那么,對于這里也是一樣的。比如限制為:一星一塔三本地(即一個星球一個星際物流塔,三個本地物流塔),這個不能完全解決問題。一塔三本地就是5個物料輸入。那么我只要有兩個星球,就是二塔六本地。經(jīng)過簡單的設(shè)計,就可以避開限制。

具體到游戲里:最麻煩的綠糖,其實(shí)可以分成兩部分,引力透鏡和量子芯片。你給他溯源一下,就發(fā)現(xiàn),這兩種材料都可以在有三個星球的星系里,使用一星一塔三本地的限制,完成大規(guī)模生產(chǎn)。

2. 在不限制物流塔的情況下,可以考慮增加物流塔的成本壓力。對于現(xiàn)有的物流塔來說,他降低了運(yùn)輸成本。那么,可以給他加回去,讓你用的時候要更加小心。雖然說,這游戲的主要成本是肝。但是實(shí)際上,在游戲里,運(yùn)輸成本其實(shí)是電,飛船和曲鞘。因?yàn)檫\(yùn)輸船每次外派都要消耗電,飛船和曲鞘。不過,這里飛船是可回收的。

那么,在這種情況下,增加運(yùn)輸成本就有兩種思路:

* 增加消耗器的消耗,這個不可取。消耗器用肝就能補(bǔ)齊,而用肝補(bǔ)的東西都是惡心玩家。

* 增加飛船的消耗,這個可取,游戲里現(xiàn)在的飛船非常簡單無腦。那么,如果將星際飛船變?yōu)椤禭4:基石》的那種呢?即:星際飛船是一種需要玩家自行制作的,可以搭乘的,可以配置的中型產(chǎn)品。玩家生產(chǎn)每一架飛船都需要消耗巨量的物資,以此限制飛船數(shù)目。

同時,每一架飛船不再只服務(wù)于一個物流塔,而是可以服務(wù)于多個物流塔。那么這時,就需要設(shè)計星際間物流。這樣的修改是增加游戲內(nèi)容。

綜上,有如下建議:

1. 將星際物流塔的工作范圍限制在本星系

2. 在星系間,增加一個比如名為“貨棧”的巨構(gòu)。玩家需要首先建設(shè)“貨棧”才能開啟跨星際運(yùn)輸,物流塔把所有的星球資源送入“貨棧”

3. 在“貨?!崩?,玩家可以消耗大量資源建設(shè)星際運(yùn)輸船。星際運(yùn)輸船在建設(shè)以后,擁有超大量的空間,可以在貨棧之間運(yùn)輸貨物。

那么這樣,看上去就比原來更加費(fèi)肝。但是,這一些就不再建立在惡心玩家的基礎(chǔ)上了。好用的東西一樣好用,要你設(shè)計的東西還是要設(shè)計。而且,理論高度更上一層樓。異星工廠,你只是在一個星球上搞三搞四。

而這個方法,則是考慮在整個宇宙里遨游四方。

面向過程程序設(shè)計

我玩游戲有幾個層次和目的,一來是享受游戲本身的樂趣。二來是理解游戲的實(shí)現(xiàn)方式。三來是思考游戲?qū)ΜF(xiàn)實(shí)世界的啟發(fā)。那么具體到本游戲里,就是這樣的:

在沒有物流塔之前,生產(chǎn)線的設(shè)計是“自頂向下,逐步細(xì)化”這是一種面向過程的程序設(shè)計思路。在這種思想的指導(dǎo)下,就會有一個必然的產(chǎn)物:函數(shù)。人們總是期望復(fù)用已經(jīng)寫好的內(nèi)容和模塊。所以,在面向過程階段,使用了函數(shù)做為復(fù)用單元。什么是函數(shù)?函數(shù)就是根據(jù)指定輸入,輸出指定內(nèi)容。具體到游戲里,就是一個大家耳熟能詳?shù)脑~:黑盒。

所謂“黑盒”,在異星工廠那里,就是有設(shè)計過的生產(chǎn)線,用最低的成本設(shè)計一個生產(chǎn)效率最高的模塊。這個要求與函數(shù)何其的相像?在每一個程序里,程序員對于函數(shù)的設(shè)計都是無止境的,任何一個函數(shù)都需要進(jìn)行優(yōu)化。這是我認(rèn)為黑盒的理論來源。那么,如何優(yōu)化“黑盒”?如何優(yōu)化“函數(shù)”?優(yōu)化函數(shù)不過就是兩個指標(biāo)“時間復(fù)雜度”,“空間復(fù)雜度”,那么優(yōu)化黑盒也是一樣。

具體到游戲里,你需要對黑盒的生產(chǎn)時間進(jìn)行調(diào)整,選用合適的配方,可以讓黑盒在同樣的時間生產(chǎn)更多的內(nèi)容。選用合適的傳送帶布局,就可以讓你的黑盒更加緊湊。這對于每一個程序員而言,都是老本行。

我在公司培訓(xùn)的時候,對于完全無基礎(chǔ)的員工,有要求他們?nèi)ネ嬉幌?異星工廠。我的作業(yè)很簡單,設(shè)計一個藍(lán)板的黑盒,不許抄別人的作業(yè),要從 “時間”和“空間” 兩個維度分析我為什么要這么設(shè)計。

面向?qū)ο蟪绦蛟O(shè)計

但是,物流塔的出現(xiàn)讓設(shè)計思想有了進(jìn)一步的升華。物流塔出現(xiàn)以后,玩家可以使用模塊為單位對工廠進(jìn)行設(shè)計。那么,這時指導(dǎo)理論就變成了面向?qū)ο蟪绦蛟O(shè)計。在面向?qū)ο蟪绦蛟O(shè)計中,需要考慮的問題就不再是某個函數(shù)的效率,而是整個系統(tǒng)的復(fù)用性。

那么,這時就會發(fā)現(xiàn),最優(yōu)解變成了面水黨。如果不知道怎么弄的可以參考我之前的帖子。這也是為什么我瘋狂的吹物流塔。我同樣給我的學(xué)生留了一個作業(yè):

在戴森球計劃里,如何體現(xiàn)“高內(nèi)聚,低耦合”的程序設(shè)計思想

那么,答案就很顯而易見,并且非常簡單了。面水黨通過把每種產(chǎn)物都分解開來,每個產(chǎn)物增加了不同的物流塔進(jìn)行生產(chǎn),生產(chǎn)線之間沒有互相影響的情況。更換一個生產(chǎn)線,只要生產(chǎn)速度相同對整體沒有影響。這個就是“低耦合”。而生產(chǎn)線之間的生產(chǎn)過程使用工廠進(jìn)行,修改時也只針對本工廠和本物流塔,這個就是“高內(nèi)聚”

那么,試問對于一個已經(jīng)進(jìn)入面向?qū)ο箅A段的程序員。你要給他多少好處,才能讓他重回面向過程呢?我認(rèn)為,現(xiàn)實(shí)里很簡單,你加點(diǎn)錢,不要說面向過程,面向二進(jìn)制我也做。但是,游戲里我認(rèn)為是給不起的。

領(lǐng)域驅(qū)動設(shè)計

在面向?qū)ο蟮某绦蛟O(shè)計里,有一個重要的概念就是“最小知識原則”對于一個類而言,他要認(rèn)識最少的內(nèi)容。所以,才會有設(shè)計模式。比如工廠模式,就是通過“封裝性”隱藏掉了“具體的產(chǎn)品”,只向外界暴露出工廠類,產(chǎn)品抽象類 兩個知識。

那么,所謂“最小知識”就可以理解為一個概念的邊界。這就引出了現(xiàn)在最熱門的程序設(shè)計思想,領(lǐng)域驅(qū)動設(shè)計(DDD)。

具體到游戲里,每一個物流塔都可以感知到整個宇宙里所有其它的物流塔,那么就相當(dāng)于他認(rèn)識了全宇宙所有的知識,這顯然不符合一部分玩家的理解。那么,詬病他也是應(yīng)該的,同樣,修改他的方法也不應(yīng)該是限制他的數(shù)目。因?yàn)?,一個類被實(shí)例化以后,你限制他在函數(shù)里的實(shí)例個數(shù),就相當(dāng)逼迫程序多開幾個函數(shù)。這是完全搞人肝的做法,完全沒有意義。同樣,還是我剛才的建議:

1. 將星際物流塔的工作范圍限制在本星系

2. 在星系間,增加一個比如名為“貨棧”的巨構(gòu)。玩家需要首先建設(shè)“貨?!辈拍荛_啟跨星際運(yùn)輸,物流塔把所有的星球資源送入“貨?!?/p>

3. 在“貨?!崩?,玩家可以消耗大量資源建設(shè)星際運(yùn)輸船。星際運(yùn)輸船在建設(shè)以后,擁有超大量的空間,可以在貨棧之間運(yùn)輸貨物。

從程序設(shè)計思想的角度來看他,所謂“貨?!本褪且粋€模塊的邊界(接口)。只有“貨棧”才能開啟星際運(yùn)輸,意味著只有“邊界”才能與其它模塊進(jìn)行數(shù)據(jù)交換。

所謂星際物流塔只能在本星系工作,就是將領(lǐng)域的邊界明確化。本星系就是一個領(lǐng)域,他只負(fù)責(zé)生產(chǎn)一種/一些產(chǎn)品,而通過“邊界”與外界進(jìn)行數(shù)據(jù)交互

所謂的“復(fù)雜星際運(yùn)輸船”指的是領(lǐng)域間數(shù)據(jù)交換的成本。在DDD使用的場合里,數(shù)據(jù)的交換成本有些是很高的。所以用這個進(jìn)行模擬

同樣在的,在DDD里,“微服務(wù)”是一個很火熱的概念。那么,我的建議就可以理解為每一個星系都是微服務(wù)中一個模塊。星系運(yùn)輸船相當(dāng)于在微服務(wù)之間有帶寬限制的網(wǎng)絡(luò)環(huán)境。那么,如何設(shè)計就是一個可以研究和討論的問題。

《戴森球計劃》物流塔及生產(chǎn)線設(shè)計指南