ArcTN

ArcTN 接收已经构造好的张量网络,可作为 Quimb/Cotengra 的收缩规划器,也可直接完成路径规划、切片和数值收缩。

本页目录

张量网络的规划与执行

ArcTN 的输入是已经构造好的张量网络。OpenQASM、量子门序列或其他上层模型,需要先由 Quimb 等前端转换为张量、指标和维度。

量子计算任务
振幅 · 期望值 · 概率与采样

电路定义:Qiskit 或 Quimb

模拟方法
一般张量网络收缩构造目标物理量对应的网络,再优化收缩顺序。

其他张量网络方法:MPS 状态更新与可选截断;PEPS 更新与收缩算法。

其他方法:稠密状态向量/密度矩阵、稳定子方法、Pauli 传播。

网络输入
Quimb TensorNetwork 或用户构造的张量网络

inputs · output · size_dict

arrays (用于执行)

Qiskit 电路需要转换;兼容的 OpenQASM 2 电路可由 Quimb 导入。

收缩规划
ArcTN
Light / Heavy 路径搜索可选 fixed / dynamic 切片

收缩路径 + 切片索引

数值执行
由 ArcTN 执行

arctn_contract(…)

或可复用的计划: ArcTNExecutionPlan (IR)

Native CPU 执行器(Rust)

或 opt_einsum + NumPy / CuPy / Torch / JAX

通过 Quimb 执行

ArcTNOptimizer.search()

cotengra.ContractionTree

Quimb / Cotengra 执行 → autoray

CPU 或 GPU 数组后端

收缩结果:标量或张量

ArcTN 处理张量收缩问题,也可处理 MPS/PEPS 算法中的收缩子问题。状态更新、截断、采样与噪声模型由调用方管理。

网络结构用 inputsoutputsize_dict 表示,数值执行时再提供 arrays。ArcTN 可以只返回收缩路径,也可以生成 ArcTNExecutionPlan:它保存网络结构、SSA path 和切片集合,作为规划与执行之间的中间表示(IR)。

搜索一条路径

下面为三矩阵乘积 ABC 搜索收缩顺序。ad 是输出指标;bc 在收缩中求和。这里仅使用网络结构,不需要生成数值数组。

最小 Python 例子

python
from arctn import arctn_path

inputs = [("a", "b"), ("b", "c"), ("c", "d")]
output = ("a", "d")
size_dict = {"a": 2, "b": 3, "c": 4, "d": 2}

path = arctn_path(
    inputs, output, size_dict, preset="light", seed=0
)
print(path)

arctn_path 只规划路径,不读取数组;默认返回 opt_einsum 使用的 recycled linear path,use_ssa=True 返回 SSA path。arctn_contract 用于执行收缩,arctn_plan 创建可复用的计划,再由 plan.save(...) 保存;arctn_schedule 返回完整报告。

执行与集成

直接执行收缩

提供数值数组后,arctn_contract 可在一次调用中完成规划、可选切片和执行。默认使用 ArcTN native CPU,也可以显式选择外部数组 backend。return_info=True 同时返回规划和执行报告。

python
import numpy as np
from arctn import arctn_contract

arrays = [np.ones((2, 3)), np.ones((3, 4)), np.ones((4, 2))]
result = arctn_contract(
    inputs, output, size_dict, arrays,
    preset="light", backend="native",
)

需要限制中间张量大小时,设置 target_size 并选择 fixed 或 dynamic slicing。该参数限制每个 slice 的二元收缩结果元素数;单张量网络另检查最终输出。它不是进程内存或显存上限。

在 Quimb 中使用

向 Quimb 的 optimize= 传入 ArcTNOptimizer,即可使用 ArcTN 搜索路径。ArcTNOptimizer.search() 返回包含路径和 sliced indices 的 ContractionTree,后续数组执行由 Quimb / Cotengra 负责。

保存与复用计划

arctn_plan 返回 ArcTNExecutionPlan。可用 save / load 保存和加载计划,再调用 execute 执行;同一网络结构和维度下,数组值变化时无需重新寻路。计划不包含数值数组或设备状态,backend 在执行或编译时选择。

核心能力

能力 支持方式 从哪里继续
路径生成 greedy、random-greedy、小网络 exact DP 与递归超图二分 选择寻路算法
路径改进 subtree reconfiguration、simulated annealing、parallel tempering、leaf-order DP 树搜索与局部改进
Auto Light / Heavy 两个公开 preset;支持按调用设置 objective weights Auto
切片 fixed 与 dynamic 两种公开模式;target_size 使用精确元素数 切片
数值执行 ArcTN native CPU,或显式 opt_einsum array backend 执行后端
并行与分布式 Rayon 单机并行、slice chunks,以及通过 mpi feature 启用的 tnmpi 并行层次

功能范围