Skip to main content
IBM Quantum Platform

Référence de l'API Quantum Portfolio Optimizer

  • Qiskit Functions

    Qiskit Functions — des outils prêts à l'emploi développés par des organisations partenaires — permettent d'abstraire certaines étapes du processus de développement logiciel afin de simplifier et d'accélérer la découverte d'algorithmes et le développement d'applications à grande échelle. Cliquez ici pour consulter le guide de cette fonction Qiskit.


Entrée

Les arguments d'entrée de la fonction sont décrits dans la liste suivante. Les données relatives aux actifs et les autres spécifications du problème doivent être fournies; en outre, les paramètres VQE peuvent être inclus afin de personnaliser le processus d'optimisation.

assets

Type: `json`

Dictionnaire contenant les cours des actifs. Les données doivent être structurées sous la forme d'un objet JSON contenant des informations sur les cours de clôture d'actifs financiers à des dates précises. Le format est le suivant :

  • Clé primaire (chaîne de caractères) : le nom ou le symbole boursier de l'actif financier (par exemple, « 8801.T »).
  • Clé secondaire (chaîne de caractères) : la date au format AAAA-MM-JJ.
  • Valeur (chiffre) : cours de clôture de l'actif à la date indiquée. Les prix peuvent être saisis sous forme normalisée ou non normalisée.

Notez que tous les dictionnaires doivent avoir la même clé secondaire (dates). Si un élément ne comporte pas de date alors que d'autres en ont une, il faut compléter cette information afin de garantir la cohérence. Par exemple, cela peut se faire en utilisant le dernier cours de clôture enregistré pour cet actif.

  • Obligatoire : oui
  • Exemple :
{
    "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,
        ...
    },
    ...
}
Remarque

Les données relatives aux actifs doivent contenir, au minimum, les cours de clôture à des intervalles de temps (nt+1) * dt (par exemple, des jours) (voir la section « qubo_settings Saisie »).

qubo_settings

Type: `json`

Paramètres du QUBO. Le tableau suivant présente les clés du qubo_settings dictionnaire. Créez le dictionnaire en précisant le nombre de pas de temps nt, le nombre de qubits de résolution nq et le max_investment - ou modifiez d'autres valeurs par défaut.

Nom
Type
Description
Obligatoire
Par défaut
Exemple
ntintNombre de pas de tempsOui-4
nqintNombre de qubits de résolutionOui-4
max_investmentséparerNombre maximal d'unités monétaires investies dans l'ensemble des actifsOui-10
dt*intIntervalle de temps pris en compte à chaque pas de temps. L'unité correspond aux intervalles de temps entre les clés dans les données d'actifsNon30-
risk_aversionséparerCoefficient d'aversion au risqueNon1 000-
transaction_feeséparerCoefficient des frais de transactionNon0.01-
restriction_coeffséparerMultiplicateur de Lagrange utilisé pour respecter la contrainte du problème dans la formulation QUBONon1-
  • Obligatoire : oui

ansatz_settings

Type: `json`

Valeur par défaut: `None`

Paramètres de l'ansatz. Pour modifier les options par défaut, créez un dictionnaire pour le ansatz_settings paramètre avec les clés suivantes. Par défaut, l'ansatz est défini sur "real_amplitudes", et les deux options supplémentaires (voir le tableau ci-dessous) sont définies sur False.

