状态向量模拟
适用版本 · ArcQML 0.1.0
本页目录
7.1 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。
7.2 初态导入与验证
单态 from_state_tensor 接受连续、CPU、Dense 的 C64 一维 Tensor,shape 必须严格为 [d];batch 版本要求二维 [B, d]、batch 大小非零,并逐行检查归一化。其中,d 是第 3.1 节定义的状态空间维数,两种接口均采用该节给出的归一化容差。
从 Python NumPy 导入时,单态要求 C 连续 complex128 一维数组,batch 要求 C 连续 complex128 二维数组。绑定首先检查 Python 维度,再复制到 FlatC64 Tensor,随后由 Rust 模拟器执行同样的归一化与布局验证。
7.3 BatchStateVectorSimulator
BatchStateVectorSimulator 的 state 形状是 [batch_size, d],每行是一条彼此独立的纯态。apply_circuit 对每一行施加相同电路;run 返回 shape 为 [batch_size] 的 F64 Tensor。Runtime 按行主序解释批量状态,并在批量任务层进行并行调度;因此线程数、批量大小、状态维度和内存带宽都会影响实际性能。
batch 的含义 batch 不是“一个量子态中的并行分支”,而是一批独立初态共享同一条 Circuit 与同一个 SparsePauliOp。它不能表达每条样本使用不同门拓扑或不同量子比特数的情形。Batch 路径适合在移植传统机器学习任务处理较大数据集时使用。