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

O circuito SU(2) 2-local eficiente em termos de hardware.

O circuito EfficientSU2 consiste em camadas de operações de um único qubit abrangido por emaranhados SU(2) e CXCX. Esse é um padrão heurístico que pode ser usado para preparar funções de onda de teste para algoritmos quânticos variacionais ou circuito de classificação para aprendizado de máquina.

SU(2) significa grupo unitário especial de grau 2, seus elementos são 2×22 \times 2 matrizes unitárias com determinante 1, como as portas de rotação de Pauli.

Em 3 qubits e usando o Pauli YY e o ZZ su2_gates como portas de qubit único, o circuito SU(2) eficiente em termos de hardware é representado 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 obter mais detalhes sobre os possíveis argumentos e opções, como ignorar qubits não entrelaçados, que também se aplicam neste caso.

Exemplos

>>> 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 ├
     └──────────┘└───┘                         └───┘    └──────────┘└───┘
Veja Também

A função efficient_su2() constrói um circuito funcionalmente equivalente, porém mais rápido.

Descontinuado desde a versão 2.1

A classe qiskit.circuit.library.n_local.efficient_su2.EfficientSU2 está obsoleta desde o Qiskit 2.1. Ele será removido no Qiskit 3.0. Em vez disso, use a função qiskit.circuit.library.efficient_su2.

Parâmetros

  • num_qubits (int | None) – O número de qubits do circuito EfficientSU2.
  • reps (int) – Especifica a frequência com que a estrutura de uma camada de rotação seguida por uma camada de emaranhamento é repetida.
  • su2_gates (str |type |qiskit.circuit.Instruction |QuantumCircuit |list[str |type |qiskit.circuit.Instruction |QuantumCircuit] | None) – As portas de qubit único SU(2) a serem aplicadas em camadas de portas de qubit único. Se houver apenas uma porta, a mesma porta é aplicada a cada qubit. Se for fornecida uma lista de portas, todas as portas são aplicadas a cada qubit na ordem indicada.
  • entanglement (str |list[list[int]] | Callable[[int], list[int]]) – Especifica a estrutura de entrelaçamento. Pode ser uma cadeia de caracteres ("full", "linear", "reverse_linear", "pairwise", "circular" ou "sca"), uma lista de pares de números inteiros especificando os índices de qubits emaranhados entre si ou um chamável que retorna essa lista com o índice da camada de emaranhamento. O padrão é o entrelaçamento "reverse_linear". Observe que o entrelaçamento "reverso_linear" fornece a mesma unidade que o "completo" com menos portas de entrelaçamento. Consulte a seção Exemplos de TwoLocal para obter mais detalhes.
  • initial_state (QuantumCircuit | None) – Um objeto QuantumCircuit para anexar ao circuito.
  • skip_unentangled_qubits (bool) – Se for True, os portões de qubit único serão aplicados somente aos qubits que estão emaranhados com outro qubit. Se for False, os portões de qubit único são aplicados a cada qubit no Ansatz. O padrão é False.
  • skip_final_rotation_layer (bool) – Se for False, uma camada de rotação será adicionada no final do ansatz. Se for True, nenhuma camada de rotação será adicionada.
  • parameter_prefix (str) – As portas parametrizadas exigem a definição de um parâmetro, para o qual usamos ParameterVector.
  • insert_barriers (bool) – Se for True, serão inseridas barreiras entre cada camada. Se for False, nenhuma barreira será inserida.
  • flatten (bool | None) – Defina essa opção como True para gerar um circuito plano em vez de aninhá-lo em várias camadas de objetos de porta. Por padrão, atualmente, o conteúdo do circuito de saída será agrupado em objetos aninhados para uma visualização mais limpa. No entanto, se estiver usando esse circuito para qualquer coisa além de visualização, é altamente recomendável definir esse sinalizador como True para evitar uma grande sobrecarga de desempenho para a vinculação de parâmetros.
  • name (str) – Nome do circuito.

Atributos

parameter_bounds

Retorna os limites dos parâmetros.

Retorna

Os limites dos parâmetros.

name

Tipo: str

Um nome legível por humanos para o circuito.

**Exemplo

from qiskit import QuantumCircuit

qc = QuantumCircuit(2, 2, name="my_circuit")
print(qc.name)
my_circuit
Esta página foi útil?
Relate um bug, erro de digitação ou solicite conteúdo no GitHub.