1. 搭建 Qiskit 开发环境并运行首个量子线路

环境准备与版本确认

本例在本地 Python 环境中完成。Qiskit 自 1.0 起拆分为多个包,核心是 qiskit(含 Terra 的线路与基础原语),模拟器能力由 qiskit-aer 提供。为避免版本漂移导致 API 差异,建议使用独立虚拟环境并固定版本。

python -m venv qiskit-env
# Windows: qiskit-env\Scripts\activate
# macOS/Linux: source qiskit-env/bin/activate

pip install "qiskit==1.2.4" "qiskit-aer==0.15.1"

安装完成后先做一次环境自检,确认导入路径与版本号,这是判断“开发链路是否可用”的第一道关口:

import qiskit, qiskit_aer
print("qiskit:", qiskit.__version__)
print("aer   :", qiskit_aer.__version__)

from qiskit import QuantumCircuit
from qiskit_aer import AerSimulator
print("QuantumCircuit OK, AerSimulator OK")
若导入 qiskit_aer 报错,通常是包未安装或虚拟环境未激活;若 qiskit.__version__ 低于 1.0,则 qiskit_aer 的导入方式与旧版 qiskit.providers.aer 不同,需按本文写法调整。

构建单量子比特叠加态线路

目标线路只有一步核心操作:对 q[0] 施加 Hadamard 门,使 |0⟩ 变为 (|0⟩+|1⟩)/√2。为了让“测量统计”这一步可执行,线路中再加入一个经典寄存器并做测量。注意:验证态矢量时应使用不含测量的线路副本,因为测量会破坏叠加态、使态矢量坍缩。

from qiskit import QuantumCircuit, transpile

# 用于态矢量验证:只有 H 门,无测量
qc_state = QuantumCircuit(1)
qc_state.h(0)

# 用于测量统计:H 门 + 测量
qc_meas = QuantumCircuit(1, 1)
qc_meas.h(0)
qc_meas.measure(0, 0)

print(qc_state.draw())
print(qc_meas.draw())

预期 qc_state 的文本图应显示一个 h 门作用于 q,且没有 measure 指令;qc_meas 则多出一条指向经典位的测量线。这一步的检查价值在于:确认门作用对象与测量映射没有写错。

用 Statevector 验证叠加态

Statevector 模拟器直接给出线路末态的复数振幅。对 H|0⟩,理论振幅为 [1/√2, 1/√2],即约 0.7071 + 0j 与 0.7071 + 0j,对应测量概率各 50%。

from qiskit.quantum_info import Statevector

sv = Statevector(qc_state)
print(sv)
for i, amp in enumerate(sv.data):
    print(f"|{i}> 振幅={amp:.4f}  概率={abs(amp)**2:.4f}")

判读标准:两个基态概率均约为 0.5,振幅实部约 0.7071、虚部为 0。若出现 |0⟩ 概率为 1、|1⟩ 为 0,说明 H 门未生效或作用到了错误的量子位。

用 Aer 模拟器做测量统计

测量统计通过多次采样(shots)逼近概率分布。这里用 AerSimulator 执行 qc_meas,取 4096 次采样:

sim = AerSimulator()
tqc = transpile(qc_meas, sim)
result = sim.run(tqc, shots=4096).result()
counts = result.get_counts()
print(counts)

total = sum(counts.values())
for key in sorted(counts):
    print(f"{key}: {counts[key]} 次, 占比 {counts[key]/total:.3f}")

示例性预期结果(实际数值随采样随机波动):{'0': ~2048, '1': ~2048},两者占比都在 0.5 附近。由于是有限次采样,允许存在统计涨落,4096 shots 下偏差通常在几个百分点以内。若某一结果占比接近 1.0,则线路或测量映射有误。

不要把 Statevector 结果与 counts 结果混为一谈:前者是精确振幅(无采样噪声),后者是有限采样估计。两者都指向 50/50,但只有 counts 会随 shots 波动,这正是“模拟器验证 + 采样验证”双重确认的意义。

开发链路自检关系图

下图把本例的验证链路拆成两条并行支路:一条走态矢量精确验证,一条走采样统计验证,二者共同确认环境与线路均可用。

虚拟环境 qiskit 1.2.4 / aer 0.15.1 导入自检 版本号 + 类可导入 QuantumCircuit 1 量子位 + H 门 Statevector 精确验证 线路副本:仅 H 门,无测量 期望振幅 [0.7071, 0.7071] 判读:两基态概率 ≈ 0.5 虚部为 0,实部 ≈ 0.7071 AerSimulator 采样验证 H 门 + measure → 经典位 shots = 4096 判读:'0' 与 '1' 各约 50% 允许统计涨落,非精确相等 双路一致 → 开发链路可用

结果判读与常见偏差

观察项正常表现异常表现与可能原因
版本导入qiskit 1.x、aer 0.1x 均打印成功ImportError:包未装或环境未激活
Statevector 振幅[0.7071, 0.7071],虚部 0[1, 0]:H 门未加或加错量子位
采样 counts'0' 与 '1' 各约 2048/4096单结果占 100%:测量映射错误或线路被误改
采样波动占比在 0.5 附近小幅浮动波动过大:shots 太少,可增至 8192 观察收敛

完成以上两步验证后,环境、线路构建、模拟器执行与结果读取四个环节均已跑通,后续即可在此基础上扩展多量子位与纠缠线路。