2. 伊辛模型与QUBO建模基础

量子退火求解器并不直接理解“排班”“选路”或“装箱”这类业务语言,它只接受一种统一的数学形式:一组取值为 ±1 或 0/1 的变量,以及一个由这些变量构成的二次多项式目标函数。把实际问题翻译成这种形式,是使用量子退火的第一步,也是最容易出错的一步。本节聚焦两种最常用的表达——伊辛模型与 QUBO 模型——并厘清自旋变量、耦合系数、外场与目标函数之间的对应关系。

一、两种变量约定:自旋与二进制

伊辛模型使用自旋变量,记作 si,取值只有 +1 和 −1,物理上对应“自旋向上”和“自旋向下”。它的能量函数写作:

E(s) = Σ_i h_i · s_i + Σ_{i<j} J_ij · s_i · s_j

其中 hi 是作用在第 i 个自旋上的外场(局部偏置),Jij 是第 i 与第 j 个自旋之间的耦合系数。求和遍历所有变量与所有变量对。

QUBO 使用二进制变量,记作 xi,取值 0 或 1,目标函数通常写成矩阵形式:

f(x) = Σ_i Q_ii · x_i + Σ_{i<j} Q_ij · x_i · x_j

Qii 是线性项系数,Qij 是二次项系数。QUBO 默认求最小值,若原问题是最大化,只需对目标函数整体取负号。

两种形式可以互相转换,桥梁是线性代换 si = 2xi − 1。代入后,伊辛的 h、J 与 QUBO 的 Q 之间存在确定的换算关系。理解这一点,就能在两种建模语言之间自由切换,而不必重复推导。

二、耦合系数与外场分别“管”什么

耦合系数 Jij(或 Qij)描述两个变量之间的相互偏好,它决定的是“关系”,而不是单个变量的取值:

  • Jij < 0:两个自旋倾向同向(si = sj),对应 QUBO 中两个二进制变量倾向同时为 1,即“奖励共现”。
  • Jij > 0:两个自旋倾向反向,对应 QUBO 中两个变量倾向不同时为 1,即“惩罚共现”。
  • |Jij| 越大,这种偏好越强,在最终解中越难被违反。

外场 hi(或线性项 Qii)描述单个变量自身的偏好:

  • hi < 0:自旋倾向取 +1;在 QUBO 中若 Qii < 0,则 xi 倾向取 1。
  • hi > 0:自旋倾向取 −1;在 QUBO 中若 Qii > 0,则 xi 倾向取 0。

一个直观的类比:外场像每个人的“个人意愿”,耦合像两个人之间的“合得来或合不来”。最终解是所有人意愿与两两关系共同作用下的最低能量配置。

三、从业务约束到系数的映射规则

建模的核心工作,是把“必须满足的约束”和“希望优化的目标”都写成二次多项式。常用映射规则如下:

业务语义QUBO 写法作用
两个任务不能同时选P · xi · xj,P > 0惩罚同时为 1
两个任务最好一起选−R · xi · xj,R > 0奖励同时为 1
选中某任务有收益−ci · xi,ci > 0降低选中成本
选中某任务有代价+ci · xi,ci > 0提高选中成本
恰好选 k 个P · (Σ xi − k)²惩罚数量偏离 k

其中 P 是惩罚系数,必须足够大,才能保证违反约束的解不会成为最低能量解。经验上,P 应大于该约束可能带来的最大收益差,否则求解器可能“宁愿违约”。

四、一个可手算的建模示例

假设要从三个任务 A、B、C 中选两个执行,收益分别为 3、2、4,且 A 与 B 不能同时选。定义 xA、xB、xC ∈ {0,1},取惩罚系数 P = 10。

f = -3x_A - 2x_B - 4x_C
    + 10 · x_A · x_B
    + 10 · (x_A + x_B + x_C - 2)²

展开平方项后,会得到线性项与二次项,全部并入 Q 矩阵。逐个枚举 8 种取值,可以验证:满足“选两个且不含 A、B 同选”的可行解中,{B, C} 的 f = −2 − 4 = −6 最低;而违反约束的 {A, B} 虽然收益 5,但惩罚 10 使其 f = −5 + 10 = +5,明显更高。这说明惩罚系数设置合理时,最低能量解就是可行最优解。

建模时先写“约束项 + 目标项”,再统一展开成 Q 矩阵,比直接填矩阵更不容易漏项。展开后务必检查:每个变量对是否只出现一次,线性项是否被重复计入。

五、变量、系数与目标函数的对应关系图

下图把本节的核心对应关系集中呈现:左侧是伊辛语言,右侧是 QUBO 语言,中间通过 s = 2x − 1 建立映射;下方则展示业务约束如何落到耦合与外场上,并最终汇入同一个目标函数。

伊辛模型 ↔ QUBO 建模对应关系 伊辛模型(自旋) 变量:s_i ∈ {+1, −1} 外场:h_i 耦合:J_ij 能量:E = Σ h_i s_i + Σ J_ij s_i s_j 目标:最小化 E QUBO(二进制) 变量:x_i ∈ {0, 1} 线性项:Q_ii 二次项:Q_ij 目标:f = Σ Q_ii x_i + Σ Q_ij x_i x_j 目标:最小化 f s_i = 2x_i − 1 线性代换,双向可逆 业务约束 → 系数 → 目标函数 互斥:不能同选 +P · x_i x_j 协同:最好同选 −R · x_i x_j 收益:选中有利 −c_i · x_i 数量:恰好选 k 个 P · (Σx_i − k)² 统一目标函数 f(x) → 最小化

六、建模时的三个关键检查点

第一,变量语义要唯一。每个 xi 必须对应一个明确的“是/否”决策,例如“任务 A 是否被选中”。如果一个问题需要“从三个选项中选一个”,应使用三个二进制变量加一个“恰好选一个”的约束,而不是一个取值为 0/1/2 的变量。

第二,惩罚系数要足够大但不能过大。P 太小会导致约束被违反;P 过大则会让目标函数的数值范围被惩罚项主导,降低求解器对真实优化目标的区分度。实践中可以先取“最大单项收益的 1.5~3 倍”作为起点,再根据求解结果调整。

第三,常数项可以忽略。展开平方项时会产生常数,它不影响最优解的位置,只影响目标函数值。但若需要比较不同解的实际收益,应把常数加回去。

不要把“约束”和“目标”混在同一个系数里反复调整。建议先固定约束的惩罚系数,再单独调优目标项权重,这样更容易定位问题。