from qiskit.circuit.random import random_circuit
circ_r1 = random_circuit(num_qubits=1, depth=5)
print('depth =', circ_r1.depth())
circ_r1.draw(output='mpl')
depth = 5
circ_r2 = random_circuit(num_qubits=5, depth=5)
print('depth =', circ_r2.depth())
circ_r2.draw(output='mpl')
depth = 5
circ_r3 = random_circuit(num_qubits=1, depth=10)
print('depth =', circ_r3.depth())
circ_r3.draw(output='mpl')
depth = 10
circ_r4 = random_circuit(num_qubits=5, depth=10)
print('depth =', circ_r4.depth())
circ_r4.draw(output='mpl')
depth = 10
Il est difficile de comprendre intuitivement la valeur de profondeur lorsque le nombre de bits quantiques (num_qubits) est multiple, mais si le nombre de bits quantiques est réglé sur 1, le nombre de profondeurs sera le même que le nombre de portes.
depth``` en QuantumVolume (QV)profondeur '' est spécifiée lors de la génération du circuit QV, mais la signification est différente de la
profondeur '' d'un circuit normal.from qiskit.circuit.library import QuantumVolume
circ_q1 = QuantumVolume(num_qubits=5, depth=5)
print('depth =', circ_q1.depth())
circ_q1.draw('mpl')
depth = 1
La figure ci-dessus montre les différentes portes combinées en une seule.
Si vous mesurez la `profondeur` '' telle qu'elle est, ce sera" 1 "comme il en a l'air. Je ne suis pas sûr que ce soit le cas, alors vérifiez-le par
décomposer '' (décomposition = expansion du circuit).
circ_q1_d1 = circ_q1.decompose()
print('depth =', circ_q1_d1.depth())
circ_q1_d1.draw('mpl')
depth = 5
Bien qu'il ait été déployé, plusieurs portes sont toujours en cours de montage. C'est un peu difficile à comprendre, mais comme les portes de la deuxième rangée (su4_83) et les portes de la troisième rangée (su4_767) fonctionnent sur des bits quantiques différents, elles peuvent être comptées comme "1" à l'avant.
Le gif du document suivant est facile à comprendre. Document Qiskit --circuit * Développez les propriétés du circuit quantique et vous trouverez un gif.
À propos, `` su4 '' est la porte d'une matrice unitaire aléatoire 4x4.
À partir de là, `` décomposez '' davantage pour en faire une unité de porte normale.
circ_q1_d2 = circ_q1_d1.decompose()
print('depth =', circ_q1_d2.depth())
circ_q1_d2.draw('mpl')
depth = 35
On voit que su4 est composé de portes CNOT et U3. De plus, lorsque la valeur de profondeur pour QV est de 5, on peut voir que la valeur de profondeur dans le circuit normal est de 35.
Cette fois, réduisez le nombre de bits quantiques (5 → 3) et vérifiez.
circ_q2 = QuantumVolume(num_qubits=3, depth=5)
print('depth =', circ_q2.depth())
circ_q2.draw('mpl')
depth = 1
circ_q2_d1 = circ_q2.decompose()
print('depth =', circ_q2_d1.depth())
circ_q2_d1.draw('mpl')
depth = 5
circ_q2_d2 = circ_q2_d1.decompose()
print('depth =', circ_q2_d2.depth())
circ_q2_d2.draw('mpl')
depth = 35
On peut voir que lorsque la valeur de profondeur de QV est de 5 quel que soit le nombre de bits quantiques, la valeur de profondeur du circuit normal est de 35.
Réduisez encore la valeur de profondeur (5 → 3) et vérifiez.
circ_q3 = QuantumVolume(num_qubits=3, depth=3)
print('depth =', circ_q3.depth())
circ_q3.draw('mpl')
depth = 1
circ_q3_d1 = circ_q3.decompose()
print('depth =', circ_q3_d1.depth())
circ_q3_d1.draw('mpl')
depth = 3
circ_q3_d2 = circ_q3_d1.decompose()
print('depth =', circ_q3_d2.depth())
circ_q3_d2.draw('mpl')
depth = 21
On peut voir que lorsque la valeur de profondeur de QV change, la valeur de profondeur du circuit normal change également.
import qiskit.ignis.verification.quantum_volume as qv
qubit_lists = [[0,1,3,5,7]]
ntrials = 50
qv_circs, qv_circs_nomeas = qv.qv_circuits(qubit_lists, ntrials)
Il existe deux types de circuits générés, l'un avec mesure ( qv_circs '') et l'autre sans mesure (
qv_circs_nomeas '').
Tout d'abord, vérifiez le circuit avec la mesure.
print("depth =", qv_circs[0][0].decompose().depth())
qv_circs[0][0].decompose().draw('mpl')
depth = 36
La valeur de profondeur est de 36. Lorsque la valeur de profondeur de QV est de 5, la valeur de profondeur du circuit normal est de 35, mais elle est de +1 en raison de l'ajout de l'opération de mesure.
Ensuite, vérifiez le circuit sans mesure.
print("depth =", qv_circs_nomeas[0][0].decompose().depth())
qv_circs_nomeas[0][0].decompose().draw('mpl')
depth = 36
La valeur de profondeur est également de 36, mais comme la dernière couche est une porte U3 pratiquement sans opération, elle peut être considérée comme une valeur de profondeur de 35.
Ensuite, vérifions la profondeur après avoir converti le circuit sans mesure avec un transpileur.
import qiskit.compiler.transpile
qv_circs_nomeas[0] = qiskit.compiler.transpile(qv_circs_nomeas[0], basis_gates=['u1','u2','u3','cx'])
print("depth =", qv_circs_nomeas[0].depth())
qv_circs_nomeas[0].draw('mpl')
depth = 31
La valeur de profondeur était de 31. C'est un résultat naturel car le nombre de portes a changé en fonction du transpileur, mais on peut voir que la valeur de profondeur du circuit normal n'est pas directement liée à la mesure de la valeur QV.
Reference
Recommended Posts