Aqarios Constrained Quantum Optimizer – API-Referenz
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.
Anleitung zum Aqarios Constrained Quantum Optimizer
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()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'sexport_as_lp_string() - MPS (
*.mps): Standard-MPS-Dateiformat, das als Zeichenkette exportiert wird, beispielsweise über DOcplex'sexport_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 „ “ 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 Stufe1dreimal 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 > 0eingeben oder den automatischen WertNoneverwenden
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
Nonefü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 in dieser Liste entspricht dem Eintrag 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 |
|---|---|
4710 | Das 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. |
4711 | Die 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. |
4712 | Das 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. |
4719 | Unerwarteter interner Funktionsfehler. Wenden Sie sich unter Angabe Ihrer Stellen-ID an [email protected]. |
- 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
problemZeichenfolge nicht als gültiges LP-, MPS- oder Luna-Modell analysiert werden kann, schlägt der Auftrag mit dem Fehlercode fehl4711. - 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.