Skip to main content
IBM Quantum Platform

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)

GitHub

Generierung eines konnektivitätsbewussten Qubit-Operators, der ein Quantenmodell vom Typ XYZ darstellt.

Diese Funktion implementiert den folgenden Hamiltonian:

H^=∑(j,k)∈E(Jxσjxσkx+Jyσjyσky+Jzσjzσkz)+∑j∈V(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})

Dabei ist G(V,E) der Graph der bereitgestellten Karte coupling .

Anmerkung

Außerhalb der Summation dieser Gleichung ist häufig ein Faktor −12-\frac{1}{2} 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, JiJ_i, in jeder kartesischen Achse.
  • ext_magnetic_field (Sequence[float]) – Die Koeffizienten hih_i, die ein Magnetfeld entlang jeder kartesischen Achse darstellen.
  • pauli_order_strategy (PauliOrderStrategy) – Gibt die Iterationsstrategie an, mit der die Pauli-Terme erzeugt werden. Siehe PauliOrderStrategy fü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

SparsePauliOp

generate_time_evolution_circuit

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

GitHub

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)
Ausgabe des vorherigen Codes.

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

QuantumCircuit

PauliOrderStrategy

class PauliOrderStrategy(value)

GitHub

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

War diese Seite hilfreich?
Melden Sie auf GitHub einen Fehler, einen Tippfehler oder fordern Sie Inhalte an.