ExcitationPreserving
class qiskit.circuit.library.ExcitationPreserving(num_qubits=None, mode='iswap', entanglement='full', reps=3, skip_unentangled_qubits=False, skip_final_rotation_layer=False, parameter_prefix='θ', insert_barriers=False, initial_state=None, name='ExcitationPreserving', flatten=None)
Basi: TwoLocal
Il surrogato euristico della funzione d'onda che preserva l'eccitazione.
Il circuito ExcitationPreserving conserva il rapporto tra gli stati , e . A tal fine, questo circuito utilizza interazioni a due qubit della forma
per la modalità 'fsim' o con per la modalità 'iswap'.
Si noti che anche altre funzioni d'onda, come le UCC-ansatzes, conservano l'eccitazione. Tuttavia, questi possono diventare rapidamente complessi, mentre questo circuito euristicamente motivato segue uno schema più semplice.
Questa funzione d'onda di prova è costituita da strati di rotazioni di tipo « » con intrecci a 2 qubit. L'entanglement viene creato utilizzando rotazioni di tipo « » e, facoltativamente, un gate a fase controllata per la modalità 'fsim'.
Per ulteriori dettagli sui possibili argomenti e opzioni, come il RealAmplitudes salto dei qubit non intrecciati, che si applicano anche in questo caso, consultare [...].
Le rotazioni dell'ansatz di ExcitationPreserving possono essere scritte come
Esempi
>>> ansatz = ExcitationPreserving(3, reps=1, insert_barriers=True, entanglement='linear')
>>> print(ansatz.decompose()) # show the circuit
┌──────────┐ ░ ┌────────────┐┌────────────┐ ░ ┌──────────┐
q_0: ┤ RZ(θ[0]) ├─░─┤0 ├┤0 ├─────────────────────────────░─┤ RZ(θ[5]) ├
├──────────┤ ░ │ RXX(θ[3]) ││ RYY(θ[3]) │┌────────────┐┌────────────┐ ░ ├──────────┤
q_1: ┤ RZ(θ[1]) ├─░─┤1 ├┤1 ├┤0 ├┤0 ├─░─┤ RZ(θ[6]) ├
├──────────┤ ░ └────────────┘└────────────┘│ RXX(θ[4]) ││ RYY(θ[4]) │ ░ ├──────────┤
q_2: ┤ RZ(θ[2]) ├─░─────────────────────────────┤1 ├┤1 ├─░─┤ RZ(θ[7]) ├
└──────────┘ ░ └────────────┘└────────────┘ ░ └──────────┘>>> ansatz = ExcitationPreserving(2, reps=1, flatten=True)
>>> qc = QuantumCircuit(2) # create a circuit and append the RY variational form
>>> qc.cry(0.2, 0, 1) # do some previous operation
>>> qc.compose(ansatz, inplace=True) # add the excitation-preserving
>>> qc.draw()
┌──────────┐┌────────────┐┌────────────┐┌──────────┐
q_0: ─────■─────┤ RZ(θ[0]) ├┤0 ├┤0 ├┤ RZ(θ[3]) ├
┌────┴────┐├──────────┤│ RXX(θ[2]) ││ RYY(θ[2]) │├──────────┤
q_1: ┤ RY(0.2) ├┤ RZ(θ[1]) ├┤1 ├┤1 ├┤ RZ(θ[4]) ├
└─────────┘└──────────┘└────────────┘└────────────┘└──────────┘>>> ansatz = ExcitationPreserving(3, reps=1, mode='fsim', entanglement=[[0,2]],
... insert_barriers=True, flatten=True)
>>> print(ansatz.decompose())
┌──────────┐ ░ ┌────────────┐┌────────────┐ ░ ┌──────────┐
q_0: ┤ RZ(θ[0]) ├─░─┤0 ├┤0 ├─■──────░─┤ RZ(θ[5]) ├
├──────────┤ ░ │ ││ │ │ ░ ├──────────┤
q_1: ┤ RZ(θ[1]) ├─░─┤ RXX(θ[3]) ├┤ RYY(θ[3]) ├─┼──────░─┤ RZ(θ[6]) ├
├──────────┤ ░ │ ││ │ │θ[4] ░ ├──────────┤
q_2: ┤ RZ(θ[2]) ├─░─┤1 ├┤1 ├─■──────░─┤ RZ(θ[7]) ├
└──────────┘ ░ └────────────┘└────────────┘ ░ └──────────┘La funzione excitation_preserving() costruisce un circuito funzionalmente equivalente, ma più velocemente.
La classe qiskit.circuit.library.n_local.excitation_preserving.ExcitationPreserving è deprecata a partire da Qiskit 2.1. Verrà rimosso in Qiskit 3.0. Utilizzare invece la funzione qiskit.circuit.library.excitation_preserving.
Parametri
- num_qubits (int | None) – Il numero di qubit del circuito ExcitationPreserving.
- mode (str) – Scegliere la modalità di entangler, che può essere 'iswap' o 'fsim'.
- reps (int) – Specifica la frequenza con cui viene ripetuta la struttura di uno strato di rotazione seguito da uno strato di entanglement.
- entanglement (str |list[list[int]] | Callable[[int], list[int]]) – Specifica la struttura di entanglement. Può essere una stringa ('full', 'linear' 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. 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 è vero, viene aggiunto un livello di rotazione alla fine dell'ansatz. Se False, non viene aggiunto alcun layer di rotazione. L'impostazione predefinita è true.
- 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.
Aumenti
ValueError - Se la modalità selezionata non è supportata.
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