Skip to Content

QUBO 与 Ising 求解

unitarylab.library.qubocore 提供八种 CPU 启发式求解器。它们统一最小化 Ising 能量

QUBO 问题应先转换为这一 约定;不同工具对交叉项和常数项的定义可能不同,转换后应手动核验一个小规模能量值。

最小示例

import numpy as np from unitarylab.library import qubocore J = np.array([ [0.0, 1.0, -0.5], [1.0, 0.0, 0.25], [-0.5, 0.25, 0.0], ]) h = np.array([0.1, 0.0, -0.2]) result = qubocore.bsb_minimize( J, h, n_steps=100, n_agents=4, seed=7, ) print(result)

所有求解器接受 NumPy 兼容的实数输入并返回字典。公共字段如下:

字段形状说明
spins(N,)能量最低的自旋配置
energy标量spins 对应的 Ising 能量
all_spins(n_agents, N)每个代理保留的候选配置
all_energies(n_agents,)每个候选配置的能量
n_steps标量本次求解使用的迭代步数

方法特有的诊断字段不属于公共结果契约;调用方应按上表读取通用结果。

求解器与参数

入口方法主要专属参数
bsb_minimizeballistic Simulated Bifurcationn_steps=1000、dt=1.0、c0=None、a0=1.0
dsb_minimizediscrete Simulated Bifurcationn_steps=1000、dt=1.0、c0=None、a0=1.0
asb_minimizeadiabatic Simulated Bifurcationn_steps=1000、dt=0.5、xi0=None、a0=1.0
simcim_minimizeSimCIMdt=0.01、momentum=0.9、epsilon=0.05、sigma=0.03、v_start=0、v_end=2、x_sat=1
cim_minimizecoherent Ising machinep=2、A_s=1、epsilon=0.1、n_steps=3000、dt=0.01
oim_minimizeoscillator Ising machineK_c=None、K_s_final=5、K_s_schedule="linear"、integrator="rk4"、sigma=0
phia_minimizeparallel heat-bath inspired annealingn_steps=200、L=30、eps=0.01、gamma=5、beta_init=0.1、beta_final=15
gahmc_minimizegeneralized-acceptance HMCtotal_trajectory_length=100、beta=10、n_samples=500

除表中参数外,所有方法都有 J、可选 h、n_agents 和 seed;各方法的默认 n_agents 不完全相同。seed=None 使用系统随机源,设置整数种子可以复现实验。asb_minimize() 不支持局部场 h。

输入约束

  • J 必须是实数方阵,h 必须是一维实数向量且长度匹配;复数输入会触发 TypeError。
  • 数值参数必须有限;步数、代理数和采样数应为整数。
  • c0、xi0、K_c 等设为 None 时由求解器自动标定;显式值必须为正。
  • K_s_schedule 和 integrator 只接受各自支持的字符串选项。
  • 启发式方法不保证得到全局最优解。实际使用时应增加 n_agents、尝试多个种子,并用统一能量公式重新计算候选解。

方法选择

先以默认参数比较多种求解器,再针对问题规模调节步数和代理数。normalize_j=True 的方法会对耦合矩阵进行内部归一化;跨方法比较时,应始终使用原始 重新计算最终能量。

相关页面

最后更新于