python - 如何在 Cirq 电路中获取经典输入
问题描述
我是量子计算的新手,在阅读Nielsen 和 Chuang 的Quantum Computation 和 Quantum Information时一直在玩Cirq 。文中第一个有趣的电路之一与量子隐形传态有关,我正试图在 Cirq 中实现它。如前所述,构建 EPR 对和大部分电路非常简单。
然而,Bob 需要根据 Alice 的 EPR 量子位和她的另一个量子位(在文本中标记为ψ )的测量值来“修复”他的 EPR 量子位。我不清楚将测量中的经典位合并到电路中的最佳方法。
到目前为止,我所做的是在没有修复的情况下构建电路,运行模拟,然后根据测量的值附加适当的X
和/或门。Z
代码看起来像
import cirq
psi_qubit = cirq.GridQubit(0, 0)
epr_alice = cirq.GridQubit(0, 1)
epr_bob = cirq.GridQubit(0, 2)
circuit = cirq.Circuit()
# Generate the EPR pair
circuit.append(
[
cirq.H(epr_alice),
cirq.CNOT(epr_alice, epr_bob)
]
)
# Create the teleporation circuit without the fix up on Bob's EPR pair
circuit.append(
[
cirq.CNOT(psi_qubit, epr_alice),
cirq.H(psi_qubit),
cirq.measure(psi_qubit, epr_alice)
]
)
simulator = cirq.Simulator()
result = simulator.run(circuit)
measurement = result.measurements[f"{psi_qubit},{epr_alice}"][0]
if measurement[1]:
circuit.append([cirq.X(epr_bob)])
if measurement[0]:
circuit.append([cirq.Z(epr_bob)])
circuit.append(cirq.measure(epr_bob))
print(circuit)
印刷电路看起来像
(0, 0): ───────────@───H───M───────────
│ │
(0, 1): ───H───@───X───────M───────────
│
(0, 2): ───────X───────────────Z───M───
虽然该电路与文本中打印的内容一致,用于 Alice 的 EPR 量子比特测量|0>
和她的其他量子比特测量的情况|1>
,但不能保证用完整的电路再次运行模拟对 Alice 的量子比特产生相同的测量结果,因此修复部分将不正确。
将测量值反馈回电路的最佳方法是什么?
解决方案
Cirq 故意不具备此功能,因为大多数硬件不具备此功能,而 Cirq 的设计目标之一是由硬件功能驱动。
您可以通过插入 CNOT 和 CZ 操作以及它们对测量的量子位的控制来解决遗漏问题,并假装它们是经典控制的。
推荐阅读
- django - 如何在 Django 视图中存储全局变量
- javascript - 了解 express 是什么以及如何使用它
- javascript - CSS 过渡,同时将对象保持在中心视口中
- reactjs - Chrome 审计:第三方代码中的 Datacamp
- button - 谷歌表格:点击按钮取消突出显示行,突出显示下一行,并使用日期和时间按钮更新单元格被点击
- python-3.x - Python str.replace 问题:每次替换字符串后都会插入换行符
- ios - AppCenter 设备测试 - 测试用例方法失败
- javascript - 如何将关联的标签插入到我的 json 列表中
- c# - 在 MongoDB 驱动程序中按 boolean==false 过滤
- c++ - strcmp 为相等的字符序列返回 false