generatori_di_problemi
qiskit_addon_utils.problem_generators
Metodi di utilità per la generazione di problemi.
generate_xyz_hamiltonian
generate_xyz_hamiltonian(coupling, *, coupling_constants=(1.0, 1.0, 1.0), ext_magnetic_field=(0.0, 0.0, 0.0), pauli_order_strategy=PauliOrderStrategy.ColorThenInteraction, coloring=None)
Generare un operatore di qubit consapevole della connettività che rappresenti un modello quantistico di tipo XYZ.
Questa funzione implementa la seguente hamiltoniana:
Dove G(V,E) è il grafico della mappa coupling fornita.
Spesso viene incluso un fattore al di fuori della somma di questa equazione. Questo fattore non viene applicato internamente, quindi deve essere tenuto in considerazione negli ingressi di coupling_constants e ext_magnetic_field .
>>> from qiskit.transpiler import CouplingMap
>>> from qiskit_addon_utils.problem_generators import generate_xyz_hamiltonian
>>> coupling_map = CouplingMap.from_line(10)
>>> hamiltonian = generate_xyz_hamiltonian(
... coupling_map,
... coupling_constants=(0.4, 0.4, 0.0),
... ext_magnetic_field=(0.0, 0.0, 0.6),
... )
>>> print(hamiltonian)
SparsePauliOp(['IIIIIIIXXI', 'IIIIIIIYYI', 'IIIIIXXIII', 'IIIIIYYIII',
'IIIXXIIIII', 'IIIYYIIIII', 'IXXIIIIIII', 'IYYIIIIIII',
'IIIIIIIIXX', 'IIIIIIIIYY', 'IIIIIIXXII', 'IIIIIIYYII',
'IIIIXXIIII', 'IIIIYYIIII', 'IIXXIIIIII', 'IIYYIIIIII',
'XXIIIIIIII', 'YYIIIIIIII', 'IIIIIIIIIZ', 'IIIIIIIIZI',
'IIIIIIIZII', 'IIIIIIZIII', 'IIIIIZIIII', 'IIIIZIIIII',
'IIIZIIIIII', 'IIZIIIIIII', 'IZIIIIIIII', 'ZIIIIIIIII'],
coeffs=[0.4+0.j, 0.4+0.j, 0.4+0.j, 0.4+0.j, 0.4+0.j, 0.4+0.j, 0.4+0.j, 0.4+0.j,
0.4+0.j, 0.4+0.j, 0.4+0.j, 0.4+0.j, 0.4+0.j, 0.4+0.j, 0.4+0.j, 0.4+0.j,
0.4+0.j, 0.4+0.j, 0.6+0.j, 0.6+0.j, 0.6+0.j, 0.6+0.j, 0.6+0.j, 0.6+0.j,
0.6+0.j, 0.6+0.j, 0.6+0.j, 0.6+0.j])Parametri
- coupling (CouplingMap |PyGraph |PyDiGraph) – Il sottografo del qubit su cui mappare l'hamiltoniana. La direzionalità dei bordi del grafo sarà ignorata e i bordi paralleli saranno trattati come un singolo bordo durante la generazione dell'operatore.
- coupling_constants (Sequence[float]) – Le costanti di accoppiamento a valore reale, , in ciascun asse cartesiano.
- ext_magnetic_field (Sequence[float]) – I coefficienti, , rappresentano un campo magnetico lungo ciascun asse cartesiano.
- pauli_order_strategy (PauliOrderStrategy) – Indica la strategia di iterazione con cui verranno generati i termini di Pauli. Vedere
PauliOrderStrategyper maggiori dettagli. - coloring (dict[tuple[int, int], int] | None) – Un dizionario opzionale che codifica la colorazione del grafo utilizzata per ordinare i termini hamiltoniani. Questo dizionario mappa le etichette dei bordi (sotto forma di coppie di numeri interi) in valori di colore (numeri interi semplici). I termini di interazione hamiltoniana saranno aggiunti aumentando il valore del colore. All'interno di ogni colore, i bordi sono ordinati, il che non cambia nulla dal punto di vista fisico, ma rende i risultati più facili da leggere.
Risultati
Un operatore di qubit che descrive un modello quantistico di tipo XYZ. Il i-esimo qubit dell'operatore corrisponde al nodo di indice i sulla mappa di accoppiamento.
Aumenti
- ValueError - Le costanti di accoppiamento devono essere specificate da una sequenza length-3 di valori in virgola mobile.
- ValueError - Il campo magnetico esterno deve essere specificato da una sequenza length-3 di valori in virgola mobile.
Tipo di restituzione
generate_time_evolution_circuit
generate_time_evolution_circuit(operator, *, synthesis=None, time=1.0)
Modellare l'evoluzione temporale di un operatore.
>>> from qiskit.quantum_info import SparsePauliOp
>>> from qiskit.synthesis import SuzukiTrotter
>>> from qiskit.transpiler import CouplingMap
>>> from qiskit_addon_utils.problem_generators import (
... PauliOrderStrategy,
... generate_xyz_hamiltonian,
... generate_time_evolution_circuit,
... )>>> coupling_map = CouplingMap.from_line(6)
>>> hamiltonian = generate_xyz_hamiltonian(
... coupling_map,
... coupling_constants=(0.4, 0.4, 0.0),
... ext_magnetic_field=(0.0, 0.0, 0.6),
... pauli_order_strategy=PauliOrderStrategy.InteractionThenColorZigZag,
... )>>> circ = generate_time_evolution_circuit(
... hamiltonian, synthesis=SuzukiTrotter(order=2, reps=2), time=2.0
... )
>>> _ = circ.draw("mpl", fold=-1)
Parametri
- operator (SparsePauliOp) – L'operatore per il quale modellare l'evoluzione temporale.
- synthesis (EvolutionSynthesis | None) – Una strategia di sintesi. Se
None, la sintesi predefinita è la formula del prodotto di Lie-Trotter con una sola ripetizione. - time (float) – Il tempo di evoluzione.
Risultati
A QuantumCircuit che implementa un operatore evoluto nel tempo.
Tipo di restituzione
PauliOrderStrategy
class PauliOrderStrategy(value)
Basi: Enum
Enumerazione di diversi ordinamenti di Pauli.
Quando si costruisce un'hamiltoniana su un insieme colorato di bordi, i termini di Pauli generati possono essere ordinati in modi diversi. L'ordine dei termini nell'hamiltoniana si conserva durante la sua evoluzione temporale e, quindi, influisce direttamente sul circuito quantistico risultante.
ColorThenInteraction
Valore predefinito: 1
Questa strategia itera prima tutti i bordi (ordinati in base al loro valore cromatico) e poi le interazioni (ordinate come X, Y, Z).
InteractionThenColor
Valore predefinito: 2
Questa strategia è l'inverso di ColorThenInteraction. Si iterano prima le interazioni (ordinate come X, Y, Z) e poi tutti i bordi (ordinati in base al loro valore di colore).
InteractionThenColorZigZag
Valore predefinito: 3
Questa strategia è simile a quella di InteractionThenColor . Tuttavia, alterna l'iterazione dei bordi incrementando e decrementando i valori del colore mentre salta da un'interazione all'altra. Ad esempio, se si includono solo le interazioni X e Y e si utilizzano tre valori di colore ({1, 2, 3}), si otterrà il seguente ordine: ["X on 1", "X on 2", "X on 3", "Y on 3", "Y on 2", "Y on 1"].