OpenQASM 3.0으로 노이즈 시뮬레이션
OpenQASM3으로 노이즈를 시뮬레이션하려면 pragma 명령을 사용하여 노이즈 연산자를 추가합니다. 예를 들어 이전에 제공된 GHZ 프로그램의 노이즈 있는 버전을 시뮬레이션하려면 다음 OpenQASM 프로그램을 제출할 수 있습니다.
// ghz.qasm // Prepare a GHZ state OPENQASM 3; qubit[3] q; bit[3] c; h q[0]; #pragma braket noise depolarizing(0.75) q[0] cnot q[0], q[1]; #pragma braket noise depolarizing(0.75) q[0] #pragma braket noise depolarizing(0.75) q[1] cnot q[1], q[2]; #pragma braket noise depolarizing(0.75) q[0] #pragma braket noise depolarizing(0.75) q[1] c = measure q;
지원되는 모든 pragma 노이즈 연산자에 대한 사양은 다음 목록에 나와 있습니다.
#pragma braket noise bit_flip(<float in [0,1/2]>) <qubit> #pragma braket noise phase_flip(<float in [0,1/2]>) <qubit> #pragma braket noise pauli_channel(<float>, <float>, <float>) <qubit> #pragma braket noise depolarizing(<float in [0,3/4]>) <qubit> #pragma braket noise two_qubit_depolarizing(<float in [0,15/16]>) <qubit>, <qubit> #pragma braket noise two_qubit_dephasing(<float in [0,3/4]>) <qubit>, <qubit> #pragma braket noise amplitude_damping(<float in [0,1]>) <qubit> #pragma braket noise generalized_amplitude_damping(<float in [0,1]> <float in [0,1]>) <qubit> #pragma braket noise phase_damping(<float in [0,1]>) <qubit> #pragma braket noise kraus([[<complex m0_00>, ], ...], [[<complex m1_00>, ], ...], ...) <qubit>[, <qubit>] // maximum of 2 qubits and maximum of 4 matrices for 1 qubit, 16 for 2
Kraus 연산자
Kraus 연산자를 생성하려면 행렬 목록을 반복하여 행렬의 각 요소를 복소수 표현식으로 출력하면 됩니다.
Kraus 연산자를 사용할 때는 다음 사항에 유의하세요.
-
qubits의 수는 2를 초과할 수 없습니다. 스키마의 현재 정의
는 이 제한을 설정합니다. -
인수 목록의 길이는 8의 배수여야 합니다. 즉, 2x2 행렬로만 구성되어야 합니다.
-
총 길이는 22*num_qubits 행렬을 초과하지 않습니다. 즉, 1qubit의 경우 행렬이 4개이고 2qubits의 경우 행렬이 16개입니다.
-
제공된 모든 행렬은 완전 양성 트레이스 보존(Completely Positive Trace Preserving, CPTP)
입니다. -
Kraus 연산자와 그 전치 켤레의 곱은 단위 행렬에 합산되어야 합니다.