Quantum Portfolio 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 zur Qiskit-Funktion „Quantum Portfolio Optimizer“
Eingabe
Die Eingabeargumente der Funktion sind in der folgenden Liste beschrieben. Die Daten zu den Assets und weitere Problemangaben müssen bereitgestellt werden; darüber hinaus können die VQE-Einstellungen hinzugefügt werden, um den Optimierungsprozess anzupassen.
assets
Typ: `json`
Wörterbuch mit den Kursen der Vermögenswerte. Die Daten müssen als JSON-Objekt strukturiert sein, das Informationen über die Schlusskurse von Finanzanlagen zu bestimmten Zeitpunkten enthält. Das Format lautet wie folgt:
- Primärschlüssel (Zeichenkette): Der Name oder das Tickersymbol des Finanzinstruments (zum Beispiel „ 8801.T “).
- Sekundärschlüssel (Zeichenkette): Das Datum im Format JJJJ-MM-TT.
- Wert (Zahl): Der Schlusskurs des Wertpapiers am angegebenen Datum. Preise können entweder normalisiert oder nicht normalisiert eingegeben werden.
Beachten Sie, dass alle Datenbanken denselben Sekundärschlüssel (Datumsangaben) haben müssen. Fehlt bei einem bestimmten Objekt ein Datum, das bei anderen vorhanden ist, muss dieses Datum ergänzt werden, um die Konsistenz zu gewährleisten. Dies kann beispielsweise durch Verwendung des zuletzt erfassten Schlusskurses dieses Wertpapiers erfolgen.
- Erforderlich: Ja
- Beispiel:
{
"8801.T": {
"2023-01-01": 2374.0,
"2023-01-02": 2374.0,
"2023-01-03": 2374.0,
"2023-01-04": 2356.5,
...
},
"AAPL": {
"2023-01-01": 145.2,
"2023-01-02": 146.5,
"2023-01-03": 147.3,
"2023-01-04": 148.1,
...
},
...
}{
"asset_name": {
"date": closing_value,
...
},
...
}Die Wertpapierdaten müssen mindestens die Schlusskurse zu den (nt+1) * dt Zeitpunkten (siehe Abschnitt qubo_settings „Eingabe“) enthalten (z. B. Tage).
qubo_settings
Typ: `json`
Einstellungen des QUBO. Die folgende Tabelle beschreibt die Schlüssel des qubo_settings Wörterbuchs. Erstellen Sie das Wörterbuch, indem Sie die Anzahl der Zeitschritte nt, die Anzahl der Auflösungsqubits nqund den angeben max_investment – oder ändern Sie andere Standardwerte.
Name | Typ | Beschreibung | Erforderlich | Standard | Beispiel |
|---|---|---|---|---|---|
nt | int | Anzahl der Zeitschritte | Ja | - | 4 |
nq | int | Anzahl der Auflösungsqubits | Ja | - | 4 |
max_investment | Gleitkommazahl | Maximale Anzahl der investierten Währungseinheiten über alle Vermögenswerte hinweg | Ja | - | 10 |
dt* | int | In jedem Zeitschritt berücksichtigter Zeitbereich. Die Einheit gleicht die Zeitintervalle zwischen den Schlüsseln in den Objektdaten an | Nein | 30 Stunden | - |
risk_aversion | Gleitkommazahl | Risikoaversionskoeffizient | Nein | 1.000 | - |
transaction_fee | Gleitkommazahl | Transaktionsgebührenkoeffizient | Nein | 0.01 | - |
restriction_coeff | Gleitkommazahl | Lagrange-Multiplikator zur Durchsetzung der Problemrestriktion innerhalb der QUBO-Formulierung | Nein | 1 | - |
- Erforderlich: Ja
ansatz_settings
Typ: `json`
Standardwert: `None`
Einstellungen des Ansatzes. Um die Standardoptionen zu ändern, erstellen Sie ein Wörterbuch für den ansatz_settings Parameter mit den folgenden Schlüsseln. Standardmäßig ist der Ansatz auf gesetzt "real_amplitudes", und beide zusätzlichen Optionen (siehe folgende Tabelle) sind auf gesetzt False.
Name | Typ | Beschreibung | Erforderlich | Standard |
|---|---|---|---|---|
ansatz* | str | Zu verwendender Ansatz | Nein | "real_amplitudes" |
multiple_passmanager** | Bool | Aktiviert mehrere Passmanager-Subroutinen (nicht verfügbar für den Tailored-Ansatz) | Nein | False |
dd_enable | Bool | Fügt eine dynamische Entkopplung hinzu | Nein | False |
* Mögliche Ansätze
real_amplitudescyclicoptimized_real_amplitudestailored(Nur füribm_torinodas Backend, 7 Assets, 4 Zeitschritte und 4 Auflösungsqubits)
** Wenn auf Falsegesetzt multiple_passmanager ist, verwendet die Funktion den Standard-Pass-Manager von Qiskit mit optimization_level=3. Wenn diese Option aktiviert ist True, vergleicht die multiple_passmanager Subroutine drei Pass-Manager: den bisherigen Standard-Pass-Manager von Qiskit, einen Pass-Manager, der die Qubits auf die Kette der nächsten Nachbarn der QPU abbildet, sowie die AI-Transpiler -Dienste. Anschließend wird der Pass-Manager mit dem geschätzten geringeren kumulativen Fehler ausgewählt.
- Erforderlich: Nein
optimizer_settings
Typ: `json`
Standardwert: `None`
Einstellungen des Optimierers. Dieser Parameter ist ein Wörterbuch mit einigen konfigurierbaren Optionen für den Optimierungsprozess.
Name | Typ | Beschreibung | Erforderlich | Standard |
|---|---|---|---|---|
primitive_options | JSON | Einstellungen der Primitive | Nein | - |
optimizer | str | Ausgewählte klassische Optimierungsverfahren | Nein | "differential_evolution" |
optimizer_options | JSON | Konfiguration des Optimierers | Nein | - |
Derzeit ist die einzige verfügbare "differential_evolution" Optimierungsoption.
Unter den primitive_options``optimizer_options Schlüsseln und legen wir Wörterbücher mit den folgenden Parametern fest:
primitive_options
Name | Typ | Beschreibung | Erforderlich | Standard | Beispiel |
|---|---|---|---|---|---|
sampler_shots | int | Anzahl der Aufnahmen des Samplers. | Nein | 100000 | - |
estimator_shots | int | Anzahl der Aufnahmen des Estimators. | Nein | 25000 | - |
estimator_precision | Gleitkommazahl | Gewünschte Genauigkeit des Erwartungswerts. Falls angegeben, wird die Genauigkeit anstelle von. estimator_shots verwendet. | Nein | None | 0.015625 · (1 / √4096) |
max_time | int oder str | Die maximale Dauer, die eine Laufzeitsitzung offen bleiben kann, bevor sie zwangsweise geschlossen wird. Kann als Zahl (int) oder als Zeichenfolge angegeben werden, z. B. "2h 30m 40s". Muss unter dem vom System vorgegebenen Höchstwert liegen. | Nein | None | "1h 15m" |
optimizer_options
Name | Typ | Beschreibung | Erforderlich | Standard |
|---|---|---|---|---|
num_generations | int | Anzahl der Generationen | Nein | 20 Jahre |
population_size | int | Bevölkerungsgröße | Nein | 20 Jahre |
mutation_range | Liste | Maximaler und minimaler Mutationsfaktor | Nein | [0, 0.25] |
recombination | Gleitkommazahl | Rekombinationsfaktor | Nein | 0.4 |
max_parallel_jobs | int | Maximale Anzahl parallel ausgeführter QPU-Jobs | Nein | 3 |
max_batchsize | int | Maximale Stapelgröße | Nein | 200 |
-
Die Anzahl der durch die differentielle Evolution ausgewerteten Generationen beträgt
num_generations+ 1, da die Ausgangspopulation mitgezählt wird. -
Die Gesamtzahl der Schaltkreise berechnet sich wie folgt
(num_generations + 1) * population_size:. -
Eine größere Populationsgröße und mehr Generationen führen in der Regel zu einer Verbesserung der Qualität der Optimierungsergebnisse. Es wird jedoch davon abgeraten, eine Populationsgröße von 120 und eine Anzahl von mehr als 20 Generationen (z. B.
120 * 21 = 2520die Gesamtzahl der Schaltkreise) zu überschreiten, da dies zu einer übermäßigen Anzahl von Schaltkreisen führen würde, deren Verarbeitung rechenintensiv und zeitaufwendig sein kann. -
Mit dieser Funktion können Sie die vorherige Optimierung fortsetzen, und es ist jederzeit möglich, die Anzahl der Generationen zu erhöhen (indem Sie dieselben Eingabewerte mit Ausnahme von
previous_session_idund einem erhöhtennum_generationsangeben).
- Erforderlich: Nein
backend
Typ: `str`
Der Name des QPU-Backends
- Erforderlich: Nein
- Beispiel:
ibm_torino
previous_session_id
Typ: `list` of `str`
Standardwert: Empty list
Liste der Sitzungs-IDs zum Abrufen von Daten aus früheren Durchläufen. Um eine Ausführung fortzusetzen oder Aufträge abzurufen, die in einer oder mehreren früheren Sitzungen verarbeitet wurden, muss die Liste der Sitzungs-IDs im previous_session_id Parameter übergeben werden. Dies ist besonders nützlich in Fällen, in denen eine Optimierungsaufgabe aufgrund eines Fehlers im Ablauf nicht abgeschlossen werden konnte und die Ausführung dennoch beendet werden muss. Dazu müssen Sie dieselben Argumente wie bei der ersten Ausführung sowie die beschriebene previous_session_id Liste angeben.
- Erforderlich: Nein
- Beispiel:
["session_id_1", "session_id_2"]
apply_postprocess
Typ: `bool`
Standardwert: `True`
Eine rauschbewusste SQD-Nachbearbeitung anwenden.
- Erforderlich: Nein
- Beispiel:
True
tags
Typ: `list` of `str`
Standardwert: Empty list
Liste der Tags zur Identifizierung des Experiments.
- Erforderlich: Nein
- Beispiel:
["optimization", "quantum_computing"]
Das Laden von Daten aus früheren Sitzungen (um eine Optimierung fortzusetzen) kann bis zu einer Stunde Rechenzeit in Anspruch nehmen. Dies beansprucht keine Ressourcen der Quantum-Laufzeitumgebung.
Stellen Sie sicher, dass die Job-Beschränkungen des „ IBM Quantum “-Compute-Dienstes eingehalten werden.
- Beispiel:
sampler_shots <= 10_000_000. - Schätzer:
max_batchsize * estimator_shots * observable_size <= 10_000_000(Bei dieser Funktion kommutieren alle Terme der Observablen, alsoobservable_size=1).
Weitere Informationen finden Sie im Leitfaden zu Job-Limits.
Ausgabe
Die Funktion gibt zwei Wörterbücher zurück: "result" dictionary, das die besten Optimierungsergebnisse enthält, darunter die optimale Lösung und die damit verbundenen minimalen Zielkosten; sowie "metadata", mit Daten zu allen während des Optimierungsprozesses erzielten Ergebnissen sowie den jeweiligen Metriken.
Das erste Wörterbuch konzentriert sich auf die Lösung mit der besten Leistung, während das zweite detaillierte Informationen zu allen Lösungen enthält, einschließlich der objektiven Kosten und anderer relevanter Kennzahlen.
result Wörterverzeichnis
Typ: dict[str, dict[str, float]]
Enthält die Anlagestrategie im Zeitverlauf, wobei jeder Zeitstempel bestimmten Anlagegewichten zugeordnet ist (jedes Gewicht entspricht dem auf den Gesamtanlagebetrag normierten Anlagebetrag).
- Beispiel:
{'time_1': {'asset_1': 0.2, 'asset_2': 0.3, ...}, ...}
metadata Wörterverzeichnis
Typ: dict[str, Any]
Im Rahmen der Analyse generierte Daten, einschließlich Lösungen, Kosten und Kennzahlen.
Name | Typ | Beschreibung | Beispiel |
|---|---|---|---|
session_id | str | Eindeutige Kennung für die Sitzung unter IBM Quantum. | "d0h30qjvpqf00084fgw0" |
all_samples_metrics | dict | Ein Verzeichnis, das verschiedene Kennzahlen für jede nachbearbeitete Stichprobe enthält, wie beispielsweise Kosten oder Einschränkungen. | Siehe Beschreibung |
sampler_counts | [d] ictstr, int | Ein Wörterbuch, bei dem die Schlüssel aus Bitstrings bestehen, die die erfassten Lösungen darstellen, und die Werte deren Häufigkeiten sind. | {"101010": 3, "111000": 1} |
asset_order | [liststr] | Liste mit der jeweiligen Investitionsreihenfolge der Vermögenswerte zu jedem Zeitschritt innerhalb der Anlagestrategien. | ["Asset_0", "Asset_1", "Asset_3"] |
QUBO | Liste[ [listfloat] ] | QUBO-Matrix des Problems. | [[-6.96e-01, 5.81e-01, -1.26e-02, 0.00e+00], ...] |
resource_summary | dict[str, [dic] tstr, float] | Übersicht über die Nutzungszeiten von CPU und QPU (in Sekunden) in den verschiedenen Phasen des Prozesses. | {'RUNNING: EXECUTING_QPU': {'CPU_TIME': 412.84, 'QPU_TIME': 87.22}, ...} |
Beschreibung des all_samples_metrics Wörterbuchs
Name | Typ | Beschreibung | Beispiel |
|---|---|---|---|
investment_trajectories | [ListeListe] | Anlagestrategien, die aus entschlüsselten Quantenzuständen abgeleitet werden. | [[1, 2, 2], [1, 2, 1]] |
counts | [Anhören] | Anzahl der Stichproben für jede Anlageentwicklung. Der Index stimmt überein investment_trajectories. | [5, 3] |
objective_costs | [listfloat] | Wert der Zielfunktion für jeden Investitionsverlauf, sortiert vom niedrigsten zum höchsten Wert. | [0.98, 1.25] |
sharpe_ratios | [listfloat] | Risikoadjustierte Performance (Sharpe-Ratio) für jeden Anlageverlauf. Nach Index sortiert. | [1.1, 0.7] |
returns | [listfloat] | Erwartete Rendite für jeden Anlageverlauf. Nach Index sortiert. | [0.15, 0.10] |
rest_breaches | [listfloat] | Maximale Abweichung von den Vorgaben innerhalb jeder Investitionsentwicklung. Nach Index sortiert. | [0.0, 0.25] |
transaction_costs | [listfloat] | Geschätzte Transaktionskosten für jeden Anlageverlauf. Nach Index sortiert. | [0.01, 0.02] |