用线性规划解决《戴森球计划》中的生产规划问题
李辰剑 2023-6-16 定稿
一、问题引入
《戴森球计划》相信大家都很熟悉啦,它是一款科幻主题的模拟经营游戏。在《戴森球计划》中,玩家需要在宇宙中采集材料、解锁科技、进行工业生产,最终建造出一个包裹恒星的戴森球,通过戴森球大量收割恒星的太阳能。然而,《戴森球计划》中科技产品的生产和建造极其复杂(配方很复杂,供应链更复杂);而建造整个戴森球(包裹整个恒星,物资消耗能不大吗)又需要大量物资,对生产的规模和效率提出了很高的要求。因此,玩家常常需要花费大量时间来设计、建造、调整各种科技产品的生产线,非常痛苦。这也是《戴森球计划》被许多玩家诟病“费肝”的原因。
于是我就想,能否用计算机科学中一些成熟的优化算法来帮忙设计生产线呢?我初步筛选出了三个可以用计算机算法优化的任务:
(1) 用线性规划求解最优的资源、产品分配。《戴森球计划》中的产业链很长,一些产品的生产配方较为复杂,需要经过多道生产步骤。例如,以下是低阶科技产品电动马达的生产线路图:
![](/2023/06/16/%E7%94%A8%E7%BA%BF%E6%80%A7%E8%A7%84%E5%88%92%E8%A7%A3%E5%86%B3%E3%80%8A%E6%88%B4%E6%A3%AE%E7%90%83%E8%AE%A1%E5%88%92%E3%80%8B%E4%B8%AD%E7%9A%84%E7%94%9F%E4%BA%A7%E8%A7%84%E5%88%92%E9%97%AE%E9%A2%98/motor-production-chain.png)
如何合理分配资源(例如,以合适的比例将铁矿分配到铁块和磁铁的生产中)以最大化目标产出(例如,最大化马达的生产速率)是一个麻烦的问题。但这一步骤恰好可以用线性规划(Linear Programming)模型求解。
(2) 用集成芯片设计算法优化工厂和物流的布局布线。 《戴森球计划》中的工厂输入输出和布局可以非常复杂… 其实这和集成芯片物理设计中的元件布局和布线有许多相似之处。
(3) 用非线性模型优化工厂位置和物流。这个我懂,区位条件嘛!哪颗星球铁矿多、就着重生产钢铁、马达;哪颗星球石油多,就着重搞能源工业和石油化工。如果有市场经济,每个工厂的厂长就会自己搬去离原料最近的工厂,从而最小化物流开销。——可惜《戴森球计划》中的所有生产都由玩家一人负责,因此需要玩家自己优化所有工厂的位置,相当繁琐。如果能写出一个目标函数,以工厂选址为输入变量变量、以物流成本为函数值、再对该函数进行最优化,就可以得到最优的工厂选址,从而将玩家从繁琐的工厂规划中解放出来。
虽然三个想法都很诱人,但是布局布线和非线性优化都过于复杂…… 于是我决定先尝试基于线性规划的想法(1)。也许以后可以试试另两个想法 :-)
![](/2023/06/16/%E7%94%A8%E7%BA%BF%E6%80%A7%E8%A7%84%E5%88%92%E8%A7%A3%E5%86%B3%E3%80%8A%E6%88%B4%E6%A3%AE%E7%90%83%E8%AE%A1%E5%88%92%E3%80%8B%E4%B8%AD%E7%9A%84%E7%94%9F%E4%BA%A7%E8%A7%84%E5%88%92%E9%97%AE%E9%A2%98/DSP剧照-生产.png)
![](/2023/06/16/%E7%94%A8%E7%BA%BF%E6%80%A7%E8%A7%84%E5%88%92%E8%A7%A3%E5%86%B3%E3%80%8A%E6%88%B4%E6%A3%AE%E7%90%83%E8%AE%A1%E5%88%92%E3%80%8B%E4%B8%AD%E7%9A%84%E7%94%9F%E4%BA%A7%E8%A7%84%E5%88%92%E9%97%AE%E9%A2%98/DSP剧照-建造中的戴森球.png)