本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用脉冲访问原生门
研究人员通常需要确切地知道特定对象所支持的原生门QPU是如何实现为脉冲的。硬件提供商仔细校准脉冲序列,但是访问脉冲序列为研究人员提供了设计更好的门或探索缓解错误的协议的机会,例如通过拉伸特定门的脉冲来进行零噪声外推。
Amazon Braket 支持从 Rigetti 以编程方式访问本机门。
import math from braket.aws import AwsDevice from braket.circuits import Circuit, GateCalibrations, QubitSet from braket.circuits.gates import Rx device = AwsDevice("arn:aws:braket:us-west-1::device/qpu/rigetti/Ankaa-2") calibrations = device.gate_calibrations print(f"Downloaded {len(calibrations)} calibrations.")
注意
硬件提供商会定期校准QPU,通常每天校准不止一次。Braket SDK 使您能够获得最新的栅极校准。
device.refresh_gate_calibrations()
要检索给定的原生门,例如 RX 或 XY 门,你需要传递感兴趣的Gate
物体和量子比特。例如,您可以检查应用于 RX (π/2) 的脉冲实现 qubit 0.
rx_pi_2_q0 = (Rx(math.pi/2), QubitSet(0)) pulse_sequence_rx_pi_2_q0 = calibrations.pulse_sequences[rx_pi_2_q0]
您可以使用该filter
函数创建一组经过筛选的校准。您传递一个大门列表或一个列表QubitSet
。以下代码创建了两个集合,其中包含 RX (π/2) 和 for 的所有校准 qubit 0.
rx_calibrations = calibrations.filter(gates=[Rx(math.pi/2)]) q0_calibrations = calibrations.filter(qubits=QubitSet([0])
现在,您可以通过附加自定义校准集来提供或修改原生门的操作。例如,考虑以下电路。
bell_circuit = ( Circuit() .rx(0,math.pi/2) .rx(1,math.pi/2) .iswap(0,1) .rx(1,-math.pi/2) )
你可以通过将PulseSequence
对象字典传递给gate_definitions
关键字参数qubit 0
来运行它,为rx
门开启自定义门校准。你可以根据GateCalibrations
对象的属性pulse_sequences
构造字典。所有未指定的门都被量子硬件提供商的脉冲校准所取代。
nb_shots = 50 custom_calibration = GateCalibrations({rx_pi_2_q0: pulse_sequence_rx_pi_2_q0}) task=device.run(bell_circuit, gate_definitions=custom_calibration.pulse_sequences, shots=nb_shots)