Skip to main content
IBM Quantum Platform

Aqarios Constrained Quantum Optimizer – API-Referenz

  • Qiskit Functions

    Qiskit Functions — von Partnerorganisationen entwickelte vorgefertigte Tools — abstrahieren Teile des Softwareentwicklungs-Workflows, um die Erforschung von Algorithmen und die Anwendungsentwicklung im großen Maßstab zu vereinfachen und zu beschleunigen. Klicken Sie hier, um die Anleitung zu dieser Qiskit-Funktion anzuzeigen.

Der „Aqarios Constrained Quantum Optimizer“ löst binäre Optimierungsprobleme mit Nebenbedingungen auf der „ IBM Quantum® “-Hardware. Das Programm akzeptiert Probleme im LP-, MPS- oder Luna-Model-Format und führt intern alle Umformulierungen, die Schaltungssynthese, die Transpilierung sowie den iterativen Warmstart durch, wobei es auf QAOA mit festem Winkel und XY-Mischern zurückgreift.

Die Funktion wird wie folgt geladen und aufgerufen:

optimizer = catalog.load("aqarios/constrained-quantum-optimizer")
job = optimizer.run(problem=lp_str, backend_name="ibm_phoenix")
result = job.result()
Vorschau-Version

Der „Aqarios Constrained Quantum Optimizer“ steht ausschließlich Nutzern der Tarife „ IBM Quantum® Premium Plan “, „Flex Plan“ und „ On-Prem Plan “ zur Verfügung. Es handelt sich um eine Vorabversion, die noch Änderungen unterliegen kann.


Eingaben

In der folgenden Liste finden Sie alle Eingabeparameter, die diese API akzeptiert. Die erforderlichen Parameter müssen bei jedem Aufruf angegeben werden; alle anderen sind optional.

problem

Typ: str

Das zu lösende serialisierte Optimierungsproblem. Es werden drei Formate unterstützt:

  • LP (*.lp): Das Standard-LP-Dateiformat, das als Zeichenfolge exportiert wird, beispielsweise über DOcplex's export_as_lp_string()
  • MPS (*.mps): Standard-MPS-Dateiformat, das als Zeichenkette exportiert wird, beispielsweise über DOcplex's export_as_mps_string()
  • Luna-Modell : Base64-encoded Serialisierung eines Aqarios-Luna-Modell-Objekts, erhalten über model.encode_b64()

Das Modell muss ein binäres Optimierungsproblem darstellen, entweder als Maximierungs- oder als Minimierungsaufgabe. Beschränkungen können Ungleichungen oder Gleichungen über binäre Variablen sein. Ganzzahlige Variablen werden nur unterstützt, wenn eindeutige Ober- und Untergrenzen angegeben sind. Kontinuierliche (reellwertige) Variablen werden nicht unterstützt, und ein Modell, das solche Variablen enthält, führt zu einem Fehler mit dem Fehlercode 4710. Die Zielfunktion und die Nebenbedingungen können höherer Ordnung sein und müssen nicht unbedingt linear sein.

  • Erforderlich: Ja
  • Beispiel-LP:
\Problem name: MIS
Minimize
  obj: ...
Subject To
  c1: ...
  ...
Binaries
  x_0 x_1
End

backend_name

Typ: str or None

Standardwert: None

Der Name des „ IBM Quantum “-Backends, auf dem das Programm ausgeführt werden soll (zum Beispiel "ibm_phoenix"). Wenn diese Funktion auf „“ eingestellt ist None, wählt sie automatisch das am wenigsten ausgelastete verfügbare Gerät aus.

  • Erforderlich: Nein
  • Beispiel: "ibm_phoenix"

options

Typ: dict or None

Standardwert: None

Optionen zur Algorithmuskonfiguration, die das Verhalten des iterativen QAOA mit Warmstart steuern. Optionen werden als Wörterbuch angegeben. In der folgenden Liste finden Sie alle verfügbaren Schlüssel und deren Standardwerte.

  • Erforderlich: Nein
  • Beispiel: {"reps": 2, "num_parallel": 10, "postprocessing_level": 1}

Optionsliste

reps

Typ: int

Standardwert: 1

Anzahl der Wiederholungen der QAOA-Schicht (Parameter „ pp “ für die Schaltungstiefe). Höhere Werte verbessern die Lösungsqualität, führen jedoch zu tieferen Schaltungen und einer längeren Ausführungszeit, was zu mehr Rauschen führen kann.

  • Auswahlmöglichkeiten: Ganzzahl im Bereich [1, 10]
num_parallel

Typ: int

Standardwert: 5

