Référence de l'API Quantum Portfolio Optimizer
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.
Guide des fonctions de Quantum Portfolio Optimizer pour 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,
...
},
...
}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 |
|---|---|---|---|---|---|
nt | int | Nombre de pas de temps | Oui | - | 4 |
nq | int | Nombre de qubits de résolution | Oui | - | 4 |
max_investment | séparer | Nombre maximal d'unités monétaires investies dans l'ensemble des actifs | Oui | - | 10 |
dt* | int | Intervalle 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'actifs | Non | 30 | - |
risk_aversion | séparer | Coefficient d'aversion au risque | Non | 1 000 | - |
transaction_fee | séparer | Coefficient des frais de transaction | Non | 0.01 | - |
restriction_coeff | séparer | Multiplicateur de Lagrange utilisé pour respecter la contrainte du problème dans la formulation QUBO | Non | 1 | - |
- 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* | str | Méthode à utiliser | Non | "real_amplitudes" |
multiple_passmanager** | booléen | Active plusieurs sous-routines de gestion des passes (non disponible pour l'approche sur mesure) | Non | False |
dd_enable | booléen | Ajoute un découplage dynamique | Non | False |
* Approches possibles
real_amplitudescyclicoptimized_real_amplitudestailored(Uniquement pouribm_torinole 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_options | json | Paramètres de la primitive | Non | - |
optimizer | str | Optimiseur classique sélectionné | Non | "differential_evolution" |
optimizer_options | json | Configuration de l'optimiseur | Non | - |
À 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_shots | int | Nombre de prises de vue du Sampler. | Non | 100000 | - |
estimator_shots | int | Nombre de prises de vue de l'Estimator. | Non | 25000 | - |
estimator_precision | séparer | Niveau de précision souhaité pour la valeur attendue. Si elle est spécifiée, la précision estimator_shotssera utilisée à la place de. | Non | None | 0.015625 · (1 / racine carrée de 4096) |
max_time | int ou str | Duré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. | Non | None | "1h 15m" |
optimizer_options
Nom | Type | Description | Obligatoire | Par défaut |
|---|---|---|---|---|
num_generations | int | Nombre de générations | Non | 20 |
population_size | int | Taille de la population | Non | 20 |
mutation_range | liste | Facteur de mutation maximal et minimal | Non | [0, 0.25] |
recombination | séparer | Facteur de recombinaison | Non | 0.4 |
max_parallel_jobs | int | Nombre maximal de tâches QPU exécutées en parallèle | Non | 3 |
max_batchsize | int | Taille de lot maximale | Non | 200 |
-
Le nombre de générations évaluées par l'évolution différentielle est
num_generationsde + 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 = 2520le 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_idet d'une valeur accrue denum_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"]
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.
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, doncobservable_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_id | str | Identifiant unique de la session IBM Quantum. | "d0h30qjvpqf00084fgw0" |
all_samples_metrics | dict | Dictionnaire contenant divers indicateurs pour chaque échantillon post-traité, tels que les coûts ou les contraintes. | Voir la description |
sampler_counts | [d] ictstr, int | Dictionnaire 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"] |
QUBO | liste[ [listfloat] ] | Matrice QUBO du problème. | [[-6.96e-01, 5.81e-01, -1.26e-02, 0.00e+00], ...] |
resource_summary | dict[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_costs | liste [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_ratios | liste [flottante] | Performance ajustée au risque (ratio de Sharpe) pour chaque trajectoire d'investissement. Classés par index. | [1.1, 0.7] |
returns | liste [flottante] | Rendement attendu pour chaque trajectoire d'investissement. Classés par index. | [0.15, 0.10] |
rest_breaches | liste [flottante] | Écart maximal par rapport à la contrainte au sein de chaque trajectoire d'investissement. Classés par index. | [0.0, 0.25] |
transaction_costs | liste [flottante] | Coût de transaction estimé associé à chaque trajectoire d'investissement. Classés par index. | [0.01, 0.02] |