Skip to main content
IBM Quantum Platform

EfficientSU2

class qiskit.circuit.library.EfficientSU2(num_qubits=None, su2_gates=None, entanglement='reverse_linear', reps=3, skip_unentangled_qubits=False, skip_final_rotation_layer=False, parameter_prefix='θ', insert_barriers=False, initial_state=None, name='EfficientSU2', flatten=None)

GitHub

Bases : TwoLocal

Le circuit SU(2) 2-local efficace sur le plan matériel.

Le circuit EfficientSU2 se compose de couches d'opérations sur un seul qubit, réparties entre les enchevêtrements SU(2) et CXCX. Il s'agit d'un modèle heuristique qui peut être utilisé pour préparer les fonctions d'onde d'essai pour les algorithmes quantiques variationnels ou les circuits de classification pour l'apprentissage automatique.

SU(2) est un groupe unitaire spécial de degré 2, dont les éléments sont des matrices unitaires 2×22 \times 2 de déterminant 1, telles que les portes de rotation de Pauli.

Sur 3 qubits et en utilisant les portes de Pauli YY et ZZ su2_gates comme portes de qubit unique, le circuit SU(2) efficace sur le plan matériel est représenté par :

┌──────────┐┌──────────┐ ░            ░       ░ ┌───────────┐┌───────────┐
┤ RY(θ[0]) ├┤ RZ(θ[3]) ├─░────────■───░─ ... ─░─┤ RY(θ[12]) ├┤ RZ(θ[15]) ├
├──────────┤├──────────┤ ░      ┌─┴─┐ ░       ░ ├───────────┤├───────────┤
┤ RY(θ[1]) ├┤ RZ(θ[4]) ├─░───■──┤ X ├─░─ ... ─░─┤ RY(θ[13]) ├┤ RZ(θ[16]) ├
├──────────┤├──────────┤ ░ ┌─┴─┐└───┘ ░       ░ ├───────────┤├───────────┤
┤ RY(θ[2]) ├┤ RZ(θ[5]) ├─░─┤ X ├──────░─ ... ─░─┤ RY(θ[14]) ├┤ RZ(θ[17]) ├
└──────────┘└──────────┘ ░ └───┘      ░       ░ └───────────┘└───────────┘

Pour plus de détails sur les arguments et options possibles, tels que RealAmplitudes l'ignorance des qubits non intriqués, qui s'appliquent également ici, voir [...].

Exemples

>>> circuit = EfficientSU2(3, reps=1)
>>> print(circuit.decompose())
     ┌──────────┐┌──────────┐          ┌──────────┐┌──────────┐
q_0:RY(θ[0]) ├┤ RZ(θ[3]) ├──■────■──┤ RY(θ[6]) ├┤ RZ(θ[9]) ├─────────────
     ├──────────┤├──────────┤┌─┴─┐  │  └──────────┘├──────────┤┌───────────┐
q_1:RY(θ[1]) ├┤ RZ(θ[4]) ├┤ X ├──┼───────■──────┤ RY(θ[7]) ├┤ RZ(θ[10])
     ├──────────┤├──────────┤└───┘┌─┴─┐   ┌─┴─┐    ├──────────┤├───────────┤
q_2:RY(θ[2]) ├┤ RZ(θ[5]) ├─────┤ X ├───┤ X ├────┤ RY(θ[8]) ├┤ RZ(θ[11])
     └──────────┘└──────────┘     └───┘   └───┘    └──────────┘└───────────┘
>>> ansatz = EfficientSU2(4, su2_gates=['rx', 'y'], entanglement='circular', reps=1,
... flatten=True)
>>> qc = QuantumCircuit(4)  # create a circuit and append the RY variational form
>>> qc.compose(ansatz, inplace=True)
>>> qc.draw()
     ┌──────────┐┌───┐┌───┐     ┌──────────┐   ┌───┐
q_0:RX(θ[0]) ├┤ Y ├┤ X ├──■──┤ RX(θ[4]) ├───┤ Y ├─────────────────────
     ├──────────┤├───┤└─┬─┘┌─┴─┐└──────────┘┌──┴───┴───┐   ┌───┐
