基础量子算法
概述
unitarylab_algorithms.fundamental_algorithm 包提供了构成高级算法基础的核心量子原语:
| 算法 | 类 | 用途 |
|---|---|---|
| Grover 搜索 | GroverAlgorithm | 无结构搜索的二次加速 |
| 量子相位估计 | QPEAlgorithm | 提取酉算符的本征相位 |
| 振幅放大(Amplitude Amplification) | AmplitudeAmplificationAlgorithm | 提高目标态的测量概率 |
| 量子振幅估计(QAE) | AmplitudeEstimationAlgorithm | 估计目标态的振幅 |
| Hadamard 测试 | HadamardTestAlgorithm | 估计期望值和态重叠度 |
| Hadamard 变换 | HadamardTransformAlgorithm | 比特全局 Hadamard 变换 |
Grover 搜索算法
背景
Grover 算法在包含 个条目的无序数据库中以 次预言机查询找到目标,经典方法需要 次。该算法是无结构量子搜索的最优算法,也是许多其他算法的重要子程序。
算法通过迭代 Grover 扩散算符(均值反转)与翻转目标态相位的 Oracle 来实现放大。
导入
from unitarylab_algorithms.fundamental_algorithm.grover.algorithm import GroverAlgorithm.run() 参数
| 参数 | 类型 | 说明 |
|---|---|---|
n | int | 数据寄存器的量子比特数 |
target | str | 目标态的二进制字符串(如 3 比特下的 '101') |
示例
from unitarylab_algorithms.fundamental_algorithm.grover.algorithm import GroverAlgorithm
algo = GroverAlgorithm()
result = algo.run(n=3, target='101')
print(result['status']) # 'ok'快速演示
from unitarylab_algorithms.fundamental_algorithm.grover.algorithm import test
test(n=3, target='101')量子相位估计(QPE)
背景
QPE 提取酉算符 的本征相位 ,其中 。使用 个辅助量子比特时,相位估计精度为 。
QPE 是 Shor 算法、HHL 和量子化学模拟的关键子程序。
导入
from unitarylab_algorithms.fundamental_algorithm.qpe.algorithm import QPEAlgorithm.run() 参数
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
U | Circuit | — | 待估计本征相位的酉算符线路 |
d | int | — | 相位寄存器量子比特数(精度为 ) |
prepare_target | Circuit | None | None | 制备本征态的线路(默认为 $ |
直接构建 QPE 线路
QPEAlgorithm 还提供了将 QPE 嵌入更大线路的工具方法:
qpe_circuit = algo.build_qpe_circuit(U=U, d=4)示例
from unitarylab.core import Circuit
from unitarylab_algorithms.fundamental_algorithm.qpe.algorithm import QPEAlgorithm
# T 门的本征相位为 π/4 = 0.125(以 2π 为单位)
U = Circuit(1)
U.t(0)
algo = QPEAlgorithm()
result = algo.run(U=U, d=4)
print(result['status'])快速演示
from unitarylab_algorithms.fundamental_algorithm.qpe.algorithm import test
test(p=0.25, n=3)振幅放大(Amplitude Amplification)
背景
振幅放大是 Grover 算法的推广:给定态制备酉算符 和一个标记”好”态的预言机,通过反复应用类 Grover 反射算符来放大好态的振幅。迭代次数由初始成功概率 自动推断,也可手动指定。
导入
from unitarylab_algorithms.fundamental_algorithm.amplitude_amplification.algorithm import AmplitudeAmplificationAlgorithm.run() 参数
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
U | Circuit | — | 态制备线路(不含辅助比特) |
good_zero_qubits | List[int] | — | 目标态中必须为 $ |
p | float | — | 初始成功概率(用于推断迭代次数) |
reps | int | None | None | 手动指定迭代次数(覆盖基于 的计算) |
示例
from unitarylab_algorithms.fundamental_algorithm.amplitude_amplification.algorithm import AmplitudeAmplificationAlgorithm
algo = AmplitudeAmplificationAlgorithm()
result = algo.run(U=my_circuit, good_zero_qubits=[0], p=0.1, reps=3)
print(result['status'])快速演示
from unitarylab_algorithms.fundamental_algorithm.amplitude_amplification.algorithm import test
test(p=0.1, reps=3)量子振幅估计(QAE)
背景
量子振幅估计(QAE)估计态制备酉算符 中目标态的振幅 。它结合振幅放大与 QPE,使用 个辅助比特时均方根误差为 。
导入
from unitarylab_algorithms.fundamental_algorithm.amplitude_estimation.algorithm import AmplitudeEstimationAlgorithm.run() 参数
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
U | Circuit | — | 态制备酉算符 |
good_zero_qubits | List[int] | — | 定义目标态的比特索引 |
d | int | 6 | 相位寄存器量子比特数(精度 ) |
示例
from unitarylab_algorithms.fundamental_algorithm.amplitude_estimation.algorithm import AmplitudeEstimationAlgorithm
algo = AmplitudeEstimationAlgorithm()
result = algo.run(U=my_circuit, good_zero_qubits=[0], d=6)
print(result['status'])快速演示
from unitarylab_algorithms.fundamental_algorithm.amplitude_estimation.algorithm import test
test(p=0.36, d=6)Hadamard 测试
背景
Hadamard 测试利用单个辅助量子比特估计酉算符 关于态 的期望值 。支持三种模式:
expectation——估计 (当imag=True时估计虚部)swap_test——估计两个态的重叠度phase_estimation——执行单比特相位估计
导入
from unitarylab_algorithms.fundamental_algorithm.hadamard_test.algorithm import HadamardTestAlgorithm.run() 参数
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
mode | str | 'expectation' | 运行模式:'expectation'、'swap_test'、'phase_estimation' 之一 |
U | Circuit | None | None | 酉算符线路(swap_test 模式下不使用) |
prepare_psi | Circuit | None | None | 制备 $ |
prepare_phi | Circuit | None | None | 制备 $ |
imag | bool | False | 提取虚部(仅 expectation 模式有效) |
shots | int | 20000 | 统计采样的测量次数 |
示例
from unitarylab_algorithms.fundamental_algorithm.hadamard_test.algorithm import HadamardTestAlgorithm
algo = HadamardTestAlgorithm()
result = algo.run(mode='expectation', U=my_U, prepare_psi=my_psi, shots=20000)
print(result['status'])快速演示
from unitarylab_algorithms.fundamental_algorithm.hadamard_test.algorithm import test
test(U=[[1, 0], [0, 1]], psi=[1, 2], shots=0)Hadamard 变换
背景
比特 Hadamard 变换对每个量子比特同时施加一个 Hadamard 门,将计算基态 映射到所有基态的等权叠加(从 出发时)。该变换是自逆的(反射性)。
导入
from unitarylab_algorithms.fundamental_algorithm.hadamard_transform.algorithm import HadamardTransformAlgorithm.run() 参数
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
n | int | 3 | 量子比特数 |
mode | str | 'superposition' | 'superposition'(叠加态生成)或 'reflexive_test'(反射性验证) |
示例
from unitarylab_algorithms.fundamental_algorithm.hadamard_transform.algorithm import HadamardTransformAlgorithm
algo = HadamardTransformAlgorithm()
result = algo.run(n=4, mode='superposition')
print(result['status'])快速演示
from unitarylab_algorithms.fundamental_algorithm.hadamard_transform.algorithm import test
test(n=3)最后更新于