跳转至

让一个量子态连续经过 D-A-D 三段

先用 Digital 门准备量子态,再做 Analog 演化,最后用 Digital 门改变读出基。另做一次对照:让 Analog 段从新的基态开始。比较两组概率,就能看到状态是否连续传递会怎样影响结果。

先学量子门与相干性和全局 Analog 驱动。本地实验使用一个量子比特、4 个 Analog 时间步,每次运行采样 16 次。完成安装后,在仓库根目录执行。

预测两组概率

第一个 H 门准备 |+⟩ = (|0⟩ + |1⟩)/√2。Analog 段的失谐和相位都为零,因此 Hamiltonian 为 Ω(t) X / 2。脉冲面积为 (0.2 + 0.6) × 0.1 / 2 = 0.04 rad。

|+⟩ 是 X 的本征态,所以这个驱动只改变它的整体相位。最后一个 H 将它映射回 |0⟩,理想末端测量得到 0 的概率为 1。控制量在变化,并不意味着任意输入态的测量概率都会变化。

对照程序省略制备 H,让 Analog 段接收 |0⟩。绕 X 轴旋转后,X 的期望值仍为零;最后的 H 把 X 基测量转成 Z 基测量。因此对照程序的两种结果各有 1/2 的概率。

先组合各段,再做测量

"""让 Digital-Analog-Digital 三个 block 在同一个量子态上连续运行。

程序只使用公开 API 构建两类 payload,再交给 ``HybridProgram`` 组合。运行后请查看
block-state chain:前一个 block 的输出 hash 应成为下一个 block 的输入 hash。
固定 seed 和小规模 workload 使示例可离线复现。
"""

from __future__ import annotations

import json

from cascaqit import (
    AHSProgram,
    AtomRegister,
    Circuit,
    HybridProgram,
    LocalBackend,
    Waveform,
)


def main() -> None:
    """构建、执行并检查一个最小共享状态实验。"""
    # H 门准备的叠加态会传给后续 Analog 演化。
    prepare = Circuit(1, program_id="lesson.hybrid.beginner.prepare").h(0)

    # 全局驱动随时间线性变化,方向始终沿 X。
    evolve = AHSProgram(
        AtomRegister.line(count=1, spacing=5.0),
        program_id="lesson.hybrid.beginner.evolve",
    ).drive(
        rabi=Waveform.linear(0.2, 0.6, duration=0.1),
        detuning=Waveform.constant(0.0, duration=0.1),
        phase=0.0,
    )

    # 最后一个 H 门改变读出基;测量放在整个程序末尾。
    program = (
        HybridProgram("lesson.hybrid.beginner")
        .digital("prepare", prepare)
        .analog("evolve", evolve)
        .digital("readout", Circuit(1).h(0))
        .measure_all()
    )
    result = LocalBackend(analog_time_steps=4).run(program, shots=16, seed=101).result()
    transitions = result.state_transitions()
    reset_program = (
        HybridProgram("lesson.hybrid.reset-control")
        .analog("evolve", evolve)
        .digital("readout", Circuit(1).h(0))
        .measure_all()
    )
    reset_result = (
        LocalBackend(analog_time_steps=4)
        .run(reset_program, shots=16, seed=101)
        .result()
    )

    payload = {
        "track": "hybrid_researcher",
        "level": "beginner",
        "lesson": "first_shared_state",
        "facts": {
            "block_kinds": [item.program_kind for item in transitions],
            "state_continuous": all(
                left.output_state_hash == right.input_state_hash
                for left, right in zip(transitions, transitions[1:])
            ),
            "probabilities": result.probabilities,
            "reset_control_probabilities": reset_result.probabilities,
            "counts_total": sum(result.counts.values()),
            "program_hash_present": len(result.program_hash) == 64,
        },
        "boundaries": {
            "hardware_execution": False,
            "cloud_execution": False,
            "network_accessed": False,
            "credentials_loaded": False,
        },
    }
    print(json.dumps(payload, sort_keys=True))


if __name__ == "__main__":
    main()

下载完整脚本

python3 examples/user/tracks/hybrid_researcher/01_beginner_first_shared_state_zh.py

digital("prepare", ...)、analog("evolve", ...) 和 digital("readout", ...) 按顺序加入操作。两个子程序都没有在中途测量;measure_all() 放在 Hybrid 程序最后。

每次单独调用 LocalBackend.run() 都是在提交一次独立实验。先运行线路,再单独提交 Analog 程序,不会自动把线路末态传过去。连续执行应写在同一个 HybridProgram 中。

{
  "boundaries": {
    "cloud_execution": false,
    "credentials_loaded": false,
    "hardware_execution": false,
    "network_accessed": false
  },
  "facts": {
    "block_kinds": [
      "digital",
      "analog",
      "digital"
    ],
    "counts_total": 16,
    "probabilities": {
      "0": 1.0,
      "1": 0.0
    },
    "program_hash_present": true,
    "reset_control_probabilities": {
      "0": 0.5,
      "1": 0.5
    },
    "state_continuous": true
  },
  "lesson": "first_shared_state",
  "level": "beginner",
  "track": "hybrid_researcher"
}

block_kinds 应为 ["digital", "analog", "digital"]。state_continuous 检查前一段记录的输出状态是否成为后一段的输入。这能核对执行记录;两组概率与物理预测的比较,则提供了另一项数值检查。

查看 probabilities 和 reset_control_probabilities,它们应在数值精度范围内符合上面的预测。D-A-D 程序的计数总和为 16。对照程序同样采样 16 次,但不必恰好各得到 8 次。在本地副本中加入 print(reset_result.counts) 可查看它的计数。

换一个读出基或初态

  1. 两个程序都去掉最后的 H 门。先预测 Z 基概率,再运行。
  2. 保留三段程序,把 Analog 波形的起止值改为 0.4 和 1.2 rad/us。D-A-D 的理想概率会变吗?原读出基下,对照程序会怎样?
  3. 把制备 H 换成 X,保留原 Analog 驱动,去掉读出 H。用脉冲面积预测 P(1)。
核对思路

去掉最后的 H 后,连续运行在 Z 基仍然各占一半;从基态重启的对照则有 P(1) = sin²(0.04/2),约为 0.000400。X 驱动面积翻倍仍只改变 |+⟩ 的整体相位,所以完整 D-A-D 程序仍输出 0,A-D 对照仍各占一半。从 |1⟩ 开始,读出前则有 P(1) = cos²(0.04/2),约为 0.999600。这些公式针对零失谐、零相位的单量子比特,不能原样套到相互作用阵列中。

如果结果与预测不同,先检查各段顺序、测量位置,以及每次独立提交时的初态。状态哈希连续不能单独验证 Hamiltonian、单位或目标可观测量是否正确。共享模拟状态解释了状态表示;接着沿 Hybrid 路线学习统一参数、扫描和噪声。

相关概念:共享模拟状态。

English

SDK 1.0.8a · `6eff6362`