Skip to main content
IBM Quantum Platform

Quantum Portfolio 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.


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,
        ...
    },
    ...
}
Anmerkung

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
ntintAnzahl der ZeitschritteJa-4
nqintAnzahl der AuflösungsqubitsJa-4
max_investmentGleitkommazahlMaximale Anzahl der investierten Währungseinheiten über alle Vermögenswerte hinwegJa-10
dt*intIn jedem Zeitschritt berücksichtigter Zeitbereich. Die Einheit gleicht die Zeitintervalle zwischen den Schlüsseln in den Objektdaten anNein30 Stunden-
risk_aversionGleitkommazahlRisikoaversionskoeffizientNein1.000-
transaction_feeGleitkommazahlTransaktionsgebührenkoeffizientNein0.01-
restriction_coeffGleitkommazahlLagrange-Multiplikator zur Durchsetzung der Problemrestriktion innerhalb der QUBO-FormulierungNein1-
  • 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*strZu verwendender AnsatzNein"real_amplitudes"
multiple_passmanager**BoolAktiviert mehrere Passmanager-Subroutinen (nicht verfügbar für den Tailored-Ansatz)NeinFalse
dd_enableBoolFügt eine dynamische Entkopplung hinzuNeinFalse

* Mögliche Ansätze

  • real_amplitudes
  • cyclic
  • optimized_real_amplitudes
  • tailored (Nur für ibm_torino das 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_optionsJSONEinstellungen der PrimitiveNein-
optimizerstrAusgewählte klassische OptimierungsverfahrenNein"differential_evolution"
optimizer_optionsJSONKonfiguration des OptimierersNein-
Anmerkung

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_shotsintAnzahl der Aufnahmen des Samplers.Nein100000-
estimator_shotsintAnzahl der Aufnahmen des Estimators.Nein25000-
estimator_precisionGleitkommazahlGewünschte Genauigkeit des Erwartungswerts. Falls angegeben, wird die Genauigkeit anstelle von. estimator_shots verwendet.NeinNone0.015625 · (1 / √4096)
max_timeint oder strDie 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.NeinNone"1h 15m"

optimizer_options

Name
Typ
Beschreibung
Erforderlich
Standard
num_generationsintAnzahl der GenerationenNein20 Jahre
population_sizeintBevölkerungsgrößeNein20 Jahre
mutation_rangeListeMaximaler und minimaler MutationsfaktorNein[0, 0.25]
recombinationGleitkommazahlRekombinationsfaktorNein0.4
max_parallel_jobsintMaximale Anzahl parallel ausgeführter QPU-JobsNein3
max_batchsizeintMaximale StapelgrößeNein200
Anmerkung
  • 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 = 2520 die 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_id und einem erhöhten num_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"]
Warnung

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.

Anmerkung

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, also observable_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_idstrEindeutige Kennung für die Sitzung unter IBM Quantum."d0h30qjvpqf00084fgw0"
all_samples_metricsdictEin Verzeichnis, das verschiedene Kennzahlen für jede nachbearbeitete Stichprobe enthält, wie beispielsweise Kosten oder Einschränkungen.Siehe Beschreibung
sampler_counts[d] ictstr, intEin 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"]
QUBOListe[ [listfloat] ]QUBO-Matrix des Problems.[[-6.96e-01, 5.81e-01, -1.26e-02, 0.00e+00], ...]
resource_summarydict[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]
War diese Seite hilfreich?
Melden Sie auf GitHub einen Fehler, einen Tippfehler oder fordern Sie Inhalte an.