Iskay Quantum Optimizer – Eine Qiskit-Funktion von Kipu Quantum
Siehe API-Referenz
- Qiskit-Funktionen sind eine experimentelle Funktion, die nur für Benutzer des IBM Quantum® Premium Plan, Flex Plan und On-Prem (über IBM Quantum Platform API) Plan verfügbar ist. Sie befinden sich im Status einer Vorabversion und können sich noch ändern.
Übersicht
Mit dem Iskay Quantum Optimizer von Kipu Quantum können Sie komplexe Optimierungsprobleme mit IBM® Quantencomputern angehen. Dieser Solver nutzt den innovativen bf-DCQO-Algorithmus von Kipu, der nur die Zielfunktion als Eingabe benötigt, um automatisch Problemlösungen zu liefern. Es kann Optimierungsprobleme mit bis zu 156 Qubits lösen und ermöglicht die Nutzung aller Qubits der IBM Quantengeräte. Der Optimierer verwendet ein 1-to-1 Mapping zwischen klassischen Variablen und Qubits, das es Ihnen ermöglicht, Optimierungsprobleme mit bis zu 156 binären Variablen zu lösen.
Der Optimizer ermöglicht das Lösen von uneingeschränkten binären Optimierungsproblemen. Zusätzlich zu der häufig verwendeten QUBO-Formulierung (Quadratic Unconstrained Binary Optimization) unterstützt es auch Optimierungsprobleme höherer Ordnung (HUBO). Der Löser verwendet einen nicht-variablen Quantenalgorithmus, der den Großteil der Berechnungen auf Quantengeräten durchführt.
Im Folgenden finden Sie weitere Einzelheiten über den verwendeten Algorithmus und eine kurze Anleitung zur Verwendung der Funktion sowie Benchmarking-Ergebnisse zu verschiedenen Problemfällen unterschiedlicher Größe und Komplexität.
Beschreibung
Der Optimizer ist eine gebrauchsfertige Implementierung modernster Quantenoptimierungsalgorithmen. Es löst Optimierungsprobleme, indem es hochkomprimierte Quantenschaltungen auf Quantenhardware ausführt. Diese Kompression wird durch die Einführung gegendiabatischer Terme in die zugrunde liegende Zeitentwicklung des Quantensystems erreicht. Der Algorithmus führt mehrere Iterationen von Hardware-Durchläufen durch, um die endgültigen Lösungen zu erhalten, und kombiniert diese mit einer Nachbearbeitung. Diese Schritte sind nahtlos in den Arbeitsablauf des Optimierers integriert und werden automatisch ausgeführt.
Wie funktioniert der Quantum Optimizer?
Dieser Abschnitt beschreibt die Grundlagen des implementierten bf-DCQO-Algorithmus. Eine Einführung in den Algorithmus finden Sie auch auf dem Qiskit-Kanal „ YouTube “.
Der Algorithmus basiert auf der zeitlichen Entwicklung eines Quantensystems, das über die Zeit transformiert wird, wobei die Problemlösung im Grundzustand des Quantensystems am Ende der Entwicklung kodiert ist. Nach dem adiabatischen Theorem muss diese Entwicklung langsam sein, damit das System in seinem Grundzustand bleibt. Die Digitalisierung dieser Entwicklung ist die Grundlage der digitalisierten adiabatischen Quantenberechnung (DQA) und des berüchtigten QAOA-Algorithmus. Die geforderte langsame Evolution ist jedoch bei zunehmender Problemgröße nicht machbar, da sie zu einer zunehmenden Schaltungstiefe führt. Durch die Verwendung von gegendiabatischen Protokollen können Sie unerwünschte Anregungen unterdrücken, die während kurzer Entwicklungszeiten auftreten, während Sie im Grundzustand bleiben. In diesem Fall führt die Digitalisierung dieser kürzeren Entwicklungszeit zu Quantenschaltungen mit geringerer Tiefe und weniger Verschränkungsgattern.
Die Schaltungen der bf-DCQO-Algorithmen benötigen typischerweise bis zu zehnmal weniger Verschränkungsgatter als DQA und drei- bis viermal weniger Verschränkungsgatter als Standard-QAOA-Implementierungen. Aufgrund der geringeren Anzahl von Gattern treten bei der Ausführung der Schaltung in der Hardware weniger Fehler auf. Daher muss der Optimierer keine Techniken wie Fehlerunterdrückung oder -minderung anwenden. Durch ihre Implementierung in künftigen Versionen kann die Qualität der Lösung noch weiter verbessert werden.
Obwohl der bf-DCQO-Algorithmus Iterationen verwendet, ist er nicht-variabel. Nach jeder Iteration des Algorithmus wird die Verteilung der Zustände gemessen. Die erhaltene Verteilung wird zur Berechnung eines so genannten Bias-Feldes verwendet. Das Bias-Feld ermöglicht es, die nächste Iteration von einem Energiezustand in der Nähe der zuvor gefundenen Lösung zu beginnen. Auf diese Weise bewegt sich der Algorithmus mit jeder Iteration zu Lösungen mit geringerer Energie. In der Regel reichen etwa zehn Iterationen aus, um zu einer Lösung zu konvergieren, was insgesamt eine viel geringere Anzahl von Iterationen erfordert als bei Variationsalgorithmen, die in der Größenordnung von etwa 100 Iterationen liegen.
Der Optimierer kombiniert den bf-DCQO-Algorithmus mit klassischem Post-Processing. Nach der Messung der Verteilung der Zustände wird eine lokale Suche durchgeführt. Während der lokalen Suche werden die Bits der gemessenen Lösung zufällig umgedreht. Nach der Umkehrung wird die Energie der neuen Bitfolge bewertet. Wenn die Energie niedriger ist, wird die Bitfolge als neue Lösung beibehalten. Die lokale Suche skaliert nur linear mit der Anzahl der Qubits und ist daher rechnerisch günstig. Da die Nachbearbeitung lokale Bitflips korrigiert, gleicht sie Bitflip-Fehler aus, die oft das Ergebnis von Hardwaremängeln und Auslesefehlern sind.
Arbeitsablauf
Es folgt eine schematische Darstellung des Arbeitsablaufs des Quantum Optimizer.
Mit dem Quantum Optimizer kann die Lösung eines Optimierungsproblems auf Quanten-Hardware reduziert werden auf
- Formulieren Sie die Zielfunktion des Problems
- Zugriff auf den Optimierer über Qiskit-Funktionen
- Führen Sie den Optimierer aus und sammeln Sie das Ergebnis
Benchmarks
Die Leistung kann sowohl von der jeweiligen Problemstellung als auch von den nachfolgenden Verarbeitungsschritten abhängen. In manchen Fällen können klassische Stichproben und quantengenerierte Stichproben nach einer gleichwertigen Nachbearbeitung eine ähnliche Qualität der Endlösung erzielen. Bei der Bewertung sollte daher der gesamte Optimierungsablauf berücksichtigt werden.
Die nachstehenden Benchmark-Metriken zeigen, dass der Optimierer Probleme mit bis zu 156 Qubits effektiv löst und bieten einen allgemeinen Überblick über die Genauigkeit und Skalierbarkeit des Optimierers bei verschiedenen Problemtypen. Beachten Sie, dass die tatsächlichen Leistungskennzahlen je nach den spezifischen Problemmerkmalen variieren können, wie z. B. die Anzahl der Variablen, die Dichte und Lokalität der Terme in der Zielfunktion und die polynomiale Ordnung.
Die folgende Tabelle enthält die Annäherungsrate (AR), eine wie folgt definierte Kennzahl:
ist die Zielfunktion, und sind ihr Minimal- bzw. Maximalwert und sind die Kosten der besten gefundenen Lösung. Daher bedeutet AR=100%, dass der Grundzustand des Problems erreicht wurde.
Beispiel | Anzahl der Qubits | Annäherungsrate | Gesamtzeit (S) | Laufzeitverbrauch (s) | Gesamtzahl der Schüsse | Anzahl der Iterationen |
|---|---|---|---|---|---|---|
| Ungewichtet MaxCut | 28 | 100 % | 180 | 30 Stunden | 30k | 5 |
| Ungewichtet MaxCut | 30 Stunden | 100 % | 180 | 30 Stunden | 30k | 5 |
| Ungewichtet MaxCut | 32 | 100 % | 180 | 30 Stunden | 30k | 5 |
| Ungewichtet MaxCut | 80 | 100 % | 480 | 60.000 | 90k | 9 |
| Ungewichtet MaxCut | 100 | 100 % | 330 | 60.000 | 60k | 6 |
| Ungewichtet MaxCut | 120 | 100 % | 370 | 60.000 | 60k | 6 |
| HUBO 1 | 156 | 100 % | 600 | 70 | 100k | 10 |
| HUBO 2 | 156 | 100 % | 600 | 70 | 100k | 10 |
- Die MaxCut Instanzen mit 28, 30 und 32 Qubits wurden auf ibm_sherbrooke ausgeführt. Die Instanzen mit 80, 100 und 120 wurden auf einem Heron r2 Prozessor ausgeführt.
- Die HUBO-Instanzen wurden ebenfalls auf einem Heron r2 Prozessor ausgeführt.
Alle Benchmark-Instanzen sind unter GitHub zugänglich (siehe Kipu-Benchmark-Instanzen ). Ein Beispiel für die Ausführung dieser Instanzen finden Sie in Beispiel 3: Benchmark-Instanzen.
Erste Schritte
In dieser Dokumentation werden wir die Schritte zur Verwendung des Iskay Quantum Optimizers durchgehen. Dabei zeigen wir Ihnen schnell, wie Sie die Funktion aus dem Katalog laden und Ihr Problem in eine gültige Eingabe umwandeln können, während wir Ihnen gleichzeitig zeigen, wie Sie mit verschiedenen optionalen Parametern experimentieren können.
Ein ausführlicheres Beispiel finden Sie im Tutorial „Lösen Sie das Problem der Marktaufteilung mit dem Iskay Quantum Optimizer von Kipu Quantum “, in dem wir den gesamten Prozess der Verwendung des Iskay Solvers zur Lösung des Problems der Marktaufteilung durchgehen. Dabei handelt es sich um eine reale Herausforderung der Ressourcenallokation, bei der Märkte in ausgewogene Vertriebsregionen aufgeteilt werden müssen, um genaue Nachfragziele zu erreichen.
Authentifizieren Sie sich mit Ihrem API-Schlüssel, den Sie auf dem IBM Quantum Platform Dashboard finden, und wählen Sie die Qiskit-Funktion wie folgt aus:
Der folgende Code setzt voraus, dass Sie Ihre Anmeldedaten gespeichert haben. Falls Sie dies noch nicht getan haben, befolgen Sie die Anweisungen unter „ IBM Cloud -Konto speichern“, um sich mit Ihrem API-Schlüssel zu authentifizieren.
from qiskit_ibm_catalog import QiskitFunctionsCatalog
catalog = QiskitFunctionsCatalog(
channel="ibm_quantum_platform",
instance="INSTANCE_CRN",
# For `token`, use the 44-character API_KEY you created
# and saved from the IBM Quantum Platform Home dashboard
token="YOUR_API_KEY",
)
# verify that you have access to the function
catalog.list()Output:
[QiskitFunction(qunova/hivqe-chemistry),
QiskitFunction(global-data-quantum/quantum-portfolio-optimizer),
QiskitFunction(algorithmiq/tem),
QiskitFunction(qedma/qesem),
QiskitFunction(multiverse/singularity),
QiskitFunction(ibm/circuit-function),
QiskitFunction(q-ctrl/optimization-solver),
QiskitFunction(colibritd/quick-pde),
QiskitFunction(q-ctrl/performance-management),
QiskitFunction(kipu-quantum/iskay-quantum-optimizer)]
# Access Function
optimizer = catalog.load("kipu-quantum/iskay-quantum-optimizer")Beispiel für eine benutzerdefinierte Konfiguration
So kannst du Iskay mit verschiedenen Einstellungen konfigurieren:
custom_options = {
"shots": 15_000, # Higher shot count for better statistics
"num_iterations": 12, # More iterations for solution refinement
"preprocessing_level": 1, # Light preprocessing for problem simplification
"postprocessing_level": 2, # Maximum postprocessing for solution quality
"transpilation_level": 3, # Use higher transpilation level to optimize circuit
"seed_transpiler": 42, # Fixed seed for reproducible results
"job_tags": ["custom_config"], # Custom tracking tags
}Seed-Optimierung : Beachten Sie, dass standardmäßig seed_transpiler``None auf gesetzt ist. Dadurch wird der automatische Optimierungsprozess des Transpilers aktiviert. Wenn None, startet das System einen Versuch mit mehreren Startwerten und wählt denjenigen aus, der die beste Schaltungstiefe erzeugt, wobei die volle Leistungsfähigkeit des max_trials Parameters für jede Transpilierungsstufe genutzt wird.
Leistung auf Transpilierungsstufe : Eine Erhöhung der Anzahl von max_trials mit höheren Werten für transpilation_level führt zwangsläufig zu einer Verlängerung der Transpilierungszeit, verändert jedoch nicht immer die endgültige Schaltung – dies hängt stark von der spezifischen Schaltungsstruktur und Komplexität ab. Bei einigen Schaltkreisen/Problemen kann der Unterschied zwischen 10 Versuchen (Stufe 1) und 50 Versuchen (Stufe 5) jedoch dramatisch sein, sodass die Untersuchung dieser Parameter der Schlüssel zum erfolgreichen Finden einer Lösung sein könnte.
Beispiel 1: Einfache Kostenfunktion
Betrachten Sie die Kostenfunktion in der Spin-Formulierung:
wobei .
Die Lösung für diese einfache Kostenfunktion lautet
mit Mindestwert
1. Erstellen Sie die Zielfunktion
Wir beginnen mit der Erstellung eines Wörterbuchs mit den Koeffizienten der Zielfunktion wie folgt:
objective_func = {
"()": 1,
"(0,)": 1.5,
"(1,)": 2,
"(2,)": 1.3,
"(0, 3)": 2.5,
"(1, 4)": 3.5,
"(0, 1, 2)": 4,
}2. Führen Sie den Optimierer aus
Wir lösen das Problem, indem wir den Optimierer laufen lassen. Da müssen wir problem_type=spin einstellen.
# Setup options to run the optimizer
options = {"shots": 5000, "num_iterations": 5, "use_session": True}
arguments = {
"problem": objective_func,
"problem_type": "spin",
"backend_name": backend_name, # such as "ibm_fez"
"options": options,
}
job = optimizer.run(**arguments)
# Print the ID so you can use it later, if necessary
print(job.job_id)3. Das Ergebnis abrufen
Die Lösung des Optimierungsproblems wird direkt vom Optimierer bereitgestellt.
print(job.result())Es wird ein Wörterbuch der Form angezeigt:
{'solution': {'0': -1, '1': -1, '2': -1, '3': 1, '4': 1},
'solution_info': {'bitstring': '11100',
'cost': -13.8,
'seed_transpiler': 42,
'mapping': {0: 0, 1: 1, 2: 2, 3: 3, 4: 4}},
'prob_type': 'spin'}
Beachten Sie, dass das Wörterbuch solution den Ergebnisvektor anzeigt.
Beispiel 2: MaxCut
Viele Graphenprobleme wie MaxCut oder Maximale unabhängige Menge sind NP-schwere Probleme und ideale Kandidaten für das Testen von Quantenalgorithmen und Hardware. Dieses Beispiel demonstriert die Lösung des MaxCut Problems eines 3-regulären Graphen mit dem Quantum Optimizer.
Um dieses Beispiel auszuführen, müssen Sie zusätzlich zu qiskit-ibm-catalog das Paket networkx installieren. Führen Sie folgenden Befehl aus, um sie zu installieren:
# %pip install networkx numpy1. Erstellen Sie die Zielfunktion
Beginnen Sie mit der Erzeugung eines zufälligen 3-regulären Graphen. Für dieses Diagramm definieren wir die Zielfunktion des MaxCut Problems.
import networkx as nx
# Create a random 3-regular graph
G = nx.random_regular_graph(3, 10, seed=42)
# Create the objective function for MaxCut in Ising formulation
def graph_to_ising_maxcut(G):
"""
Convert a NetworkX graph to an Ising Hamiltonian for the max-cut problem.
Args:
G (networkx.Graph): The input graph.
Returns:
dict: The objective function of the Ising model
"""
# Initialize the linear and quadratic coefficients
objective_func = {}
# Populate the coefficients
for i, j in G.edges:
objective_func[f"({i}, {j})"] = 0.5
return objective_func
objective_func = graph_to_ising_maxcut(G)2. Führen Sie den Optimierer aus
Lösen Sie das Problem, indem Sie den Optimierer ausführen.
options = {"shots": 5000, "num_iterations": 5, "use_session": True}
arguments = {
"problem": objective_func,
"problem_type": "spin",
"backend_name": backend_name, # such as "ibm_fez"
"options": options,
}
job = optimizer.run(**arguments)3. Das Ergebnis abrufen
Abrufen des Ergebnisses und Zurückführen der Lösungs-Bitstrings auf die ursprünglichen Graphknoten.
print(job.result())Die Lösung des Maxcut-Problems ist direkt im Unterverzeichnis solution des Ergebnisobjekts enthalten
maxcut_solution = job.result()["solution"]Beispiel 3: Benchmark-Instanzen
Die Benchmark-Instanzen sind unter „GitHub: -Kipu-Benchmark-Instanzen” verfügbar.
Die Instanzen können mit der Bibliothek pygithub geladen werden. Führen Sie folgenden Befehl aus, um sie zu installieren:
# %pip install pygithubDie Pfade für die Benchmark-Instanzen sind:
Maxcut:
'maxcut/maxcut_regular_3_100_nodes_weighted.json''maxcut/maxcut_regular_3_140_nodes_weighted.json''maxcut/maxcut_regular_3_150_nodes_weighted.json''maxcut/maxcut_regular_4_130_nodes_weighted.json'
HUBO:
'HUBO/hubo1_marrakesh.json''HUBO/hubo2_marrakesh.json'
Um die Leistung des Benchmarks für die HUBO-Instanzen zu reproduzieren, wählen Sie das Backend ibm_marrakesh und setzen Sie direct_qubit_mapping auf True im Unterverzeichnis options .
Im folgenden Beispiel wird die Maxcut-Instanz mit 150 Knoten ausgeführt.
from github import Github
import urllib
import json
import ast
repo = "Kipu-Quantum-GmbH/benchmark-instances"
path = "maxcut/maxcut_regular_3_150_nodes_weighted.json"
gh = Github()
repo = gh.get_repo(repo)
branch = "main"
file = repo.get_contents(urllib.parse.quote(path), ref=branch)
# load json file with benchmark problem
problem_json = json.loads(file.decoded_content)
# convert objective function to compatible format
objective_func = {
key: ast.literal_eval(value) for key, value in problem_json.items()
}
# Setup configuration to run the optimizer
options = {
"shots": 5_000,
"num_iterations": 5,
"use_session": True,
"direct_qubit_mapping": False,
}
arguments = {
"problem": objective_func,
"problem_type": "spin",
"backend_name": "<BACKEND-NAME>",
"options": options,
}
job = optimizer.run(**arguments)
result = job.result()Anwendungsfälle
Typische Anwendungsfälle für den Optimierungslöser sind kombinatorische Optimierungsprobleme. Sie können Probleme aus vielen Branchen lösen, z. B. aus dem Finanzwesen, der Pharmazie oder der Logistik. Beispiele:
- Portfolio-Optimierung (QUBO): wissenschaftliche Veröffentlichung und Whitepaper
- Proteinfaltung (HUBO): wissenschaftliche Veröffentlichung
- Logistikplanung (QUBO): wissenschaftliche Veröffentlichung
- Netzoptimierung: Webinar
- Marktaufteilung (QUBO): Tutorial
Wenn Sie daran interessiert sind, einen bestimmten Anwendungsfall anzugehen und eine spezielle Zuordnung zu entwickeln, können wir Ihnen dabei helfen. Kontaktieren Sie uns.
Unterstützung anfordern
Für Unterstützung wenden Sie sich bitte an [email protected].
Nächste Schritte
- Beantragen Sie Zugang zum Quantum Optimizer von Kipu Quantum.
- Rufen Sie die API-Referenz für diese Qiskit-Funktion auf.
- Probieren Sie das Tutorial „Iskay Quantum Optimizer” von Kipu Quantum aus, um das Problem der Marktsplittung zu lösen.
- Rezension Romero, S. V., et al. (2025). Bias-Field-digitalisierter kontradabatischer Quantenalgorithmus für die binäre Optimierung höherer Ordnung. arXiv Vorabdruck arXiv:2409.04477.
- Rezension Cadavid, A. G., et al. (2024). Bias-Feld-digitalisierte kontradabatische Quantenoptimierung. arXiv Vorabdruck arXiv:2405.13898.
- Rezension Chandarana, P., et al. (2025). Laufzeit-Quantenvorteil mit digitaler Quantenoptimierung. arXiv Vorabdruck arXiv:2505.08663.
Weitere Informationen
Iskay ist, wie unser Firmenname Kipu Quantum, ein peruanisches Wort. Obwohl wir ein Startup aus Deutschland sind, stammen diese Worte aus dem Heimatland eines unserer Mitbegründer, wo das Quipu eine der allerersten Rechenmaschinen war, die 2000 Jahre vor Christus von der Menschheit entwickelt wurde.