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

El circuito hardware eficiente SU(2) 2-local.

El circuito EfficientSU2 se compone de capas de operaciones de qubit único atravesadas por enredos SU(2) y CXCX. Se trata de un patrón heurístico que puede utilizarse para preparar funciones de onda de prueba para algoritmos cuánticos variacionales o circuitos de clasificación para el aprendizaje automático.

SU(2) significa grupo unitario especial de grado 2, sus elementos son 2×22 \times 2 matrices unitarias con determinante 1, como las puertas de rotación de Pauli.

En 3 qubits y utilizando el Pauli YY y ZZ su2_gates como puertas de qubit único, el circuito SU(2) eficiente en hardware se representa por:

┌──────────┐┌──────────┐ ░            ░       ░ ┌───────────┐┌───────────┐
┤ 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]) ├
└──────────┘└──────────┘ ░ └───┘      ░       ░ └───────────┘└───────────┘

Véase RealAmplitudes para más detalles sobre los posibles argumentos y opciones, como omitir qubits no entrelazados, que también se aplican aquí.

Ejemplos

>>> 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 ├
     └──────────┘└───┘                         └───┘    └──────────┘└───┘
Consulte también

La función efficient_su2() construye un circuito funcionalmente equivalente, pero más rápido.

Obsoleto desde la versión 2.1

La clase qiskit.circuit.library.n_local.efficient_su2.EfficientSU2 está obsoleta a partir de Qiskit 2.1. Se eliminará en Qiskit 3.0. En su lugar, utilice la función qiskit.circuit.library.efficient_su2.

Parámetros

  • num_qubits (int | None) – El número de qubits del circuito EfficientSU2.
  • reps (int) – Especifica la frecuencia con la que se repite la estructura de una capa de rotación seguida de una capa de enredo.
  • su2_gates (str |type |qiskit.circuit.Instruction |QuantumCircuit |list[str |type |qiskit.circuit.Instruction |QuantumCircuit] | None) – Las puertas SU(2) de un solo qubit para aplicar en capas de puerta de un solo qubit. Si sólo se proporciona una puerta, se aplica la misma puerta a cada qubit. Si se proporciona una lista de puertas, todas las puertas se aplican a cada qubit en el orden proporcionado.
  • entanglement (str |list[list[int]] | Callable[[int], list[int]]) – Especifica la estructura de enredo. Puede ser una cadena ('full', 'linear', 'reverse_linear', 'pairwise', 'circular', o 'sca'), una lista de pares de enteros especificando los índices de qubits entrelazados entre sí, o una llamada que devuelva dicha lista con el índice de la capa de entrelazamiento. Por defecto es 'reverse_linear' entanglement. Obsérvese que el entrelazamiento "inverso_lineal" proporciona el mismo unitario que el "completo" con menos puertas de entrelazamiento. Consulte la sección Ejemplos de TwoLocal para más información.
  • initial_state (QuantumCircuit | None) – Un objeto QuantumCircuit para añadir al circuito.
  • skip_unentangled_qubits (bool) – Si es True, las puertas de un qubit sólo se aplican a los qubits que están enredados con otro qubit. Si es False, las puertas de qubit único se aplican a cada qubit en el Ansatz. El valor predeterminado es False.
  • skip_final_rotation_layer (bool) – Si es False, se añade una capa de rotación al final del ansatz. Si es True, no se añade ninguna capa de rotación.
  • parameter_prefix (str) – Las puertas parametrizadas requieren que se defina un parámetro, para lo cual utilizamos ParameterVector.
  • insert_barriers (bool) – Si es True, se insertan barreras entre cada capa. Si es False, no se insertan barreras.
  • flatten (bool | None) – Establézcalo en True para obtener un circuito plano en lugar de anidarlo dentro de múltiples capas de objetos puerta. Por defecto actualmente el contenido del circuito de salida se envolverá en objetos anidados para una visualización más limpia. Sin embargo, si está utilizando este circuito para algo más que la visualización, se recomienda encarecidamente establecer esta bandera en True para evitar una gran sobrecarga de rendimiento para la vinculación de parámetros.
  • name (str) –

Atributos

límites_de_parámetros

Devuelve los límites del parámetro.

Devuelve

Los límites de los parámetros.

nombre

Tipo: str

Un nombre legible para el circuito.

Ejemplo

from qiskit import QuantumCircuit
 
qc = QuantumCircuit(2, 2, name="my_circuit")
print(qc.name)
my_circuit
¿Le ha resultado útil esta página?
Informe de un error, errata o solicite contenidos en GitHub .