Simulación de ruido con OpenQASM 3.0
A fin de simular ruido con OpenQASM3, utilice instrucciones de pragma para añadir operadores de ruido. Por ejemplo, para simular la versión ruidosa del programa GHZ proporcionada anteriormente, puede enviar el siguiente programa 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;
Las especificaciones de todos los operadores de ruido pragma admitidos se proporcionan en la siguiente lista.
#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
Operador de Kraus
Para generar un operador de Kraus, puede recorrer en iteración una lista de matrices e imprimir cada elemento de la matriz como una expresión compleja.
Cuando utilice operadores de Kraus, recuerde lo siguiente:
-
El número de qubits no debe ser superior a 2. La definición actual de los esquemas
establece este límite. -
La longitud de la lista de argumentos debe ser un múltiplo de 8. Esto significa que debe estar compuesta únicamente por matrices de 2x2.
-
La longitud total no supera las matrices de 22*num_qubits. Esto significa 4 matrices para 1 qubit y 16 para 2 qubits.
-
Todas las matrices suministradas tienen conservación de traza completamente positiva (CPTP)
. -
El producto de los operadores de Kraus con sus conjugados de transposición debe sumarse a una matriz de identidad.