Anzahl der parallel ausgeführten unabhängigen Warmstart-Ketten. Eine Erhöhung dieses Wertes verbessert die Wahrscheinlichkeit, qualitativ hochwertige Lösungen zu finden, erhöht jedoch den Gesamtverbrauch des Shot-Budgets.

  • Auswahlmöglichkeiten: Ganzzahl im Bereich [1, 100]
shots

Typ: int

Standardwert: 500

Anzahl der Messaufnahmen pro Iteration und Kette.

  • Auswahlmöglichkeiten: Ganzzahl im Bereich [1, 10000]
total_shots

Typ: int

Standardwert: 5000

Gesamt-Shot-Budget über alle Iterationen hinweg für eine einzelne Warm-Start-Kette. Die Iterationsschleife für eine Kette wird beendet, sobald dieses Budget aufgebraucht ist.

  • Auswahlmöglichkeiten: Ganzzahl im Bereich [1, 1000000]
epsilon

Typ: float

Standardwert: 0.1

Regularisierungsparameter für die Warmstart-Wahrscheinlichkeiten. Verhindert, dass die Wahrscheinlichkeitsverteilung in einen deterministischen Zustand übergeht, und gewährleistet so, dass die Erkundung über mehrere Iterationen hinweg erhalten bleibt.

  • Auswahlmöglichkeiten: Im Bereich schweben (0.01, 1)
beta

Typ: float

Standardwert: 10

Inverse Temperatur für die Boltzmann-Gewichtung, die zur Ableitung neuer Warmstartzustände aus Messproben verwendet wird. Höhere Werte konzentrieren die Wahrscheinlichkeitsmasse auf Proben mit niedrigerer Energie.

  • Auswahlmöglichkeiten: „Float“ erfüllt die Bedingungen beta > 0
approximation_degree

Typ: float

Standardwert: 1.0

Steuert den Approximationsgrad, der auf die Kostenfunktion und während der Transpilierung angewendet wird. Niedrigere Werte verringern die Schaltungstiefe durch die Einführung von Näherungen, was sich auf die Qualität der Lösung auswirken kann.

  • Auswahlmöglichkeiten: Im Bereich schweben [0.0, 1.0]
postprocessing_level

Typ: int

Standardwert: 3

Wirksamkeit der klassischen Nachbearbeitung, die nach jedem Abtastschritt angewendet wird, um die Lösungsqualität zu verbessern. Höhere Stufen führen zu einer intensiveren lokalen Suche, was jedoch mit einem höheren klassischen Rechenaufwand verbunden ist.

  • Auswahlmöglichkeiten: Ganzzahl im Bereich [0, 3]
    • 0: Nachbearbeitung deaktivieren.
    • 1: Lokale Suche in einem Durchlauf. Versuche, jedes Bit einmal in zufälliger Reihenfolge umzudrehen, und behalte die Umdrehungen bei, die den Energieverbrauch senken.
    • 2: Lokale Suche in drei Durchläufen. Wende die Stufe 1 dreimal in unterschiedlicher zufälliger Reihenfolge an.
    • 3: Gierige lokale Suche. Wende wiederholt den Bit-Flip an, der den Energieverbrauch am stärksten senkt, bis keine weitere Verbesserung mehr möglich ist.
penalty_override

Typ: float or None

Standardwert: None

Überschreibt manuell den Strafwert, der bei der Umwandlung von Nebenbedingungen in Strafterme verwendet wird, die zum Zielterm hinzugefügt werden. Standardmäßig wird die Strafpunktzahl automatisch aus der Problemstruktur abgeleitet. Verwenden Sie diese Option nur, wenn der automatisch ermittelte Wert zu unzulässigen Ergebnissen führt.

  • Auswahlmöglichkeiten: Float-Wert penalty_override > 0 eingeben oder den automatischen Wert None verwenden
use_session

Typ: bool

Standardwert: False

Ob der Sitzungsmodus des „ IBM Quantum Compute “-Dienstes für die Ausführung von Aufträgen verwendet werden soll. Durch die Aktivierung von Sitzungen wird der Overhead bei der Ausführung von Schaltkreisen reduziert, da über mehrere Iterationen hinweg eine dedizierte Verbindung zur QPU aufrechterhalten wird, was die Gesamtlaufzeit verkürzen kann.

  • Auswahlmöglichkeiten: True / False
seed_transpiler

Typ: int or None

Standardwert: None

An den Transpiler übergebener Startwert, der die Schaltung auf das ausgewählte Backend abbildet. Legen Sie einen festen Wert fest, um die Schaltungssynthese und das Routing über mehrere Durchläufe hinweg reproduzierbar zu machen. Wenn die Einstellung auf gesetzt ist None, generiert der Transpiler seinen Startwert nichtdeterministisch, sodass wiederholte Durchläufe desselben Problems zu unterschiedlichen Schaltungslayouts führen können.

  • Möglichkeiten: Eine beliebige ganze Zahl oder None für einen nichtdeterministischen Startwert
