Skip to main content
IBM Quantum Platform

RealAmplitudes

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

GitHub

Bases: TwoLocal

El circuito 2-local de amplitudes reales.

El circuito RealAmplitudes es una función de onda de prueba heurística utilizada como Ansatz en aplicaciones químicas o circuitos de clasificación en aprendizaje automático. El circuito consta de capas alternas de YY rotaciones y CXCX enredos. El patrón de enredo puede ser definido por el usuario o seleccionado de un conjunto predefinido. Se denomina RealAmplitudes ya que los estados cuánticos preparados sólo tendrán amplitudes reales, la parte compleja es siempre 0.

Por ejemplo, un circuito RealAmplitudes con 2 repeticiones en 3 qubits con entrelazamiento 'reverse_linear' es

┌──────────┐ ░            ░ ┌──────────┐ ░            ░ ┌──────────┐
┤ Ry(θ[0]) ├─░────────■───░─┤ Ry(θ[3]) ├─░────────■───░─┤ Ry(θ[6]) ├
├──────────┤ ░      ┌─┴─┐ ░ ├──────────┤ ░      ┌─┴─┐ ░ ├──────────┤
┤ Ry(θ[1]) ├─░───■──┤ X ├─░─┤ Ry(θ[4]) ├─░───■──┤ X ├─░─┤ Ry(θ[7]) ├
├──────────┤ ░ ┌─┴─┐└───┘ ░ ├──────────┤ ░ ┌─┴─┐└───┘ ░ ├──────────┤
┤ Ry(θ[2]) ├─░─┤ X ├──────░─┤ Ry(θ[5]) ├─░─┤ X ├──────░─┤ Ry(θ[8]) ├
└──────────┘ ░ └───┘      ░ └──────────┘ ░ └───┘      ░ └──────────┘

El enredo puede establecerse utilizando la palabra clave entanglement como cadena o como una lista de pares de índices. Consulte la documentación de TwoLocal y NLocal para más detalles. Otras opciones que pueden configurarse son el número de repeticiones, la omisión de las puertas de rotación en los qubits que no están entrelazados, la omisión de la capa de rotación final y la inserción de barreras entre las capas de rotación y entrelazamiento.

Si algunos qubits no están enredados con otros qubits, tiene sentido no aplicar puertas de rotación en estos qubits, ya que una secuencia de YY rotaciones puede reducirse a una única YY rotación con ángulos de rotación sumados.

Ejemplos

>>> ansatz = RealAmplitudes(3, reps=2)  # create the circuit on 3 qubits
>>> print(ansatz.decompose())
     ┌──────────┐                 ┌──────────┐                 ┌──────────┐
q_0:Ry(θ[0]) ├──────────■──────┤ Ry(θ[3]) ├──────────■──────┤ Ry(θ[6])
     ├──────────┤        ┌─┴─┐    ├──────────┤        ┌─┴─┐    ├──────────┤
q_1:Ry(θ[1]) ├──■─────┤ X ├────┤ Ry(θ[4]) ├──■─────┤ X ├────┤ Ry(θ[7])
     ├──────────┤┌─┴─┐┌──┴───┴───┐└──────────┘┌─┴─┐┌──┴───┴───┐└──────────┘
q_2:Ry(θ[2]) ├┤ X ├┤ Ry(θ[5]) ├────────────┤ X ├┤ Ry(θ[8]) ├────────────
     └──────────┘└───┘└──────────┘            └───┘└──────────┘
>>> ansatz = RealAmplitudes(3, entanglement='full', reps=2, flatten=True)
>>> print(ansatz)
     ┌──────────┐          ┌──────────┐                      ┌──────────┐
q_0:RY(θ[0]) ├──■────■──┤ RY(θ[3]) ├──────────────■────■──┤ RY(θ[6]) ├────────────
     ├──────────┤┌─┴─┐  │  └──────────┘┌──────────┐┌─┴─┐  │  └──────────┘┌──────────┐
q_1:RY(θ[1]) ├┤ X ├──┼───────■──────┤ RY(θ[4]) ├┤ X ├──┼───────■──────┤ RY(θ[7])
     ├──────────┤└───┘┌─┴─┐   ┌─┴─┐    ├──────────┤└───┘┌─┴─┐   ┌─┴─┐    ├──────────┤
