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)
Basi: TwoLocal
Il circuito SU(2) 2-locale efficiente dal punto di vista hardware.
Il circuito EfficientSU2 è costituito da strati di operazioni a singolo qubit, spaziati da entanglement SU(2) e . Si tratta di un modello euristico che può essere utilizzato per preparare funzioni d'onda di prova per algoritmi quantistici variazionali o circuiti di classificazione per l'apprendimento automatico.
SU(2) sta per gruppo unitario speciale di grado 2, i suoi elementi sono matrici unitarie con determinante 1, come le porte di rotazione di Pauli.
Su 3 qubit e utilizzando le porte di Pauli e su2_gates come porte a singolo qubit, il circuito SU(2) efficiente dal punto di vista hardware è rappresentato da:
┌──────────┐┌──────────┐ ░ ░ ░ ┌───────────┐┌───────────┐
┤ 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]) ├
└──────────┘└──────────┘ ░ └───┘ ░ ░ └───────────┘└───────────┘Per ulteriori dettagli sui possibili argomenti e opzioni, come il RealAmplitudes salto dei qubit non intrecciati, che si applicano anche in questo caso, consultare [...].
Esempi
>>> 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 ├
└──────────┘└───┘ └───┘ └──────────┘└───┘La funzione efficient_su2() costruisce un circuito funzionalmente equivalente, ma più velocemente.
La classe qiskit.circuit.library.n_local.efficient_su2.EfficientSU2 è deprecata a partire da Qiskit 2.1. Verrà rimosso in Qiskit 3.0. Utilizzare invece la funzione qiskit.circuit.library.efficient_su2.
Parametri
- num_qubits (int | None) – Il numero di qubit del circuito EfficientSU2.
- reps (int) – Specifica la frequenza con cui viene ripetuta la struttura di uno strato di rotazione seguito da uno strato di entanglement.
- su2_gates (str |type |qiskit.circuit.Instruction |QuantumCircuit |list[str |type |qiskit.circuit.Instruction |QuantumCircuit] | None) – I gate a singolo qubit SU(2) da applicare negli strati di gate a singolo qubit. Se è presente un solo gate, lo stesso gate viene applicato a ciascun qubit. Se viene fornito un elenco di porte, tutte le porte vengono applicate a ciascun qubit nell'ordine indicato.
- entanglement (str |list[list[int]] | Callable[[int], list[int]]) – Specifica la struttura di entanglement. Può essere una stringa ('full', 'linear', 'reverse_linear', 'pairwise', 'circular', o 'sca'), un elenco di coppie di interi che specificano gli indici dei qubit entangled tra loro, o un callable che restituisce tale elenco con l'indice del livello di entanglement. Predefinito per l'entanglement 'reverse_linear'. Si noti che l'entanglement 'reverse_linear' fornisce lo stesso unitario di quello 'completo' con un numero inferiore di porte di entangling. Si veda la sezione Esempi di
TwoLocalper maggiori dettagli. - initial_state (QuantumCircuit | None) – Un oggetto
QuantumCircuitda anteporre al circuito. - skip_unentangled_qubits (bool) – Se True, le porte a qubit singolo vengono applicate solo ai qubit che sono entangled con un altro qubit. Se Falso, le porte a qubit singolo vengono applicate a ciascun qubit nell'Ansatz. Il valore predefinito è false.
- skip_final_rotation_layer (bool) – Se False, viene aggiunto un livello di rotazione alla fine dell'ansatz. Se Vero, non viene aggiunto alcun layer di rotazione.
- parameter_prefix (str) – Le porte parametrizzate richiedono la definizione di un parametro, per il quale utilizziamo
ParameterVector. - insert_barriers (bool) – Se Vero, le barriere vengono inserite tra ogni strato. Se Falso, non vengono inserite barriere.
- flatten (bool | None) – Impostare questo valore su
Trueper produrre un circuito piatto invece di annidarlo all'interno di più strati di oggetti gate. Per impostazione predefinita, il contenuto del circuito di uscita viene avvolto in oggetti annidati per una visualizzazione più pulita. Tuttavia, se si usa questo circuito per qualcosa di diverso dalla visualizzazione, si raccomanda vivamente di impostare questo flag aTrueper evitare un grande sovraccarico di prestazioni per il binding dei parametri. - name (str) – Nome del circuito.
Attributi
parameter_bounds
Restituisce i limiti dei parametri.
Risultati
I limiti del parametro.
name
Tipo: str
Un nome leggibile per il circuito.
Esempio
from qiskit import QuantumCircuit
qc = QuantumCircuit(2, 2, name="my_circuit")
print(qc.name)my_circuit