设计一个可复现的小实验¶
运用噪声与精度中的知识,回答一个具体问题:旋转角怎样影响测到 1 的概率?运行前选定三个角度,保持线路结构与采样预算相同,每个角度使用四组不同种子运行。
每个参数点都保存参数值和全部重复结果。只挑一次最好看的输出,不能代表整个实验。
"""Repeat a small parameter scan and keep each seed and observed frequency."""
from __future__ import annotations
import json
from math import sin, sqrt
from statistics import mean, stdev
import cascaqit
from cascaqit import Circuit
def experiment() -> dict[str, object]:
shots, repeats = 256, 4
rows = []
for index, theta in enumerate((0.4, 0.8, 1.2)):
seeds = [101 + 10 * index + repeat for repeat in range(repeats)]
frequencies = []
for seed in seeds:
result = Circuit(1).ry(theta, 0).measure_all().run(shots=shots, seed=seed)
frequencies.append(result.counts.get("1", 0) / shots)
rows.append(
{
"theta_rad": theta,
"seeds": seeds,
"frequencies": frequencies,
"mean_frequency": mean(frequencies),
"standard_error_across_repeats": stdev(frequencies) / sqrt(repeats),
"ideal_probability": sin(theta / 2) ** 2,
}
)
return {
"sdk_version": cascaqit.__version__,
"shots_per_run": shots,
"repeats": repeats,
"total_shots": len(rows) * shots * repeats,
"points": rows,
}
if __name__ == "__main__":
print(json.dumps(experiment(), sort_keys=True))
python examples/learning/foundations/experimental_design.py
{
"points": [
{
"frequencies": [
0.0390625,
0.04296875,
0.0390625,
0.02734375
],
"ideal_probability": 0.039469502998557456,
"mean_frequency": 0.037109375,
"seeds": [
101,
102,
103,
104
],
"standard_error_across_repeats": 0.0033829117335329633,
"theta_rad": 0.4
},
{
"frequencies": [
0.16015625,
0.15625,
0.16796875,
0.1875
],
"ideal_probability": 0.1516466453264173,
"mean_frequency": 0.16796875,
"seeds": [
111,
112,
113,
114
],
"standard_error_across_repeats": 0.006951222820332885,
"theta_rad": 0.8
},
{
"frequencies": [
0.32421875,
0.33203125,
0.28515625,
0.30078125
],
"ideal_probability": 0.31882112276166324,
"mean_frequency": 0.310546875,
"seeds": [
121,
122,
123,
124
],
"standard_error_across_repeats": 0.010756973725168168,
"theta_rad": 1.2
}
],
"repeats": 4,
"sdk_version": "1.0.8a",
"shots_per_run": 256,
"total_shots": 3072
}
平均频率估计的是 sin²(θ/2)。脚本把四次频率的样本标准差除以 sqrt(4),估计均值的标准误。只有四次重复时,不确定度估计本身也会波动;打印的数值不是自动得到的 95% 置信区间。全部采样成本仍要计算:三个参数点 × 四次运行 × 256 shots = 3,072 shots。
这里的理想概率是简单线路的独立解析对照,不是实验测量值。解释差异时,也要说明基准及其假设。
先确定怎样公平比较¶
尝试另一种方法前,决定固定什么预算:shots、总目标求值次数、运行时间,还是其他资源。这些标准不等价。相同迭代次数不一定意味着相同后端成本,尤其是梯度算法或重复采样算法。
练习:增加 θ = 1.6,并使用一组新 seed。需要额外多少次采样?如果只运行一次就看到某个角度“更好”,在认为差异可靠之前,还应该报告什么?
答案
四次新运行需要 1,024 shots。报告原始运行、均值、不确定度、比较预算,以及“更好”的具体含义。重复预先确定的比较,不要只等到出现有利结果就停止。以后若使用配对随机输入,应按配对数据分析差值,不能当成相互独立的两组运行。
保存自己的实验记录,再选择 Digital、Analog 或优化路线。
相关概念:可复现性。