本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用脈衝存取原生閘道
研究人員通常需要確切知道特定 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-3") calibrations = device.gate_calibrations print(f"Downloaded {len(calibrations)} calibrations.")
注意
硬體供應商會定期校正 QPU,通常每天不只一次。Braket SDK 可讓您取得最新的閘道校正。
device.refresh_gate_calibrations()
若要擷取指定的原生閘道,例如 RX 或 XY 閘道,您需要傳遞Gate
物件和感興趣的 qubit。例如,您可以檢查在 0 上套用的 RX(π/2) qubit 的脈衝實作。
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) 和 0 qubit 的所有校正。
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)