q_1:RX(θ[1]) ├┤ Y ├──┼──┤ X ├─────■──────┤ RX(θ[5]) ├───┤ Y ├─────────
     ├──────────┤├───┤  │  └───┘   ┌─┴─┐    └──────────┘┌──┴───┴───┐┌───┐
q_2:RX(θ[2]) ├┤ Y ├──┼──────────┤ X ├─────────■──────┤ RX(θ[6]) ├┤ Y ├
     ├──────────┤├───┤  │          └───┘       ┌─┴─┐    ├──────────┤├───┤
q_3:RX(θ[3]) ├┤ Y ├──■──────────────────────┤ X ├────┤ RX(θ[7]) ├┤ Y ├
     └──────────┘└───┘                         └───┘    └──────────┘└───┘
Voir aussi

La fonction efficient_su2() construit un circuit fonctionnellement équivalent, mais plus rapidement.

Déclassé depuis la version 2.1

La classe qiskit.circuit.library.n_local.efficient_su2.EfficientSU2 est obsolète depuis Qiskit 2.1. Elle sera supprimée à Qiskit 3.0. Utilisez plutôt la fonction qiskit.circuit.library.efficient_su2.

Paramètres

  • num_qubits (int | None) – Le nombre de qubits du circuit EfficientSU2.
  • reps (int) – Spécifie la fréquence de répétition de la structure d'une couche de rotation suivie d'une couche d'enchevêtrement.
  • su2_gates (str |type |qiskit.circuit.Instruction |QuantumCircuit |list[str |type |qiskit.circuit.Instruction |QuantumCircuit] | None) – Les portes SU(2) à un qubit à utiliser dans les couches de portes à un qubit. Si une seule porte est disponible, celle-ci est appliquée à chaque qubit. Si une liste de portes est fournie, toutes ces portes sont appliquées à chaque qubit dans l'ordre indiqué.
  • entanglement (str |list[list[int]] | Callable[[int], list[int]]) – Spécifie la structure de l'enchevêtrement. Il peut s'agir d'une chaîne ("full", "linear", "reverse_linear", "pairwise", "circular" ou "sca"), d'une liste de paires d'entiers spécifiant les indices des qubits intriqués l'un avec l'autre, ou d'un appel renvoyant une telle liste avec l'indice de la couche d'intrication. La valeur par défaut est l'enchevêtrement "reverse_linear". Notez que l'enchevêtrement "linéaire inversé" fournit la même unité que l'unité "complète" avec moins de portes d'enchevêtrement. Voir la section Exemples de TwoLocal pour plus de détails.
  • initial_state (QuantumCircuit | None) – Un objet de type « QuantumCircuit » à ajouter au début du circuit.
  • skip_unentangled_qubits (bool) – Si True, les portes de qubit unique ne sont appliquées qu'aux qubits intriqués avec un autre qubit. Si False, les portes de qubit unique sont appliquées à chaque qubit dans l'Ansatz. La valeur par défaut est false.
  • skip_final_rotation_layer (bool) – Si False, une couche de rotation est ajoutée à la fin de l'ansatz. Si True, aucune couche de rotation n'est ajoutée.
  • parameter_prefix (str) – Les portes paramétrées nécessitent la définition d'un paramètre, pour lequel nous utilisons ParameterVector.
  • insert_barriers (bool) – Si Vrai, des barrières sont insérées entre chaque couche. Si False, aucune barrière n'est insérée.
  • flatten (bool | None) – Réglez ce paramètre sur True pour obtenir un circuit plat au lieu de l'imbriquer dans plusieurs couches d'objets de porte. Par défaut, le contenu du circuit de sortie sera enveloppé dans des objets imbriqués pour une visualisation plus propre. Cependant, si vous utilisez ce circuit pour autre chose que la visualisation, il est fortement recommandé de mettre ce drapeau à True afin d'éviter une surcharge de performance importante pour la liaison des paramètres.
  • name (str) – Nom du circuit.

Attributs

parameter_bounds

Renvoie les limites du paramètre.

Retours

Les limites du paramètre.

name

Type : str

Un nom lisible par l'homme pour le circuit.

Exemple

from qiskit import QuantumCircuit

qc = QuantumCircuit(2, 2, name="my_circuit")
print(qc.name)
my_circuit
Cette page a-t-elle été utile ?
Signaler un bogue, une coquille ou proposer du contenu sur GitHub.