q_2:RY(θ[2]) ├─────┤ X ├───┤ X ├────┤ RY(θ[5]) ├─────┤ X ├───┤ X ├────┤ RY(θ[8])
     └──────────┘     └───┘   └───┘    └──────────┘     └───┘   └───┘    └──────────┘
>>> ansatz = RealAmplitudes(3, entanglement='linear', reps=2, insert_barriers=True,
... flatten=True)
>>> qc = QuantumCircuit(3)  # create a circuit and append the RY variational form
>>> qc.compose(ansatz, inplace=True)
>>> qc.draw()
     ┌──────────┐ ░            ░ ┌──────────┐ ░            ░ ┌──────────┐
q_0:RY(θ[0]) ├─░───■────────░─┤ RY(θ[3]) ├─░───■────────░─┤ RY(θ[6])
     ├──────────┤ ░ ┌─┴─┐      ░ ├──────────┤ ░ ┌─┴─┐      ░ ├──────────┤
q_1:RY(θ[1]) ├─░─┤ X ├──■───░─┤ RY(θ[4]) ├─░─┤ X ├──■───░─┤ RY(θ[7])
     ├──────────┤ ░ └───┘┌─┴─┐ ░ ├──────────┤ ░ └───┘┌─┴─┐ ░ ├──────────┤
q_2:RY(θ[2]) ├─░──────┤ X ├─░─┤ RY(θ[5]) ├─░──────┤ X ├─░─┤ RY(θ[8])
     └──────────┘ ░      └───┘ ░ └──────────┘ ░      └───┘ ░ └──────────┘
>>> ansatz = RealAmplitudes(4, reps=1, entanglement='circular', insert_barriers=True,
... flatten=True)
>>> print(ansatz)
     ┌──────────┐ ░ ┌───┐                ░ ┌──────────┐
q_0:RY(θ[0]) ├─░─┤ X ├──■─────────────░─┤ RY(θ[4])
     ├──────────┤ ░ └─┬─┘┌─┴─┐           ░ ├──────────┤
q_1:RY(θ[1]) ├─░───┼──┤ X ├──■────────░─┤ RY(θ[5])
     ├──────────┤ ░   │  └───┘┌─┴─┐      ░ ├──────────┤
q_2:RY(θ[2]) ├─░───┼───────┤ X ├──■───░─┤ RY(θ[6])
     ├──────────┤ ░   │       └───┘┌─┴─┐ ░ ├──────────┤
q_3:RY(θ[3]) ├─░───■────────────┤ X ├─░─┤ RY(θ[7])
     └──────────┘ ░                └───┘ ░ └──────────┘
>>> ansatz = RealAmplitudes(4, reps=2, entanglement=[[0,3], [0,2]],
... skip_unentangled_qubits=True, flatten=True)
>>> print(ansatz)
     ┌──────────┐                 ┌──────────┐                 ┌──────────┐
q_0:RY(θ[0]) ├──■───────■──────┤ RY(θ[3]) ├──■───────■──────┤ RY(θ[6])
     └──────────┘  │       │      └──────────┘  │       │      └──────────┘
q_1: ──────────────┼───────┼────────────────────┼───────┼──────────────────
     ┌──────────┐  │     ┌─┴─┐    ┌──────────┐  │     ┌─┴─┐    ┌──────────┐
q_2:RY(θ[1]) ├──┼─────┤ X ├────┤ RY(θ[4]) ├──┼─────┤ X ├────┤ RY(θ[7])
     ├──────────┤┌─┴─┐┌──┴───┴───┐└──────────┘┌─┴─┐┌──┴───┴───┐└──────────┘
q_3:RY(θ[2]) ├┤ X ├┤ RY(θ[5]) ├────────────┤ X ├┤ RY(θ[8]) ├────────────
     └──────────┘└───┘└──────────┘            └───┘└──────────┘
Consulte también

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

Obsoleto desde la versión 2.1

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

Parámetros

  • num_qubits (int | None) – El número de qubits del circuito RealAmplitudes.
  • reps (int) – Especifica la frecuencia con la que se repite la estructura de una capa de rotación seguida de una capa de enredo.
  • entanglement (str |list[list[int]] | Callable[[int], list[int]]) – Especifica la estructura de entrelazamiento. Puede ser una cadena («full», «linear», «reverse_linear», «circular» o «sca»), una lista de pares de números enteros que especifican 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. Establecer por defecto 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. Consulte la sección «Ejemplos» de TwoLocal para obtener 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 este indicador en True para evitar una gran sobrecarga de rendimiento para la vinculació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.