状态向量模拟
适用版本 · ArcQML 0.1.0
本页目录
StateVectorSimulator:有状态与无状态接口
| 接口 | 状态影响 | 返回值 | 主要用途 |
|---|---|---|---|
new / from_state_tensor |
创建初态 | 模拟器 | 默认零态或导入已归一化自定义态。 |
apply_gate / apply_operation |
修改当前 state |
&mut Self |
逐步执行固定参数 Gate/Operation。 |
apply_circuit |
修改当前 state |
&mut Self |
读取 Circuit 当前参数并逐门执行。 |
run |
不修改当前 state |
可微 F64 标量 Tensor |
训练与函数式前向。 |
amplitudes |
方法本身不改态 | 当前 C64 Tensor 的共享句柄 |
读取振幅,保留已有图连接。 |
sample_counts |
只读 | BTreeMap<String, usize> |
当前态的末端全量子比特抽样。 |
值得注意的是,apply_circuit 与 run 不能混为一谈。前者改变模拟器 state,所以多次调用会在已演化状态上继续作用;后者从调用方当前 state 复制出前向缓冲区并返回期望值,不改变 self。若需要反复从零态执行同一电路,可使用新模拟器或在 apply_circuit 前调用 reset;训练循环通常使用 run。
Rust amplitudes() 返回的共享 Tensor 不是独立数值副本;通过其存储执行原地写入会影响原状态,也可能破坏归一化或已记录图的版本约束。Python numpy() 则复制为独立数组。
初态导入与验证
单态 from_state_tensor 接受连续、CPU、Dense 的 C64 一维 Tensor,shape 必须严格为 [d];batch 版本要求二维 [B, d]、batch 大小非零,并逐行检查归一化。其中,d 是状态空间维数,两种接口均采用该节给出的归一化容差。
从 Python NumPy 导入时,单态要求 C 连续 complex128 一维数组,batch 要求 C 连续 complex128 二维数组。绑定首先检查 Python 维度,再复制到 FlatC64 Tensor,随后由 Rust 模拟器执行同样的归一化与布局验证。
BatchStateVectorSimulator
BatchStateVectorSimulator 的 state 形状是 [batch_size, d],每行是一条彼此独立的纯态。apply_circuit 对每一行施加相同电路;run 返回 shape 为 [batch_size] 的 F64 Tensor。Runtime 按行主序解释批量状态;启用 parallel feature 时,公开 Rust 层使用 Rayon 进行 batch 外层任务调度。因此线程数、批量大小、状态维度和内存带宽都会影响实际性能。
batch 的含义 batch 不是“一个量子态中的并行分支”,而是一批独立初态共享同一条 Circuit 与同一个 SparsePauliOp。它不能表达每条样本使用不同门拓扑或不同量子比特数的情形。Batch 路径适合在移植传统机器学习任务处理较大数据集时使用。