Qiskit 2.x 高阶算法与应用包实战指南:VQE、QAOA、Grover、量子化学与 Addons 全解析
【免费下载链接】scientific-agent-skillsTurn any AI agent into an AI Scientist. The #1 Agent Skills library for science, used by 190,000+ scientists worldwide. 165 ready-to-use validated skills plus 100+ scientific databases covering biology, chemistry, medicine, and drug discovery. Compatible with Cursor, Claude Code, Codex, Pi, Antigravity, and the open Agent Skills standard.项目地址: https://gitcode.com/GitHub_Trending/cl/scientific-agent-skills
导读:本指南基于本仓库 Qiskit 技能包 的算法参考文档,系统梳理 Qiskit 2.x 核心发行版与
qiskit-algorithms、qiskit-nature、qiskit-machine-learning、qiskit-optimization及五大 Addon 应用包的边界、版本矩阵与安装方式。你将掌握在 Qiskit 2.5 环境中用 V2 Primitives 落地 VQE、QAOA、Grover、量子相位估计、量子核方法等算法的完整可运行代码,学会判断"手写电路"与"使用应用包"的取舍,并获得一套防止把模拟结果错当硬件结论的算法审查清单。
一、生态全景:核心发行版与应用包的分工
Qiskit 2.x 的核心qiskit发行版只负责量子计算的基础设施:电路(circuits)、算子(operators)、Primitive(Sampler / Estimator)、合成(synthesis)、转译(transpilation)与量子信息工具(quantum information)。高阶算法与领域应用则全部托管在独立发行包中——这是本仓库 algorithms.md 反复强调的核心边界:
- 变分量子特征求解器(VQE)、QAOA、Grover、相位估计等通用算法→
qiskit-algorithms - 电子结构、二次量子化、算符映射等化学/物理领域问题→
qiskit-nature(+qiskit-nature-pyscf驱动) - 量子核、量子神经网络、Torch 连接等机器学习→
qiskit-machine-learning - 二次规划、组合优化包装器 →
qiskit-optimization - 电路切割、量子对角化等模块化算法构件→ 五个
qiskit-addon-*包
这一点也可以从仓库配套脚本中得到印证:scripts/check_environment.py 中维护了一张与本文档一致的VERIFIED_VERSIONS基线表,并额外指出一个关键陷阱:不要安装qiskit-terra——它已被qiskit发行版取代,混装两者会造成命名空间污染,脚本会将其视为不可恢复的错误。
已验证包矩阵(2026-07-23 校验)
下表来自 algorithms.md,所有版本均在该日期基于 PyPI 与官方文档验证通过(版本来源详见 sources.md):
| Package | Version | Primary role |
|---|---|---|
qiskit-algorithms | 0.4.0 | VQE, QAOA, Grover, phase estimation, eigensolvers, optimizers |
qiskit-nature | 0.8.0 | Electronic structure, second quantization, mappers |
qiskit-nature-pyscf | 0.4.0 | PySCF electronic-structure driver integration |
qiskit-machine-learning | 0.9.0 | Kernels, QNNs, classifiers/regressors, Torch connector |
qiskit-optimization | 0.7.0 | Quadratic programs, converters, quantum optimization wrappers |
qiskit-addon-cutting | 0.10.0 | Circuit and operator cutting |
qiskit-addon-sqd | 0.12.1 | Sample-based quantum diagonalization |
qiskit-addon-obp | 0.3.0 | Operator backpropagation |
qiskit-addon-mpf | 0.3.0 | Multi-product formulas |
qiskit-addon-aqc-tensor | 0.3.1 | Approximate quantum compilation with tensor networks |
精确锁定版本安装
应用包与核心 Qiskit 的兼容窗口各不相同,官方文档建议在全新环境中按需精确安装。核心算法 + 优化组合:
uv pip install \ "qiskit==2.5.0" \ "qiskit-algorithms==0.4.0" \ "qiskit-optimization==0.7.0"化学计算组合:
uv pip install \ "qiskit==2.5.0" \ "qiskit-algorithms==0.4.0" \ "qiskit-nature==0.8.0" \ "qiskit-nature-pyscf==0.4.0"要点:各应用包需一并解析安装(resolve together),因为它们的 Qiskit 兼容窗口可能存在差异;不要只锁核心包而放任应用包自行浮动。安装后可用仓库脚本核验环境:
python skills/qiskit/scripts/check_environment.py --json该脚本会逐一比对已安装版本与验证基线,报告版本漂移、导入失败与核心 API 冒烟测试结果(详见 check_environment.py)。
二、决策标准:何时手写电路,何时使用应用包
在引入任何一个高层算法包之前,先回答"要不要引入依赖"的问题。文档给出明确的分界:
手写电路(manual circuit)适用场景:
- 教学演示或检查一个小规模算法;
- 测试一种新的电路构造方式;
- 需要完全掌控每一个 Primitive PUB 与编译步骤;
- 希望避免引入应用包依赖。
使用应用包适用场景:
- 应用包提供了经过测试的问题变换(problem transformations);
- 其结果对象与领域相关的后处理(domain post-processing)有价值;
- 当前实现接受 V2 Primitive;
- 该版本的发布兼容你已安装的 Qiskit 版本。
硬性警告:不要直接照抄 1.0 之前的算法教程——先检查构造函数签名与 Primitive 要求。这条规则在仓库 migration.md 中有更系统的体现:旧的quantum_instance=构造参数、字符串形式的optimizer="COBYLA"均已被移除或弃用,必须替换为 V2 Primitive 对象与优化器实例。
三、VQE with Qiskit Algorithms 0.4:从本地验证到硬件执行
变分量子特征求解器(VQE)是本仓库验证过的核心算法示例。它使用 V2 的StatevectorEstimator,配合efficient_su2硬件高效 ansatz 与SLSQP优化器:
from qiskit.circuit.library import efficient_su2 from qiskit.primitives import StatevectorEstimator from qiskit.quantum_info import SparsePauliOp from qiskit_algorithms import VQE from qiskit_algorithms.optimizers import SLSQP hamiltonian = SparsePauliOp.from_list( [ ("ZI", 1.0), ("IZ", 1.0), ("XX", 0.2), ] ) ansatz = efficient_su2( num_qubits=2, reps=1, entanglement="linear", ) vqe = VQE( estimator=StatevectorEstimator(), ansatz=ansatz, optimizer=SLSQP(maxiter=100), initial_point=[0.0] * ansatz.num_parameters, ) result = vqe.compute_minimum_eigenvalue(hamiltonian) print(float(result.eigenvalue.real))从源码看这套代码为何成立
SparsePauliOp.from_list的标签采用little-endian 约定:标签最右侧字符作用于 qubit 0(见 primitives.md),因此"ZI"、"IZ"、"XX"天然适配 2 比特 ansatz;efficient_su2(num_qubits, reps, entanglement)是函数式构造函数,取代了旧的 blueprint 类;文档与 migration.md 均提示函数构造函数在可变性(mutability)与构造时机上和旧 blueprint 类不同,迁移后必须重测参数顺序;- V2
VQE的estimator槽位接收的是明确实现的 Estimator(本地StatevectorEstimator或 RuntimeEstimatorV2),不再有隐式的QuantumInstance。
仓库的 run_local_primitives.py 给出了一个可独立运行的同类验证流程:它用ry(theta)+cx构造参数化电路,令StatevectorEstimator计算1.0*ZI + 0.5*XX,并与解析解cos(theta) + 0.5*sin(theta)比对;对应测试 tests/qiskit/test_scripts.py 断言了四种角度下期望值与解析解的绝对误差小于1e-9,同时在theta=pi/2时采样结果严格只有00/11(Bell 态)。这套"先有解析基准、再上噪声/硬件"的方法论正是本文第五、十节审查清单的工程化体现。
上硬件时的四条纪律
- 使用 Runtime
EstimatorV2; - 提供转译器适配器(transpiler adapter),或显式管理参数化的 ISA 电路;
- 限制优化器迭代次数与请求精度(
precision); - 保存每个 Job ID 与收敛记录。
最重要的性能教训:不要在每次代价函数调用中把新绑定的电路从头转译一遍。正确做法是"参数化电路只编译一次",之后在 PUB 里传参数数组。仓库 patterns.md 的 Pattern 4 展示了完整形态——先用generate_preset_pass_manager对efficient_su2ansatz 做一次编译得到isa_ansatz,再用hamiltonian.apply_layout(isa_ansatz.layout)映射可观测量,最后在Session或 job 模式中反复estimator.run([(isa_ansatz, isa_hamiltonian, [parameters])], precision=0.03)。
四、QAOA 与 Qiskit Optimization:组合优化落地
QAOA(量子近似优化算法)在 Qiskit 中通过qiskit-algorithms的QAOA类 +qiskit-optimization的QuadraticProgram/MinimumEigenOptimizer组合使用。QAOA 的 V2 构造函数接收Sampler(而不是 Estimator):
from qiskit.primitives import StatevectorSampler from qiskit_algorithms import QAOA from qiskit_algorithms.optimizers import COBYLA from qiskit_optimization import QuadraticProgram from qiskit_optimization.algorithms import MinimumEigenOptimizer problem = QuadraticProgram("binary_demo") problem.binary_var("x") problem.binary_var("y") problem.maximize( linear={"x": 1, "y": 1}, quadratic={("x", "y"): -2}, ) qaoa = QAOA( sampler=StatevectorSampler(seed=5), optimizer=COBYLA(maxiter=100), reps=1, ) solver = MinimumEigenOptimizer(qaoa) result = solver.solve(problem) print(result.x, result.fval, result.status)参数纪律:optimizer必须传优化器对象(如COBYLA(maxiter=100)),不要用旧式的字符串参数(optimizer="COBYLA"),除非具体包文档明确声明支持该写法。
声明量子结果前的五项核查(这是组合优化类工作的"事故高发区"):
- 对小规模实例与经典求解器结果对比;
- 核对变量到比特串(bitstring)的排序约定;
- 报告解的可行性(feasibility)与目标函数值;
- 区分优化器的随机性与量子采样的随机性;
- 量化总电路求值次数与 shot 开销。
五、Grover 与量子相位估计:Sampler 即插即用
Qiskit Algorithms 0.4 的构造函数直接接受 V2 Sampler 实现,Grover与PhaseEstimation用法一致:
from qiskit.primitives import StatevectorSampler from qiskit_algorithms import Grover, PhaseEstimation sampler = StatevectorSampler(seed=5) grover = Grover(sampler=sampler) phase_estimation = PhaseEstimation( num_evaluation_qubits=4, sampler=sampler, )旧的quantum_instance=参数已过时(仓库 migration.md 的"Migrate Qiskit Algorithms"一节给出了同构的PhaseEstimation(num_evaluation_qubits=4, sampler=StatevectorSampler(seed=41))迁移写法)。
在自定义相位估计电路中,应使用门级实现QFTGate而非蓝图类QFT:
from qiskit import QuantumCircuit from qiskit.circuit.library import QFTGate inverse_qft = QFTGate(4).inverse() circuit = QuantumCircuit(4) circuit.append(inverse_qft, range(4))弃用提醒:QFT蓝图类自 Qiskit 2.1 起弃用,计划在Qiskit 3.0移除(见 migration.md 的 blueprint 迁移章节);当前推荐QFTGate(...)或synth_qft_full(...)。
六、Qiskit Nature:从分子哈密顿量到量子比特哈密顿量
Qiskit Nature 的职责是把领域问题转换为二次量子化算子,再映射为量子比特算子。下面的已验证示例演示完整链路:PySCF 驱动 → 费米子哈密顿量 → Jordan-Wigner 映射 → 量子比特哈密顿量:
from qiskit_nature.second_q.drivers import PySCFDriver from qiskit_nature.second_q.mappers import JordanWignerMapper driver = PySCFDriver( atom="H 0 0 0; H 0 0 0.735", basis="sto3g", charge=0, spin=0, ) problem = driver.run() fermionic_hamiltonian = problem.hamiltonian.second_q_op() mapper = JordanWignerMapper() qubit_hamiltonian = mapper.map(fermionic_hamiltonian) print(problem.num_spatial_orbitals) print(problem.num_particles) print(qubit_hamiltonian.num_qubits)经典预处理的记录义务
PySCF 计算属于经典预处理,必须完整记录以支持复现:
- 几何构型与单位(geometry and units);
- 基组(basis set);
- 电荷与自旋(charge and spin);
- 活性空间或冻结芯选择(active-space or freeze-core choices);
- 映射器与对称性约减(mapper and symmetry reductions);
- 核排斥能(nuclear repulsion energy);
- 包版本(package versions)。
两个易错点:
- 不要重复添加核排斥能项——优先使用 Qiskit Nature 的结果解释器(result interpreters)获得完整的能量报告;
QubitConverter已废弃,直接使用 mapper 类(如JordanWignerMapper()),这是 migration.md 中明确给出的现行模式。
七、Qiskit Machine Learning 0.9:量子核方法实战
Qiskit Machine Learning 提供量子核(kernels)、量子神经网络(QNNs)、可训练模型与 PyTorch 集成。下面的核方法示例使用了从qiskit_algorithms迁移到 Machine Learning 包的 API:
import numpy as np from qiskit.circuit.library import zz_feature_map from qiskit.primitives import StatevectorSampler from qiskit_machine_learning.kernels import FidelityQuantumKernel from qiskit_machine_learning.state_fidelities import ComputeUncompute feature_map = zz_feature_map( feature_dimension=2, reps=1, entanglement="full", ) sampler = StatevectorSampler(seed=5) fidelity = ComputeUncompute(sampler=sampler) kernel = FidelityQuantumKernel( fidelity=fidelity, feature_map=feature_map, ) x = np.array([[0.1, 0.2], [0.3, 0.4]]) kernel_matrix = kernel.evaluate(x)导入路径迁移:自 Qiskit Machine Learning 0.8 起,相关的梯度(gradients)、优化器(optimizers)、态保真度(state fidelities)与工具函数已从qiskit_algorithms移入qiskit_machine_learning(例如from qiskit_machine_learning.optimizers import COBYLA、from qiskit_machine_learning.utils import algorithm_globals,见 migration.md)。适配旧导入前务必查阅其 0.8 迁移指南。
评估纪律:
- 使用留出测试集(held-out test set);
- 与匹配的经典核/模型对比;
- 不要在作为证据展示的演示代码中用随机生成的标签;
- 计入核矩阵 (O(n^2)) 次求值开销;
- 严格区分模拟结果与硬件结果。
八、Qiskit Addons:按工作流阶段挑选算法构件
Addons 是一组模块化算法构件,对齐 Qiskit 工作流的各个阶段(Map → Optimize → Execute → Analyze)。它们独立发版、独立发布说明、各有独立的适用假设:
| Addon | Typical stage | Use |
|---|---|---|
| Circuit cutting | Optimize / execute / reconstruct | Split large circuits or observables and reconstruct estimates |
| Operator backpropagation (OBP) | Optimize | Move selected circuit operations into observables |
| Multi-product formulas (MPF) | Map / optimize | Approximate time evolution using formula combinations |
| AQC-Tensor | Map / optimize | Approximate target circuits with tensor-network-assisted compilation |
| Sample-based quantum diagonalization (SQD) | Analyze | Combine QPU samples with classical subspace diagonalization |
安装示例:
uv pip install "qiskit-addon-cutting==0.10.0" uv pip install "qiskit-addon-sqd==0.12.1" uv pip install "qiskit-addon-obp==0.3.0" uv pip install "qiskit-addon-mpf==0.3.0" uv pip install "qiskit-addon-aqc-tensor==0.3.1"使用规范:每个 addon 都有独立的 release notes 与假设条件,动手前先读其教程,并在经典可计算的实例上验证(validate against a classically tractable instance)——这条原则与全文反复出现的"可验证基线"方法论一脉相承。
九、直接用 quantum_info:很多任务不需要算法包
大量验证性任务完全不需要高层算法包,直接使用量子信息工具即可:
from qiskit.quantum_info import DensityMatrix, Operator, Statevector state = Statevector.from_instruction(circuit) operator = Operator(circuit) density_matrix = DensityMatrix(state)qiskit.quantum_info适用于:
- 理想态/算子分析(ideal state/operator analysis);
- 保真度与距离度量(fidelity and distance metrics);
- 部分迹与熵(partial traces and entropies);
- Pauli 与 Clifford 代数;
- 信道表示(channel representations);
- 小系统验证(small-system validation)。
资源警告:稠密态矢与算子的内存随量子比特数指数增长,构造前务必确认维度(例如Statevector对 30 比特就需要 8 GiB 量级的内存)。这也是 patterns.md 中"先本地理想基线 → 再噪声模拟 → 最后硬件"三阶梯评估的前提。
十、算法审查清单:发表结论前的十道关卡
无论使用哪个算法包,在把结果写进报告或论文前,逐项过一遍 algorithms.md 给出的清单:
- 声称的加速是渐近的(asymptotic)、启发式的(heuristic)还是实验验证的(empirically demonstrated)?
- 态制备或读出(state preparation / readout)是否主导了声称的优势?
- 在测试规模下,实例能否被经典验证(classically verifiable)?
- 包版本与 Primitive 版本是否兼容?
- 实现是否使用 V2 Primitive?
- 参数化电路是否为选定目标只编译一次?
- 可观测量布局与比特顺序(observable layouts and bit order)是否正确处理?
- 是否报告了优化器求值次数、精度、shots、缓解(mitigation)与总 QPU 用量?
- 每个结果是否明确标注为理想模拟、噪声模拟或硬件结果?
- 是否包含经典基线与不确定性?
这套清单与仓库中其他参考文档互为印证:primitives.md 给出了"每个结果必存 job ID、包版本、后端名、seed、precision/shots 与全部非默认 options"的结果处理清单;patterns.md 提供了完整的实验清单(experiment manifest)模板与付费执行前的 9 步预检。将三者组合使用,即可在 SKILL.md 定义的 Map → Optimize → Execute → Analyze 四阶段工作流中,产出可复现、可审计、结论可信的 Qiskit 2.x 算法实验。
延伸阅读(均为本仓库内的配套参考,可按需取用):
- V2 Primitive 与 PUB 完整规范:Sampler/Estimator PUB 结构、precision 与 shots 语义、Runtime options;
- 旧版 API 迁移对照表:
quantum_instance、QFT、QubitConverter、字符串优化器等全部废弃模式的现行替代; - 端到端工作流模式:参数扫描单次编译、变分循环、批处理、缓解 A/B 测试;
- 环境检查脚本 与 本地 Primitive 脚本:可直接运行验证;
- 配套测试:以解析解与 Bell 态分布作为基准的自动化验证证据。
【免费下载链接】scientific-agent-skillsTurn any AI agent into an AI Scientist. The #1 Agent Skills library for science, used by 190,000+ scientists worldwide. 165 ready-to-use validated skills plus 100+ scientific databases covering biology, chemistry, medicine, and drug discovery. Compatible with Cursor, Claude Code, Codex, Pi, Antigravity, and the open Agent Skills standard.项目地址: https://gitcode.com/GitHub_Trending/cl/scientific-agent-skills
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考