job_tags

Typ: list[str]

Standardwert: []

Zusätzliche Tags, die jedem Quantum-Compute-Auftrag hinzugefügt werden, den die Funktion an die QPU übermittelt. Die Funktion versieht ihre Aufträge stets mit "aqarios/constrained-quantum-optimizer" der Funktions-Auftrags-ID und dem Problemnamen; die hier angegebenen Einträge werden dieser Liste angehängt. Verwenden Sie diese Funktion, um die zugrunde liegenden Primitiv-Jobs in Ihrer Workload-Liste zu gruppieren oder zu filtern.

  • Auswahlmöglichkeiten: Liste von Zeichenfolgen
  • Beispiel: ["my-experiment", "mis-benchmark"]

Ausgaben

Die Ausgabe dieser API ist ein von zurückgegebenes Wörterbuch job.result(), das die gefundenen besten Lösungen und die zugehörigen Metadaten enthält.

Typ: dict[str, Any]

Ergebniswörterbuch mit Lösungszuordnungen, Zielwert, Machbarkeitsstatus und Laufzeit-Metadaten.

Beispiel:

{
    'solutions': [{'x_1': 0, 'x_2': 1, 'x_3': 0, 'x_4': 1, 'x_5': 1}],
    'solution_bitstrings': ['01011'],
    'raw_energy': -6.0,
    'objective_value': -6.0,
    'feasible': True,
    'metadata': {
        'resource_usage': {
            'RUNNING: MAPPING': {'CPU': 5.405},
            'RUNNING: OPTIMIZING_FOR_HARDWARE': {'CPU': 9.902},
            'RUNNING: WAITING_FOR_QPU': {'CPU': 25.456},
            'RUNNING: EXECUTING_QPU': {'QPU': 25.202},
            'RUNNING: POST_PROCESSING': {'CPU': 6.481}
        },
        'circuit_metrics': {
            'before_transpilation': {
                'num_qubits': 6,
                'gate_count': 42,
                'depth': 15,
                'two_qubit_gate_count': 12,
                'two_qubit_gate_depth': 7,
                'operations': {'rz': 12, 'p': 8, 'ry': 7, 'rzz': 4, 'cx': 3,
                               'xx_plus_yy': 3, 'global_phase': 2, 'cry': 2, 'x': 1}
            },
            'after_transpilation': {
                'num_qubits': 6,
                'gate_count': 254,
                'depth': 100,
                'two_qubit_gate_count': 48,
                'two_qubit_gate_depth': 33,
                'operations': {'rz': 78, 'sx': 122, 'cz': 48, 'measure': 6, 'x': 0}
            }
        },
        'solver_info': {
            'variable_mapping': {'x_1': 0, 'x_2': 1, 'x_3': 2, 'x_4': 3, 'x_5': 4}
        }
    }
}

Ausgabestruktur

solutions

Typ: list[dict[str, int]]

Eine Liste der besten gefundenen Lösungen. Jeder Eintrag ist ein Wörterbuch, das Variablennamen (zum Beispiel "x_0") ihren binären Zuweisungen (0 oder 1) zuordnet. Die Liste enthält nur dann mehr als einen Eintrag, wenn mehrere entartete Optima identifiziert wurden.

  • Beispiel: [{"x_0": 1, "x_1": 0, "x_2": 1}]

solution_bitstrings

Typ: list[str]

Die gleichen Lösungen wie in solutions, kodiert als Bitfolgen. Der Eintrag ii in dieser Liste entspricht dem Eintrag ii in solutions. Verwenden Sie, um metadata.solver_info.variable_mapping nachzuschlagen, welche Zeichenposition einer Bitfolge welche Variable enthält: Der Wert der Variablen lautet v bitstring[variable_mapping[v]].

  • Beispiel: ["101"]

objective_value

Typ: float

Der objektive Wert der gefundenen besten Lösung, ausgedrückt in Bezug auf das ursprüngliche Problem. Bei Maximierungsaufgaben ist dieser Wert bei besseren Lösungen größer; bei Minimierungsaufgaben ist er kleiner.

  • Beispiel: 42.0

raw_energy

Typ: float

Die QAOA-Rohenergie der besten Lösung, die stets als Minimierungswert angegeben wird. Dies umfasst alle Strafterme, die bei der Neuformulierung des Problems hinzugefügt wurden, und ist hilfreich bei der Diagnose von Verstößen gegen Nebenbedingungen.

  • Beispiel: -38.5

