Problemgeneratoren
qiskit_addon_utils.problem_generators
Utility-Methoden zur Problemerzeugung.
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)
Generierung eines konnektivitätsbewussten Qubit-Operators, der ein Quantenmodell vom Typ XYZ darstellt.
Diese Funktion implementiert den folgenden Hamiltonian:
Dabei ist G(V,E) der Graph der bereitgestellten Karte coupling .
Außerhalb der Summation dieser Gleichung ist häufig ein Faktor enthalten. Dieser Faktor wird intern nicht angewendet und sollte daher bei den Eingaben coupling_constants und ext_magnetic_field berücksichtigt werden.
>>> 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])Parameter
- coupling (CouplingMap |PyGraph |PyDiGraph) – Der Qubit-Subgraph, auf den der Hamiltonian abgebildet werden soll. Die Richtungsabhängigkeit von Graphenkanten wird ignoriert, und parallele Kanten werden bei der Generierung des Operators als eine einzige Kante behandelt.
- coupling_constants (Sequence[float]) – Die reellwertigen Kopplungskonstanten, , in jeder kartesischen Achse.
- ext_magnetic_field (Sequence[float]) – Die Koeffizienten , die ein Magnetfeld entlang jeder kartesischen Achse darstellen.
- pauli_order_strategy (PauliOrderStrategy) – Gibt die Iterationsstrategie an, mit der die Pauli-Terme erzeugt werden. Siehe
PauliOrderStrategyfür weitere Einzelheiten. - coloring (dict[tuple[int, int], int] | None) – Ein optionales Wörterbuch, das die Graphenfärbung kodiert, die zum Sortieren der Hamilton-Terme verwendet wird. Dieses Wörterbuch ordnet die Kantenbezeichnungen (in Form von Ganzzahlpaaren) den Farbwerten (einfache Ganzzahlen) zu. Hamiltonsche Wechselwirkungsterme werden durch Erhöhung des Farbwertes hinzugefügt. Innerhalb jeder Farbe werden die Kanten sortiert, was physikalisch nichts ändert, aber zu besser lesbaren Ergebnissen führt.
Rückgabe
Ein Qubit-Operator, der ein Quantenmodell vom Typ XYZ beschreibt. Das i-te Qubit im Operator entspricht dem Knoten im Index i auf der Kopplungskarte.
Erhöht
- ValueError - Die Kopplungskonstanten müssen durch eine length-3 Folge von Fließkommazahlen angegeben werden.
- ValueError - Das externe Magnetfeld muss durch eine Folge von Fließkommawerten length-3 angegeben werden.
Rückgabetyp
generate_time_evolution_circuit
generate_time_evolution_circuit(operator, *, synthesis=None, time=1.0)
Modellieren Sie die zeitliche Entwicklung eines Betreibers.
>>> 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)
Parameter
- operator (SparsePauliOp) – Der Operator, für den die zeitliche Entwicklung modelliert werden soll.
- synthesis (EvolutionSynthesis | None) – Eine Synthesestrategie. Wenn
None, ist die Standardsynthese die Lie-Trotter-Produktformel mit einer einzigen Wiederholung. - time (float) – Die Entwicklungszeit.
Rückgabe
A QuantumCircuit einen zeitlich entwickelten Operator zu implementieren.
Rückgabetyp
PauliOrderStrategy
class PauliOrderStrategy(value)
Basen: Enum
Aufzählung der verschiedenen Pauli-Ordnungen.
Bei der Konstruktion eines Hamiltonianers auf einer farbigen Menge von Kanten können die erzeugten Pauli-Terme auf verschiedene Weise geordnet werden. Diese Ordnung der Terme im Hamiltonian wird während der zeitlichen Entwicklung beibehalten und wirkt sich somit direkt auf den resultierenden Quantenkreis aus.
ColorThenInteraction
Standardwert: 1
Diese Strategie durchläuft zunächst alle Kanten (sortiert nach ihrem Farbwert) und dann die Interaktionen (sortiert als X, Y, Z).
InteractionThenColor
Standardwert: 2
Diese Strategie ist das Gegenstück zu ColorThenInteraction. Zuerst werden die Interaktionen (sortiert als X, Y, Z) und dann alle Kanten (sortiert nach ihrem Farbwert) durchlaufen.
InteractionThenColorZigZag
Standardwert: 3
Diese Strategie ähnelt derjenigen von InteractionThenColor . Es wechselt jedoch zwischen der Iteration der Kanten durch Erhöhen und Verringern der Farbwerte, während es von einer Interaktion zur nächsten springt. Wenn beispielsweise nur die Interaktionen X und Y einbezogen und drei Farbwerte verwendet werden ({1, 2, 3}), ergibt sich folgende Reihenfolge: ["X on 1", "X on 2", "X on 3", "Y on 3", "Y on 2", "Y on 1"].