0%

戴森球计划中生产供应的计算

最近在玩戴森球计划,初期的时候经常会陷入 “面多了加水,水多了加面” 的境地。

为了让生产线按计划全速产出,需要科学而严谨的计算。

游戏背景介绍

《戴森球计划》是一款融合了太空、自动化工厂、冒险、探索等元素的科幻题材沙盒建造类游戏。玩家需要建设自动化的工厂来大量生产所需要的物资。其中最为关键的就是6种矩阵(包括5种基础类型的矩阵宇宙矩阵),这些矩阵用于解锁科技、技能以及推动游戏进度(例如最后需要数千个宇宙矩阵来完成“通关游戏”)。

这里的矩阵是游戏道具的名字,与数学中的矩阵无关。

游戏中一些低级的矿物(例如:铁矿、钛石、水、原油等)可以直接开采,而一些更加高级的物资是需要使用低级的物资来合成的。为了合成一个高级物资可能会涉及到几十种原料。如果不提前计划好每种物资的生产的话很容易在某个环节中出现产物堆积或缺少原料而导致生产速度不如预期的情况。

面与水

在和面的时候,需要将面粉与水按照一定的比例混合,如果面太多了就会变干,如果水太多了就会变稀。

大部分人往往采取的策略是,先凭感觉放一些面和水。如果揉出来的面团太干就再往里面加水,反之则加面。

这样做最终也可以收敛到合适的面水比区间内。但其缺点也很明显:低效,而且很容易弄得手忙脚乱。何不在一开始就准备正确比例的面和水呢?

建立生产关系图

为了简单讨论,假设每个合成公式只有一种产物,且每种产物只有一个合成公式。

建立一张有向图,图中的每个节点表示一种物资,有向边A→B表示以B为产物的合成公式中需要A作为原料。

那么在确定了最终想要生产的产物之后,就可以向前推出所需要的所有中间合成步骤,一直到遇见不需要原料就能生产的物资为止(例如基本矿物)。然后按拓扑序计算每个物资所需要的生产速率。

最开始,愚蠢的我以为在纸上稍微算算就可以了,没想到最后写了好几张草稿纸:

manuscript

我写了一个Python的小脚本来计算并导出生产路线图。(GitHub仓库地址)

下图是用这个脚本计算如果需要5种基本矩阵均以60个/min的速度生产的话所需要的生产路线图。

基本矩阵生产路线图

绿色的圆圈表示基础原料,红色的表示没有给出合成公式的物质,黄色的表示最终的目标产物。

理论到实践

生产图告诉了我们每种物资需要使用多少个生产站,但到此我们也只是完成了最基本的一步,要建立生产线还需要考虑资源分布、流水线排布等复杂的问题,需要结合具体情况分析设计,而这也正是这个游戏的乐趣所在。