feasible

Typ: bool

Ob die zurückgegebenen Lösungen alle Nebenbedingungen des ursprünglichen Eingabemodells erfüllen. Ein Ergebnis kann undurchführbar sein, wenn die Strafwerte nicht ausreichen, um alle Einschränkungen auf der Hardware durchzusetzen.

  • Beispiel: True

metadata

resource_usage

Typ: dict

Quanten- und klassischer Ressourcenverbrauch, aufgeschlüsselt nach den einzelnen Phasen des Algorithmus (Mapping, Hardware-Optimierung, Ausführung auf der QPU, Nachbearbeitung).

  • Beispiel:
{'RUNNING: MAPPING': {'CPU': 4.57},
 'RUNNING: OPTIMIZING_FOR_HARDWARE': {'CPU': 0.177},
 'RUNNING: WAITING_FOR_QPU': {'CPU': 9.238},
 'RUNNING: EXECUTING_QPU': {'QPU': 30},
 'RUNNING: POST_PROCESSING': {'CPU': 0.093}}

circuit_metrics

Typ: dict or None

Gatteranzahl und Schaltungstiefe der QAOA-Schaltung, angegeben sowohl für die synthetisierte als auch für die auf dem Baustein ausgeführte Version. Der Wert beträgt, wenn None das Problem während der Vorverarbeitung gelöst wurde und kein Schaltkreis ausgeführt wurde (Fehlercode 4712).

before_transpilation

Typ: dict

Metriken des abstrakten QAOA-Schaltkreises, wie er aus dem Problem synthetisiert wurde, bevor er auf das Backend abgebildet wird.

after_transpilation

Typ: dict

Messwerte der Schaltungen, die tatsächlich an das Gerät übermittelt wurden. Als Durchschnitt aller während der Optimierung ausgeführten Durchläufe berechnet und auf die nächste ganze Zahl gerundet.

Beide Einträge enthalten dieselben Felder: num_qubits (Anzahl der Qubits im Schaltkreis), gate_count (Gesamtzahl der Operationen), depth (Schaltkreistiefe), two_qubit_gate_count (Anzahl der Zwei-Qubit-Gatter), two_qubit_gate_depth (Schaltkreistiefe unter Berücksichtigung nur der Zwei-Qubit-Gatter) und operations (Gatterbezeichnung, zugeordnet zur Anzahl ihrer Vorkommen).

solver_info

Typ: dict or None

Weitere Informationen dazu, wie der Solver das Problem dargestellt hat.

variable_mapping

Typ: dict[str, int]

Ordnet jedem Variablennamen seine Zeichenposition in den Einträgen von zu solution_bitstrings.

  • Beispiel: {"x_0": 0, "x_1": 1, "x_2": 2}

Fehlerbehandlung

Code erstellen
Beschreibung
4710Das Eingabemodell wird nicht unterstützt. Das Modell enthält kontinuierliche (reellwertige) Variablen, die die Funktion nicht lösen kann, oder ganzzahlige Variablen ohne explizite Grenzen.
4711Die Eingabezeichenfolge kann nicht in ein Modell geparst werden. Stellen Sie sicher, dass es problem sich um eine gültige Zeichenfolge für ein LP-, MPS- oder Luna-Modell handelt.
4712Das Modell wurde während der Vorverarbeitung bis zur Optimalität gelöst, und es wurde keine Quantenberechnung durchgeführt. Das Ergebnis wird weiterhin zurückgegeben, wobei auf gesetzt metadata.circuit_metrics ist None.
4719Unerwarteter interner Funktionsfehler. Wenden Sie sich unter Angabe Ihrer Stellen-ID an [email protected].
Häufige Fehlerzustände
  • Nicht unterstützte Variablentypen : Die Funktion löst ausschließlich diskrete Probleme. Kontinuierliche (reellwertige) Variablen werden nicht unterstützt, und ganzzahlige Variablen müssen eine explizite Unter- und Obergrenze aufweisen. Ein Modell, das gegen diese Regel verstößt, schlägt mit dem Fehlercode fehl 4710.
  • Ungültiges Problemformat : Wenn die problem Zeichenfolge nicht als gültiges LP-, MPS- oder Luna-Modell analysiert werden kann, schlägt der Auftrag mit dem Fehlercode fehl 4711.
  • Fehler bei der Optionsüberprüfung : Optionsschlüssel oder -werte, die außerhalb der dokumentierten Bereiche liegen, führen dazu, dass der Auftrag sofort mit dem Fehlercode. fehlschlägt 1221.
War diese Seite hilfreich?
Melden Sie auf GitHub einen Fehler, einen Tippfehler oder fordern Sie Inhalte an.