《戴森球計(jì)劃》中所謂的生產(chǎn)線設(shè)計(jì),其理論根源應(yīng)當(dāng)是工廠的廠內(nèi)物流規(guī)劃設(shè)計(jì),那么現(xiàn)在為大家?guī)怼熬摭堉ⅰ狈窒淼摹洞魃蛴?jì)劃》物流塔及生產(chǎn)線設(shè)計(jì)指南,希望對(duì)大家有所幫助。
廠內(nèi)物流規(guī)劃設(shè)計(jì)
所謂廠內(nèi)物流如果去掉工作人員,那么我認(rèn)為就有以下幾點(diǎn):
生產(chǎn)線平衡。
工作地布置規(guī)劃。
物料存儲(chǔ)區(qū)規(guī)劃。
那么在游戲里,有體現(xiàn)的就比如:小小大工廠(Little Big Workshop),這個(gè)游戲如果你要真以用最快的速度完成的話,你就必須要考慮到上述三點(diǎn)。否則,你的員工就會(huì)滑水摸魚。
再比如異星工廠(Factorio),這個(gè)游戲的火車,本質(zhì)上就可以理解成“物料存儲(chǔ)區(qū)規(guī)劃”。在物流規(guī)劃里,這部分有幾個(gè)要素:
對(duì)于大價(jià)值的零件,要有最小臨時(shí)庫存。對(duì)于小價(jià)值零件,要根據(jù)包裝的收容數(shù)確定。
具體到游戲里,對(duì)于大價(jià)值零件。比如藍(lán)板,衛(wèi)星等。都是現(xiàn)場制作,現(xiàn)場使用。對(duì)于小價(jià)值零件,比如銅鐵礦,直接集中擺上若干個(gè)廠就完事。
包裝形式根據(jù)具體情況制定。
具體到游戲里,根據(jù)生產(chǎn)區(qū)的實(shí)際流量大小和生產(chǎn)要求。選用正確的包裝形式,要么選傳送帶上貨品,要么選無人機(jī)一次多個(gè)。
再者,需要考慮到工位(也就是每一個(gè)工廠)需要從包裝中取勝貨物的方法(比如人運(yùn),分揀器和機(jī)械爪)。那么這樣,一個(gè)工廠的基本結(jié)構(gòu)就出來了
考慮物流成本,物流成本在要綜合考慮廠區(qū)自身資金和供應(yīng)商運(yùn)輸壓力
具體到游戲里,所謂工廠本身的資金就是你的肝。玩這游戲,你的生產(chǎn)成本有兩個(gè):一就是你的肝,二就是游戲里的地皮。而供應(yīng)商的運(yùn)輸壓力其實(shí)是不存在的。游戲里不存在供應(yīng)商壓貨的需求。
在了解以上理論以后,再去掉游戲中根據(jù)不需要考慮的合理性要求。那么,設(shè)計(jì)一個(gè)工廠最簡單,最好想的形式就出來了:總線。
從這個(gè)角度考慮,物流塔的存在,使得物流成本大幅度降低。在物流成本極大降低增加的情況下,“物料存儲(chǔ)區(qū)規(guī)劃”就不存在問題。那么,玩家所說的游戲體驗(yàn)降低就是一個(gè)客觀存在。
廠內(nèi)物流規(guī)劃設(shè)計(jì)-方法論
根據(jù)上述觀點(diǎn),限制物流塔是必須的。那么,假定持有這種觀點(diǎn),物流塔應(yīng)當(dāng)如何限制,才能保證游戲樂趣呢?同樣,也要從上述理論考慮:
1. 限制物流塔的數(shù)目是不足夠的,物流塔的存在就是一種技術(shù)突破。而對(duì)于任何一種理論,只要技術(shù)突破了就一定不能只從舊的理論的出發(fā)。比如,當(dāng)相對(duì)論出現(xiàn)以后,雖然經(jīng)典物理體系一樣能用,但是用的時(shí)候就一定要注意使用范圍。
那么,對(duì)于這里也是一樣的。比如限制為:一星一塔三本地(即一個(gè)星球一個(gè)星際物流塔,三個(gè)本地物流塔),這個(gè)不能完全解決問題。一塔三本地就是5個(gè)物料輸入。那么我只要有兩個(gè)星球,就是二塔六本地。經(jīng)過簡單的設(shè)計(jì),就可以避開限制。
具體到游戲里:最麻煩的綠糖,其實(shí)可以分成兩部分,引力透鏡和量子芯片。你給他溯源一下,就發(fā)現(xiàn),這兩種材料都可以在有三個(gè)星球的星系里,使用一星一塔三本地的限制,完成大規(guī)模生產(chǎn)。
2. 在不限制物流塔的情況下,可以考慮增加物流塔的成本壓力。對(duì)于現(xiàn)有的物流塔來說,他降低了運(yùn)輸成本。那么,可以給他加回去,讓你用的時(shí)候要更加小心。雖然說,這游戲的主要成本是肝。但是實(shí)際上,在游戲里,運(yùn)輸成本其實(shí)是電,飛船和曲鞘。因?yàn)檫\(yùn)輸船每次外派都要消耗電,飛船和曲鞘。不過,這里飛船是可回收的。
那么,在這種情況下,增加運(yùn)輸成本就有兩種思路:
* 增加消耗器的消耗,這個(gè)不可取。消耗器用肝就能補(bǔ)齊,而用肝補(bǔ)的東西都是惡心玩家。
* 增加飛船的消耗,這個(gè)可取,游戲里現(xiàn)在的飛船非常簡單無腦。那么,如果將星際飛船變?yōu)椤禭4:基石》的那種呢?即:星際飛船是一種需要玩家自行制作的,可以搭乘的,可以配置的中型產(chǎn)品。玩家生產(chǎn)每一架飛船都需要消耗巨量的物資,以此限制飛船數(shù)目。
同時(shí),每一架飛船不再只服務(wù)于一個(gè)物流塔,而是可以服務(wù)于多個(gè)物流塔。那么這時(shí),就需要設(shè)計(jì)星際間物流。這樣的修改是增加游戲內(nèi)容。
綜上,有如下建議:
1. 將星際物流塔的工作范圍限制在本星系
2. 在星系間,增加一個(gè)比如名為“貨棧”的巨構(gòu)。玩家需要首先建設(shè)“貨?!辈拍荛_啟跨星際運(yùn)輸,物流塔把所有的星球資源送入“貨棧”
3. 在“貨?!崩?,玩家可以消耗大量資源建設(shè)星際運(yùn)輸船。星際運(yùn)輸船在建設(shè)以后,擁有超大量的空間,可以在貨棧之間運(yùn)輸貨物。
那么這樣,看上去就比原來更加費(fèi)肝。但是,這一些就不再建立在惡心玩家的基礎(chǔ)上了。好用的東西一樣好用,要你設(shè)計(jì)的東西還是要設(shè)計(jì)。而且,理論高度更上一層樓。異星工廠,你只是在一個(gè)星球上搞三搞四。
而這個(gè)方法,則是考慮在整個(gè)宇宙里遨游四方。
面向過程程序設(shè)計(jì)
我玩游戲有幾個(gè)層次和目的,一來是享受游戲本身的樂趣。二來是理解游戲的實(shí)現(xiàn)方式。三來是思考游戲?qū)ΜF(xiàn)實(shí)世界的啟發(fā)。那么具體到本游戲里,就是這樣的:
在沒有物流塔之前,生產(chǎn)線的設(shè)計(jì)是“自頂向下,逐步細(xì)化”這是一種面向過程的程序設(shè)計(jì)思路。在這種思想的指導(dǎo)下,就會(huì)有一個(gè)必然的產(chǎn)物:函數(shù)。人們總是期望復(fù)用已經(jīng)寫好的內(nèi)容和模塊。所以,在面向過程階段,使用了函數(shù)做為復(fù)用單元。什么是函數(shù)?函數(shù)就是根據(jù)指定輸入,輸出指定內(nèi)容。具體到游戲里,就是一個(gè)大家耳熟能詳?shù)脑~:黑盒。
所謂“黑盒”,在異星工廠那里,就是有設(shè)計(jì)過的生產(chǎn)線,用最低的成本設(shè)計(jì)一個(gè)生產(chǎn)效率最高的模塊。這個(gè)要求與函數(shù)何其的相像?在每一個(gè)程序里,程序員對(duì)于函數(shù)的設(shè)計(jì)都是無止境的,任何一個(gè)函數(shù)都需要進(jìn)行優(yōu)化。這是我認(rèn)為黑盒的理論來源。那么,如何優(yōu)化“黑盒”?如何優(yōu)化“函數(shù)”?優(yōu)化函數(shù)不過就是兩個(gè)指標(biāo)“時(shí)間復(fù)雜度”,“空間復(fù)雜度”,那么優(yōu)化黑盒也是一樣。
具體到游戲里,你需要對(duì)黑盒的生產(chǎn)時(shí)間進(jìn)行調(diào)整,選用合適的配方,可以讓黑盒在同樣的時(shí)間生產(chǎn)更多的內(nèi)容。選用合適的傳送帶布局,就可以讓你的黑盒更加緊湊。這對(duì)于每一個(gè)程序員而言,都是老本行。
我在公司培訓(xùn)的時(shí)候,對(duì)于完全無基礎(chǔ)的員工,有要求他們?nèi)ネ嬉幌?異星工廠。我的作業(yè)很簡單,設(shè)計(jì)一個(gè)藍(lán)板的黑盒,不許抄別人的作業(yè),要從 “時(shí)間”和“空間” 兩個(gè)維度分析我為什么要這么設(shè)計(jì)。
面向?qū)ο蟪绦蛟O(shè)計(jì)
但是,物流塔的出現(xiàn)讓設(shè)計(jì)思想有了進(jìn)一步的升華。物流塔出現(xiàn)以后,玩家可以使用模塊為單位對(duì)工廠進(jìn)行設(shè)計(jì)。那么,這時(shí)指導(dǎo)理論就變成了面向?qū)ο蟪绦蛟O(shè)計(jì)。在面向?qū)ο蟪绦蛟O(shè)計(jì)中,需要考慮的問題就不再是某個(gè)函數(shù)的效率,而是整個(gè)系統(tǒng)的復(fù)用性。
那么,這時(shí)就會(huì)發(fā)現(xiàn),最優(yōu)解變成了面水黨。如果不知道怎么弄的可以參考我之前的帖子。這也是為什么我瘋狂的吹物流塔。我同樣給我的學(xué)生留了一個(gè)作業(yè):
在戴森球計(jì)劃里,如何體現(xiàn)“高內(nèi)聚,低耦合”的程序設(shè)計(jì)思想
那么,答案就很顯而易見,并且非常簡單了。面水黨通過把每種產(chǎn)物都分解開來,每個(gè)產(chǎn)物增加了不同的物流塔進(jìn)行生產(chǎn),生產(chǎn)線之間沒有互相影響的情況。更換一個(gè)生產(chǎn)線,只要生產(chǎn)速度相同對(duì)整體沒有影響。這個(gè)就是“低耦合”。而生產(chǎn)線之間的生產(chǎn)過程使用工廠進(jìn)行,修改時(shí)也只針對(duì)本工廠和本物流塔,這個(gè)就是“高內(nèi)聚”
那么,試問對(duì)于一個(gè)已經(jīng)進(jìn)入面向?qū)ο箅A段的程序員。你要給他多少好處,才能讓他重回面向過程呢?我認(rèn)為,現(xiàn)實(shí)里很簡單,你加點(diǎn)錢,不要說面向過程,面向二進(jìn)制我也做。但是,游戲里我認(rèn)為是給不起的。
領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)
在面向?qū)ο蟮某绦蛟O(shè)計(jì)里,有一個(gè)重要的概念就是“最小知識(shí)原則”對(duì)于一個(gè)類而言,他要認(rèn)識(shí)最少的內(nèi)容。所以,才會(huì)有設(shè)計(jì)模式。比如工廠模式,就是通過“封裝性”隱藏掉了“具體的產(chǎn)品”,只向外界暴露出工廠類,產(chǎn)品抽象類 兩個(gè)知識(shí)。
那么,所謂“最小知識(shí)”就可以理解為一個(gè)概念的邊界。這就引出了現(xiàn)在最熱門的程序設(shè)計(jì)思想,領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)(DDD)。
具體到游戲里,每一個(gè)物流塔都可以感知到整個(gè)宇宙里所有其它的物流塔,那么就相當(dāng)于他認(rèn)識(shí)了全宇宙所有的知識(shí),這顯然不符合一部分玩家的理解。那么,詬病他也是應(yīng)該的,同樣,修改他的方法也不應(yīng)該是限制他的數(shù)目。因?yàn)?,一個(gè)類被實(shí)例化以后,你限制他在函數(shù)里的實(shí)例個(gè)數(shù),就相當(dāng)逼迫程序多開幾個(gè)函數(shù)。這是完全搞人肝的做法,完全沒有意義。同樣,還是我剛才的建議:
1. 將星際物流塔的工作范圍限制在本星系
2. 在星系間,增加一個(gè)比如名為“貨?!钡木迾?gòu)。玩家需要首先建設(shè)“貨?!辈拍荛_啟跨星際運(yùn)輸,物流塔把所有的星球資源送入“貨?!?/p>
3. 在“貨?!崩?,玩家可以消耗大量資源建設(shè)星際運(yùn)輸船。星際運(yùn)輸船在建設(shè)以后,擁有超大量的空間,可以在貨棧之間運(yùn)輸貨物。
從程序設(shè)計(jì)思想的角度來看他,所謂“貨?!本褪且粋€(gè)模塊的邊界(接口)。只有“貨棧”才能開啟星際運(yùn)輸,意味著只有“邊界”才能與其它模塊進(jìn)行數(shù)據(jù)交換。
所謂星際物流塔只能在本星系工作,就是將領(lǐng)域的邊界明確化。本星系就是一個(gè)領(lǐng)域,他只負(fù)責(zé)生產(chǎn)一種/一些產(chǎn)品,而通過“邊界”與外界進(jìn)行數(shù)據(jù)交互
所謂的“復(fù)雜星際運(yùn)輸船”指的是領(lǐng)域間數(shù)據(jù)交換的成本。在DDD使用的場合里,數(shù)據(jù)的交換成本有些是很高的。所以用這個(gè)進(jìn)行模擬。
同樣在的,在DDD里,“微服務(wù)”是一個(gè)很火熱的概念。那么,我的建議就可以理解為每一個(gè)星系都是微服務(wù)中一個(gè)模塊。星系運(yùn)輸船相當(dāng)于在微服務(wù)之間有帶寬限制的網(wǎng)絡(luò)環(huán)境。那么,如何設(shè)計(jì)就是一個(gè)可以研究和討論的問題。
全部評(píng)論