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

Consulte RealAmplitudes para obtener más detalles sobre los posibles argumentos y opciones, como omitir los qubits no entrelazados, que también se aplican en este caso.

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 entrelazamiento.
  • su2_gates (str |type |qiskit.circuit.Instruction |QuantumCircuit |list[str |type |qiskit.circuit.Instruction |QuantumCircuit] | None) – Las puertas de un solo qubit de SU(2) que se aplicarán en las capas de puertas de un solo qubit. Si solo se dispone de una puerta, se aplica la misma puerta a cada qubit. Si se proporciona una lista de puertas, todas ellas se aplican a cada qubit en el orden indicado.
  • entanglement (str |list[list[int]] | Callable[[int], list[int]]) – Especifica la estructura de entrelazamiento. Puede ser una cadena («full», «linear», «reverse_linear», «pairwise», «circular» o «sca»), una lista de pares de números enteros que especifiquen los índices de los qubits entrelazados entre sí, o una función que devuelva dicha lista a partir del índice de la capa de entrelazamiento. El valor predeterminado es el entrelazamiento «reverse_linear». Cabe señalar que el entrelazamiento «reverse_linear» proporciona el mismo operador unitario que el «full», pero con menos puertas de entrelazamiento. Consulta la sección «Ejemplos» de TwoLocal para obtener más detalles.
  • initial_state (QuantumCircuit | None) – Un objeto QuantumCircuit que se debe añadir al principio del circuito.
  • skip_unentangled_qubits (bool) – Si el valor es «True», las puertas de un solo qubit solo se aplican a los qubits que están entrelazados con otro qubit. Si el valor es «False», se aplican las puertas de un solo qubit a cada qubit del Ansatz. El valor predeterminado es False.
  • skip_final_rotation_layer (bool) – Si es Falso, se añade una capa de rotación al final del ansatz. Si el valor 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 el valor es «True», se insertan barreras entre cada capa. Si es «False», no se insertan barreras.
  • flatten (bool | None) – Establece este valor en True para generar un circuito plano en lugar de anidarlo dentro de varias capas de objetos de puerta. Por defecto, actualmente el contenido del circuito de salida se presenta en objetos anidados para facilitar su visualización. Sin embargo, si utilizas este circuito para cualquier otra finalidad que no sea la visualización, se recomienda encarecidamente configurar este indicador en True para evitar una gran merma en el rendimiento debido a la asignación de parámetros.
  • name (str) – Nombre del circuito.

Atributos

parameter_bounds

Devuelve los límites del parámetro.

Devuelve

Los límites de los parámetros.

name

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, de una errata o solicite contenido en GitHub.