给不同原子设置不同失谐¶
用一条局域波形配合两个不同的位点权重。读取绑定值,检查目标网格上的调整,再确认实际执行的是哪个程序。先完成波形设计;这个双原子本地例子使用 120 个时间步和 16 次采样。
局域失谐向 Hamiltonian 加入 −Δ_local(t) Σ_i w_i n_i。包含全局失谐时,对这里的单个局域项,位点 i 的总失谐为 Δ_global(t) + w_i Δ_local(t)。权重无量纲,用来缩放失谐,不是“选中某个原子的概率”。
这里 Δ_local 从零升到 0.8 rad/us,q0 的权重为 1,q1 为 0.25。先预测末端两个位点的失谐。再解释:对于计算基初态,为什么仅有这个对角控制不能激发原子?本实验中的状态跃迁由全局 Rabi 驱动提供。
分开指定时间和空间¶
"""通过静态 site pattern 施加随时间变化的 local detuning。
Waveform 描述 detuning 随时间的变化,``SitePattern`` 提供与 register 对齐的无量纲
权重。两者保持为独立对象,并用显式支持 local AHS control 的 Target 校验。
"""
from __future__ import annotations
import json
from cascaqit import (
AHSProgram,
AtomRegister,
MockNeutralAtomTarget,
SitePattern,
Waveform,
)
def main() -> None:
"""绑定、校验、离散化并运行一个 addressed detuning term。"""
program = AHSProgram(
AtomRegister.line(count=2, spacing=5.0),
program_id="lesson.experimentalist.detuning",
)
delta = program.parameter("delta", default=0.8, lower_bound=-2.0, upper_bound=2.0)
program.drive(
rabi=Waveform.constant(0.6, duration=0.3),
detuning=Waveform.constant(0.0, duration=0.3),
phase=0.0,
).local_detuning(
waveform=Waveform.linear(0.0, delta, duration=0.3),
pattern=SitePattern.from_mapping({"q0": 1.0, "q1": 0.25}),
).measure()
bound = program.bind({})
target = MockNeutralAtomTarget.local_ahs_v0_1()
validated = bound.validate(target, shots=16)
discretized, report = validated.discretize(target)
result = bound.run(shots=16, seed=303, time_steps=120)
term = discretized.program_ir.hamiltonian.local_detuning_terms[0]
payload = {
"track": "quantum_experimentalist",
"level": "applied",
"lesson": "local_detuning",
"facts": {
"site_ids": list(term.addressing.site_ids),
"weights": list(term.addressing.weights[0]),
"addressing_frame_count": term.addressing.frame_count,
"waveform_values": list(term.waveform.values or ()),
"discretized_paths": [
item.path
for item in report.field_reports
if "local_detuning" in item.path
],
"validation_errors": [
item.code for item in validated.diagnostics if item.severity == "error"
],
"counts_total": sum(result.counts.values()),
},
"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/quantum_experimentalist/03_applied_local_detuning_zh.py
bind({}) 使用 delta 的默认值,不是保留未解析参数。SitePattern.from_mapping 为每个填充位点提供权重,SDK 再按寄存器顺序排列;字典插入顺序不决定物理对应关系。
{
"boundaries": {
"cloud_execution": false,
"credentials_loaded": false,
"hardware_execution": false,
"network_accessed": false
},
"facts": {
"addressing_frame_count": 1,
"counts_total": 16,
"discretized_paths": [],
"site_ids": [
"q0",
"q1"
],
"validation_errors": [],
"waveform_values": [
0.0,
0.8
],
"weights": [
1.0,
0.25
]
},
"lesson": "local_detuning",
"level": "applied",
"track": "quantum_experimentalist"
}
末端局域失谐分别为 0.8 和 0.2 rad/us。addressing_frame_count = 1 表示空间权重不随时间变化,即使波形本身在变化。默认数值已经位于模拟目标网格上,因此 discretized_paths 为空。
脚本分成了两条处理路径:查看的是 discretized.program_ir,但 bound.run(...) 执行原始绑定程序。默认值恰好在网格上,这个区别不影响此处解释。如果改成网格外的数值,就不能把这些 counts 描述成调整后程序的执行结果。要执行调整后的程序,可以使用 LocalAhsSimulator(target=target).run(discretized, shots=16),见 Analog 指南。
未提供 target 时,辅助入口 bound.run() 会选择支持局域控制的模拟目标;显式传入保守目标时不会自动替换。解释双原子概率分布时,仍需核对几何以及实际采用的阻塞模型。
一次修改一个控制条件¶
- 对调两个权重,预测每个位点末端失谐,并检查排列后的数组。
- 将默认值改为
0.8004,比较绑定波形、输出中的waveform_values和discretized_paths。不修改运行语句时,执行的是哪个程序? - 从 pattern 中去掉
q1,再尝试大于 1 的权重。阅读输入错误,不要给无效配置赋予物理含义。
核对思路
权重对调后,q0 为 0.2,q1 为 0.8 rad/us。默认值为 0.8004 时,最近网格投影把波形终值改为 0.8 并记录字段路径,原始绑定波形仍为 0.8004。原来的 bound.run() 仍运行后者。完整 SitePattern 要覆盖每个填充位点,权重在 [0, 1] 内,并至少有一个非零权重。如果想表达稀疏的二值选择,可以使用 SiteMask。
仅凭十六次采样中的小差异,不能确定某个位点的响应。应查看概率或指定可观测量,并预先决定采样预算再做对照。下一课局域 Rabi 控制用脉冲直接驱动选定原子;局域失谐指南介绍多个叠加项和动态掩码。