Nom
Type
Description
Obligatoire
Par défaut
ansatz*strMéthode à utiliserNon"real_amplitudes"
multiple_passmanager**booléenActive plusieurs sous-routines de gestion des passes (non disponible pour l'approche sur mesure)NonFalse
dd_enablebooléenAjoute un découplage dynamiqueNonFalse

* Approches possibles

  • real_amplitudes
  • cyclic
  • optimized_real_amplitudes
  • tailored (Uniquement pour ibm_torino le backend, 7 ressources, 4 pas de temps et 4 qubits de résolution)

** Si multiple_passmanager est défini sur False, la fonction utilise le gestionnaire de passes par défaut de Qiskit avec optimization_level=3. Si cette option est activée True, la multiple_passmanager sous-routine compare trois gestionnaires de passes : le gestionnaire de passes Qiskit par défaut précédent, un gestionnaire de passes mappant les qubits sur la chaîne des voisins immédiats du QPU, et les services du transpileur IA. On sélectionne alors le gestionnaire de passes présentant l'erreur cumulative estimée la plus faible.

  • Obligatoire : Non

optimizer_settings

Type: `json`

Valeur par défaut: `None`

Paramètres de l'optimiseur. Ce paramètre est un dictionnaire contenant certaines options paramétrables du processus d'optimisation.

Nom
Type
Description
Obligatoire
Par défaut
primitive_optionsjsonParamètres de la primitiveNon-
optimizerstrOptimiseur classique sélectionnéNon"differential_evolution"
optimizer_optionsjsonConfiguration de l'optimiseurNon-
Remarque

À l'heure actuelle, la seule option d'optimisation disponible est "differential_evolution".

Sous les clés primitive_options``optimizer_options et, nous définissons des dictionnaires avec les paramètres suivants :

primitive_options

Nom
Type
Description
Obligatoire
Par défaut
Exemple
sampler_shotsintNombre de prises de vue du Sampler.Non100000-
estimator_shotsintNombre de prises de vue de l'Estimator.Non25000-
estimator_precisionséparerNiveau de précision souhaité pour la valeur attendue. Si elle est spécifiée, la précision estimator_shotssera utilisée à la place de.NonNone0.015625 · (1 / racine carrée de 4096)
max_timeint ou strDurée maximale pendant laquelle une session d'exécution peut rester ouverte avant d'être fermée de force. Peut être spécifié sous forme de nombre entier (int) ou de chaîne de caractères, par exemple "2h 30m 40s". Doit être inférieur à la valeur maximale imposée par le système.NonNone"1h 15m"

optimizer_options

Nom
Type
Description
Obligatoire
Par défaut
num_generationsintNombre de générationsNon20
population_sizeintTaille de la populationNon20
mutation_rangelisteFacteur de mutation maximal et minimalNon[0, 0.25]
recombinationséparerFacteur de recombinaisonNon0.4
max_parallel_jobsintNombre maximal de tâches QPU exécutées en parallèleNon3
max_batchsizeintTaille de lot maximaleNon200
Remarque
  • Le nombre de générations évaluées par l'évolution différentielle est num_generations de + 1, car la population initiale est incluse.

  • Le nombre total de circuits est calculé comme suit (num_generations + 1) * population_size:

  • Le fait d'utiliser une population plus importante et un plus grand nombre de générations améliore généralement la qualité des résultats de l'optimisation. Il est toutefois déconseillé de dépasser une taille de population de 120 individus et un nombre de générations supérieur à 20 (par exemple, 120 * 21 = 2520 le nombre total de cycles), car cela générerait un nombre excessif de cycles, ce qui peut s'avérer coûteux en termes de ressources informatiques et prendre beaucoup de temps à traiter.

  • Cette fonction vous permet de reprendre l'optimisation précédente, et il est toujours possible d'augmenter le nombre de générations (en fournissant les mêmes données d'entrée, à l'exception de previous_session_id et d'une valeur accrue de num_generations).

  • Obligatoire : Non

backend

Type: `str`

Nom du backend QPU

  • Obligatoire : Non
  • Exemple:ibm_torino

previous_session_id

Type: `list` of `str`

Valeur par défaut: Empty list

Liste des identifiants de session permettant de récupérer les données des exécutions précédentes. Pour reprendre une exécution ou récupérer des tâches traitées lors d'une ou plusieurs sessions précédentes, la liste des identifiants de session doit être transmise via le previous_session_id paramètre. Cela s'avère particulièrement utile lorsque la tâche d'optimisation n'a pas pu être menée à bien en raison d'une erreur survenue au cours du processus et qu'il est nécessaire de terminer l'exécution. Pour ce faire, vous devez fournir les mêmes arguments que ceux utilisés lors de l'exécution initiale, ainsi que la previous_session_id liste telle qu'elle est décrite.

  • Obligatoire : Non
  • Exemple:["session_id_1", "session_id_2"]

apply_postprocess

Type: `bool`

Valeur par défaut: `True`

Appliquer un post-traitement SQD tenant compte du bruit.

  • Obligatoire : Non
  • Exemple:True

tags

Type: `list` of `str`

Valeur par défaut: Empty list

Liste des balises permettant d'identifier l'expérience.

  • Obligatoire : Non
  • Exemple:["optimization", "quantum_computing"]
Avertissement

Le chargement des données issues de sessions précédentes (pour reprendre une optimisation) peut prendre jusqu'à une heure de temps de calcul classique. Cela ne mobilise pas de ressources d'exécution de Quantum.

Remarque

Veillez à respecter les limites d'exécution des tâches du service de calcul d' IBM Quantum.

  • Extrait : sampler_shots <= 10_000_000.
  • Estimateur : max_batchsize * estimator_shots * observable_size <= 10_000_000 (pour cette fonction, tous les termes de l'observable commutent, donc observable_size=1).

Pour plus d'informations, consultez le guide sur les limites des tâches.


Sortie

La fonction renvoie deux dictionnaires : "result" dictionary, qui contient les meilleurs résultats de l'optimisation, notamment la solution optimale et le coût objectif minimal qui lui est associé; et "metadata", qui contient les données de tous les résultats obtenus au cours du processus d'optimisation, ainsi que leurs métriques respectives.

Le premier dictionnaire met l'accent sur la solution la plus performante, tandis que le second fournit des informations détaillées sur toutes les solutions, y compris les coûts objectifs et d'autres indicateurs pertinents.

result dictionnaire

Type: dict[str, dict[str, float]]

Contient la stratégie d'investissement au fil du temps, chaque horodatage correspondant à des pondérations d'investissement spécifiques à chaque actif (chaque pondération correspondant au montant de l'investissement rapporté au montant total de l'investissement).

  • Exemple:{'time_1': {'asset_1': 0.2, 'asset_2': 0.3, ...}, ...}

metadata dictionnaire

Type: dict[str, Any]

Les données générées au cours de l'analyse, notamment les solutions, les coûts et les indicateurs.

Nom
Type
Description
Exemple
session_idstrIdentifiant unique de la session IBM Quantum."d0h30qjvpqf00084fgw0"
all_samples_metricsdictDictionnaire contenant divers indicateurs pour chaque échantillon post-traité, tels que les coûts ou les contraintes.Voir la description
sampler_counts[d] ictstr, intDictionnaire dans lequel les clés sont des représentations sous forme de chaînes de bits de solutions échantillonnées et les valeurs correspondent à leur nombre.{"101010": 3, "111000": 1}
asset_order[liststr]Liste indiquant l'ordre d'investissement correspondant des actifs à chaque étape temporelle dans le cadre des stratégies d'investissement.["Asset_0", "Asset_1", "Asset_3"]
QUBOliste[ [listfloat] ]Matrice QUBO du problème.[[-6.96e-01, 5.81e-01, -1.26e-02, 0.00e+00], ...]
resource_summarydict[chaîne, [chaîne] _de_dictionnaire, nombre]Résumé des durées d'utilisation du CPU et du QPU (en secondes) aux différentes étapes du processus.{'RUNNING: EXECUTING_QPU': {'CPU_TIME': 412.84, 'QPU_TIME': 87.22}, ...}

Description du all_samples_metrics dictionnaire

Nom
Type
Description
Exemple
investment_trajectories[liste]Stratégies d'investissement issues de l'interprétation d'états quantiques.[[1, 2, 2], [1, 2, 1]]
counts[liste]Nombre de fois où chaque trajectoire d'investissement a été échantillonnée. Les correspondances de investment_trajectoriesl'index.[5, 3]
objective_costsliste [flottante]Valeur de la fonction objectif pour chaque trajectoire d'investissement, classées de la plus faible à la plus élevée.[0.98, 1.25]
sharpe_ratiosliste [flottante]Performance ajustée au risque (ratio de Sharpe) pour chaque trajectoire d'investissement. Classés par index.[1.1, 0.7]
returnsliste [flottante]Rendement attendu pour chaque trajectoire d'investissement. Classés par index.[0.15, 0.10]
rest_breachesliste [flottante]Écart maximal par rapport à la contrainte au sein de chaque trajectoire d'investissement. Classés par index.[0.0, 0.25]
transaction_costsliste [flottante]Coût de transaction estimé associé à chaque trajectoire d'investissement. Classés par index.[0.01, 0.02]
Cette page a-t-elle été utile ?
Signaler un bogue, une coquille ou proposer du contenu sur GitHub.