Skip to main content
IBM Quantum Platform

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)

GitHub

Generare un operatore di qubit consapevole della connettività che rappresenti un modello quantistico di tipo XYZ.

Questa funzione implementa la seguente hamiltoniana:

H^=(j,k)E(Jxσjxσkx+Jyσjyσky+Jzσjzσkz)+jV(hxσjx+hyσjy+hzσjz)\hat{H} = \sum_{(j,k)\in E} (J_{x} \sigma_j^{x} \sigma_{k}^{x} + J_{y} \sigma_j^{y} \sigma_{k}^{y} + J_{z} \sigma_j^{z} \sigma_{k}^{z}) + \sum_{j\in V} (h_{x} \sigma_j^{x} + h_{y} \sigma_j^{y} + h_{z} \sigma_j^{z})

Dove G(V,E) è il grafico della mappa coupling fornita.

Nota

Spesso viene incluso un fattore 12-\frac{1}{2} 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, JiJ_i, in ciascun asse cartesiano.
  • ext_magnetic_field (Sequence[float]) – I coefficienti, hih_i, 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 PauliOrderStrategy per 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

SparsePauliOp

generate_time_evolution_circuit

generate_time_evolution_circuit(operator, *, synthesis=None, time=1.0)

GitHub

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)
Output del codice precedente.

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

QuantumCircuit

PauliOrderStrategy

class PauliOrderStrategy(value)

GitHub

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"].

Questa pagina è stata utile?
Segnala un bug, un errore di battitura o richiedi contenuti su GitHub.