肉丁土豆园地

静谧编程花园 - The Secret Garden
我的 Opus Magnum 最短周期方案和思路

Opus Magnum 是一个非常好玩的游戏!我推荐你买正版,因为有排行榜,而且一直有更新。

它有三个评分标准,分别是钱、时间和面积。然而这个游戏的钱和面积都是无限的,只有时间对每个人都永远是公平的(因为每个人都活不过 \(200\) 岁),而且看它嗖嗖地跑起来也很有成就感。

所以这篇文章就记录了我是如何追求最短周期,最后通关的(目前还没有通关)。

通用方法

在开始之前,我会把我使用的通用方法写在这里,方便查阅。

基础

讨论之前,先明确一些基础事实。

  • 游戏里组装的叫嬗变引擎
  • 周期就是 Cycles ,表示时间
  • 总周期表示引擎制造 \(6\) 个试剂花费的时间
  • 周期的单位是步骤,一个步骤运行一个指令
  • 回合是我自创的词,用来表示一次引擎回到初始状态的时间,也就是机械臂的指令周期
  • 不能同时往产品槽里塞产品,每个槽最快 \(1\) 个步骤放 \(1\) 个产品
  • 不能同时从试剂槽里拿试剂,每个槽最快 \(2\) 个步骤拿 \(1\) 个试剂
  • 我是一个普通人,我不搞一次性的引擎。引擎在总周期里会执行多个回合,这样优化时只关心回合的周期而不是总周期

输入输出回合分析法

根据基本事实,可以先从输入输出对回合的理论最短周期进行分析。

观察输出,对于一种只有一个产品槽的产品,一个回合产生 \(n\) 个,这个回合就要至少 \(n\) 个步骤——因为你不能把他们同时放进槽里。
之后再观察输入。比如如果一个产品需要 \(4\) 个火原子,而火原子的试剂槽只有 \(1\) 个,考虑到试剂槽最快也得 \(2\) 步骤拿 \(1\) 个试剂,那产生 \(1\) 个产品就至少需要 \(2\times 4=8\) 个步骤。

之后,还需要考虑回合的最大能力。如果一个产品需要 \(4\) 个火原子,而试剂槽有 \(3\) 个,那么一个回合产出 \(3\) 个产品,拿取 \(\mathrm{lcm}(3, 4)=12\) 个试剂是理论效率最高的,需要 \(\frac{12}{3}\times 2=8\) 个步骤。以此类推。

状态法

试剂槽 \(2\) 步骤才能拿一次,并不是因为试剂槽,而是因为机械臂——机械臂拿起来再挪开,就需要 \(2\) 个步骤。
机械臂的复位指令同样,放下原子再挪回一次,也是 \(2\) 个步骤。
相互间原子的交接也有特点,即上一个机械臂复位指令所在的步骤就是下一个机械臂抓取指令所在的步骤。

综合以上启示我们可以发现,对于简单的引擎,把回合的周期定为 \(2\) 的倍数就是很方便的。
我们可以管每 \(2\) 个步骤叫做一个状态,因为使用这种理念设计的引擎大部分机械臂每 \(2\) 个步骤只有一个运动,而且这个运动通常不是旋转手里的原子——因为旋转手里的原子不会改变机械臂的位置,导致复位指令和前面的指令的步骤数不同,指令周期出现奇数。

通过状态设计引擎有很多方便的地方。比如要考虑引擎能否并行组装多个产品,那么把每个产品需要经过的状态的数量叫做产品的阶段数量,每个阶段耗费的状态数量(考虑到复位,至少 \(>2\) )的最大值就是回合的状态数量,表现在引擎最多能容纳多少种不同阶段下的产品。

举一个例子,比如一个产品 X 要从左往右经过 \(4\) 个阶段 X1 X2 X3 X4 ,才能塞进槽里。那么当每个阶段只需要耗费 \(2\) 个状态时,模拟引擎的运行结果如下:

  • 从上往下每行表示一个状态下的引擎
  • Xn 表示在第 \(n\) 阶段的产品 X
  • 产品从左往右移动,最后 (ok) 表示塞进产品槽里了
X1
   X2
X1   X3
   X2  X4
X1   X3  (ok)
   X2  X4
X1   X3  (ok)

可以发现引擎最多有 \(\lceil \frac{阶段数}{\max(每阶段状态)} \rceil=\lceil \frac{4}{2} \rceil=2\) 种不同阶段的产品。这个信息可以用于在设计的时候推测原子碰撞的情况。

如果有任何一个阶段需要耗费 \(3\) 个状态,那引擎的运行结果就会像下方这样:

X1
  X2
    X3
X1    X4
  X2    (ok)
    X3
X1    X4
  X2    (ok)

使用状态法可以将复杂的引擎运行情况简化为这种状态和阶段,也方便考虑原子碰撞。

这其中最让人着迷的,就是 \(2\) 状态引擎。只要阶段设计的合理,就可以设计出基本确定是理论最小周期的引擎。比如\(Ⅰ\) 章的散粉就是一个 \(2\) 状态引擎。

合成图法

对产品的合成路线进行分析也有助于设计引擎。当你进行输入输出回合分析,发现回合需要取试剂槽数量和产品的最小公倍数的时候,如何分配试剂槽的用途就会成为一个问题。

大学章节

稳定的水元素

这一关就这个有排行榜。

\(Ⅰ\)

精炼金

img

散粉

img

防水密封剂

img

醒酒药

img

飞船燃料

还没解决

精密机油

img

健康补剂

img

耐力药水

img

\(Ⅱ\)

美发产品

待优化。

火箭推进剂

马上做出来了。

失能迷雾

img

posted on 2026-06-03 18:29  肉丁土豆表  阅读(6)  评论(0)    收藏  举报