环境搭建 · 十分钟跑通第一个量子程序

装好 Python + Qiskit,写一个把量子比特置于叠加态、测量一千次的「Hello Quantum」,看到大约五五开的结果。这一章带你搭好本专栏全程要用的工具,并读懂一个量子程序的骨架。

作者 David更新于 第 1 篇(共 15 篇)

环境搭建 · 十分钟跑通第一个量子程序

学任何东西,先让它跑起来。这一章我们装好工具,写出第一个量子程序,看到它真实的输出——之后每一章的概念,都会是「照着敲、看着结果」。

装什么

我们用 Qiskit——IBM 开源的量子计算框架,Python 生态里最主流、文档最全的一个。装它只要一行:

pip install qiskit qiskit-aer
  • qiskit:核心库,用来搭量子线路(写代码描述「对哪个 qubit 施加什么门」)。
  • qiskit-aer:高性能模拟器。在你还没有量子计算机的时候(你现在肯定没有),用它在普通电脑上模拟量子程序的运行——这也是学习和调试量子算法最主要的方式。

本专栏以 Qiskit 1.x / 2.x(2024 年后的版本)为准。 Qiskit 1.0 对 API 做过一次大改(比如删掉了老教程里常见的 execute 函数),网上很多旧代码跑不了。如果你照着别处的老代码报错,先 pip show qiskit 看看版本,再对照官方文档。本专栏的代码都用新 API。除了 Qiskit,同类框架还有 Google 的 Cirq、PennyLane、微软的 Q#——学会一个,其余触类旁通,因为它们描述的是同一套量子计算规则。

Hello Quantum

第一个程序,我们让一个量子比特进入「既是 0 又是 1」的叠加态,然后测量它一千次:

from qiskit import QuantumCircuit, transpile
from qiskit_aer import AerSimulator

# 1 个量子比特 + 1 个经典比特(用来存测量结果)
qc = QuantumCircuit(1, 1)
qc.h(0)             # 对 qubit 0 施加 H 门 → 进入叠加态
qc.measure(0, 0)    # 测量 qubit 0,结果存进经典比特 0

# 在模拟器上跑 1000 次
sim = AerSimulator()
result = sim.run(transpile(qc, sim), shots=1000).result()
print(result.get_counts())

跑一下,你会看到类似这样的输出:

{'0': 508, '1': 492}

大约一半 0、一半 1。 这就是量子叠加最直观的样子:测量之前,这个 qubit 既不是确定的 0、也不是确定的 1;每次测量,它以约 50% 的概率给你一个 0 或一个 1。经典的比特绝不会这样——它要么是 0、要么是 1,测一千次结果全一样。

看看这条线路长什么样

Qiskit 能把线路画出来,print(qc.draw()) 得到一张 ASCII 图:

     ┌───┐┌─┐
  q: ┤ H ├┤M├
     └───┘└╥┘
c: 1/══════╩═
           0

从左到右就是时间:qubit q 先过一个 H 门,再被测量(M),结果落到经典位 c。量子线路(quantum circuit)就是量子程序的「源代码」——一串作用在 qubit 上的操作,从左到右依次执行。之后我们写的每个程序,本质都是在搭这样一条线路。

一个量子程序的骨架

拆开上面的代码,任何量子程序都是这四步:

图表加载中…
  1. 建线路:声明要用几个 qubit(和存结果的经典位)。
  2. 加门:施加一系列量子门(下一站的主题),把 qubit 变到你要的状态。
  3. 测量:把量子状态「读」成经典的 0/1(测量很特殊,后面专门讲)。
  4. 运行:交给模拟器(或真机)跑很多次(shots),因为结果是概率的,要靠多次统计才看得出规律。

注意第 4 步的 shots=1000——为什么要跑一千次? 因为量子测量的结果是随机的,跑一次只能得到一个 0 或一个 1,看不出「约五五开」这个规律。必须重复很多次、统计频率,才能观察到量子态的概率分布。这是量子编程和经典编程一个根本的体感差异:你运行的不是一次确定的计算,而是一个概率实验,要靠采样去还原它。 测量那章 会把这件事讲透。

小结与下一章

工具装好了(qiskit + qiskit-aer),第一个量子程序也跑通了:一个 H 门造出叠加,测量一千次得到约五五开。你也认识了量子程序的骨架——建线路 → 加门 → 测量 → 采样统计。

但我们还没真正搞懂:那个被 H 门「置于叠加」的量子比特,内部到底是个什么状态?它和经典 bit 的差别,用代码怎么看见?下一章,我们把 qubit 的状态直接打印出来,一探究竟。👉 量子比特:把 qubit 的状态打印出来看。

参考文献

本页目录