Riferimento API di Quantum Portfolio Optimizer
Qiskit Functions — strumenti predefiniti creati da organizzazioni partner — astraggono alcune parti del flusso di lavoro dello sviluppo software per semplificare e accelerare la scoperta di algoritmi su larga scala e lo sviluppo di applicazioni. Clicca qui per visualizzare la guida relativa a questa funzione di Qiskit.
Guida alle funzioni di Quantum Portfolio Optimizer per Qiskit
Immissione
Gli argomenti di input della funzione sono descritti nell'elenco seguente. È necessario fornire i dati relativi alle risorse e altre specifiche del problema; inoltre, è possibile includere le impostazioni VQE per personalizzare il processo di ottimizzazione.
assets
Tipo: `json`
Dizionario con i prezzi degli asset. I dati devono essere strutturati come un oggetto JSON che contiene informazioni sui prezzi di chiusura di attività finanziarie in date specifiche. Il formato è il seguente:
- Chiave primaria (stringa): il nome o il simbolo ticker dell'attività finanziaria (ad esempio, « 8801.T »).
- Chiave secondaria (stringa): la data nel formato AAAA-MM-GG.
- Valore (numero): il prezzo di chiusura dell'attività alla data specificata. I prezzi possono essere inseriti sia in forma normalizzata che non normalizzata.
Si noti che tutti i dizionari devono avere la stessa chiave secondaria (date). Se un determinato elemento non riporta una data presente negli altri, è necessario inserire i dati per garantire la coerenza. Ad esempio, ciò può essere fatto utilizzando l'ultimo prezzo di chiusura registrato di tale titolo.
- Obbligatorio: sì
- Esempio:
{
"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,
...
},
...
}I dati relativi agli asset devono contenere, come minimo, i prezzi di chiusura alle (nt+1) * dt (vedi la qubo_settings sezione "Input") con indicazione dell'ora (ad esempio, per giorno).
qubo_settings
Tipo: `json`
Impostazioni di QUBO. La tabella seguente descrive le voci del qubo_settings dizionario. Creare il dizionario specificando il numero di passi nttemporali, il numero di qubit di risoluzione nq e il max_investment - oppure modificare altri valori predefiniti.
Nome | Tipo | Descrizione | Obbligatorio | Predefinito | Esempio |
|---|---|---|---|---|---|
nt | int | Numero di intervalli temporali | Vero | - | 4 |
nq | int | Numero di qubit di risoluzione | Vero | - | 4 |
max_investment | mobile | Numero massimo di unità monetarie investite in tutte le attività | Vero | - | 10 |
dt* | int | Intervallo di tempo considerato in ciascun passo temporale. L'unità allinea gli intervalli di tempo tra i campi nei dati delle risorse | No | 30 | - |
risk_aversion | mobile | Coefficiente di avversione al rischio | No | 1000 | - |
transaction_fee | mobile | Coefficiente delle commissioni di transazione | No | 0.01 | - |
restriction_coeff | mobile | Moltiplicatore di Lagrange utilizzato per garantire il rispetto dei vincoli del problema nell'ambito della formulazione QUBO | No | 1 | - |
- Obbligatorio: sì
ansatz_settings
Tipo: `json`
Valore predefinito: `None`
Impostazioni dell'ansatz. Per modificare le opzioni predefinite, creare un dizionario per il ansatz_settings parametro con le seguenti chiavi. Per impostazione predefinita, l'ansatz è impostato su "real_amplitudes", mentre entrambe le opzioni aggiuntive (vedi la tabella seguente) sono impostate su False.
Nome | Tipo | Descrizione | Obbligatorio | Predefinito |
|---|---|---|---|---|
ansatz* | STR | Metodo da utilizzare | No | "real_amplitudes" |
multiple_passmanager** | bool | Abilita la subroutine "multiple passmanager" (non disponibile per l'approccio "Tailored") | No | False |
dd_enable | bool | Aggiunge il disaccoppiamento dinamico | No | False |
* Approcci disponibili
real_amplitudescyclicoptimized_real_amplitudestailored(Solo peribm_torinoil backend, 7 risorse, 4 passi temporali e 4 qubit di risoluzione)
** Se multiple_passmanager è impostato su False, la funzione utilizza il gestore di passaggi predefinito di Qiskit con optimization_level=3. Se impostato su True, la multiple_passmanager subroutine mette a confronto tre gestori di passaggi: il precedente gestore di passaggi predefinito di Qiskit, un gestore di passaggi che mappa i qubit sulla catena dei vicini di primo grado della QPU e i servizi del transpiler AI. Viene quindi selezionato il gestore di passaggi con l'errore cumulativo stimato più basso.
- Obbligatorio: No
optimizer_settings
Tipo: `json`
Valore predefinito: `None`
Impostazioni dell'ottimizzatore. Questo parametro è un dizionario contenente alcune opzioni configurabili del processo di ottimizzazione.
Nome | Tipo | Descrizione | Obbligatorio | Predefinito |
|---|---|---|---|---|
primitive_options | json | Impostazioni della primitiva | No | - |
optimizer | STR | Ottimizzatore classico selezionato | No | "differential_evolution" |
optimizer_options | json | Configurazione dell'ottimizzatore | No | - |
Al momento, l'unica opzione di ottimizzazione disponibile è "differential_evolution".
Con i primitive_options``optimizer_options tasti e impostiamo dei dizionari con i seguenti parametri:
primitive_options
Nome | Tipo | Descrizione | Obbligatorio | Predefinito | Esempio |
|---|---|---|---|---|---|
sampler_shots | int | Numero di scatti del Sampler. | No | 100000 | - |
estimator_shots | int | Numero di scatti dell'Estimator. | No | 25000 | - |
estimator_precision | mobile | Precisione desiderata del valore atteso. Se specificata, verrà utilizzata la precisione al posto del estimator_shots. | No | None | 0.015625 · (1 / √4096) |
max_time | int o str | Il tempo massimo per cui una sessione di esecuzione può rimanere aperta prima di essere chiusa forzatamente. Può essere specificato in secondi (int) o come stringa, ad esempio "2h 30m 40s". Deve essere inferiore al limite massimo imposto dal sistema. | No | None | "1h 15m" |
optimizer_options
Nome | Tipo | Descrizione | Obbligatorio | Predefinito |
|---|---|---|---|---|
num_generations | int | Numero di generazioni | No | 20 |
population_size | int | Dimensione della popolazione | No | 20 |
mutation_range | elenco | Fattore di mutazione massimo e minimo | No | [0, 0.25] |
recombination | mobile | Fattore di ricombinazione | No | 0.4 |
max_parallel_jobs | int | Numero massimo di processi QPU eseguiti in parallelo | No | 3 |
max_batchsize | int | Dimensione massima batch | No | 200 |
-
Il numero di generazioni valutate dall'evoluzione differenziale è
num_generationspari a +1, poiché è inclusa la popolazione iniziale. -
Il numero totale di circuiti si calcola come segue
(num_generations + 1) * population_size: -
L'utilizzo di una popolazione più ampia e di un numero maggiore di generazioni migliora generalmente la qualità dei risultati dell'ottimizzazione. Tuttavia, si sconsiglia di superare una dimensione della popolazione di 120 individui e un numero di generazioni superiore a 20 (ad esempio,
120 * 21 = 2520il numero totale di cicli), poiché ciò genererebbe un numero eccessivo di cicli, la cui elaborazione può risultare computazionalmente onerosa e richiedere molto tempo. -
La funzione consente di riprendere l'ottimizzazione precedente ed è sempre possibile aumentare il numero di generazioni (fornendo gli stessi dati di input, tranne che per
previous_session_ide un valore maggiore dinum_generations).
- Obbligatorio: No
backend
Tipo: `str`
Il nome del backend QPU
- Obbligatorio: No
- Esempio:
ibm_torino
previous_session_id
Tipo: `list` of `str`
Valore predefinito: Empty list
Elenco degli ID di sessione per recuperare i dati delle esecuzioni precedenti. Per riprendere un'esecuzione o recuperare i lavori elaborati in una o più sessioni precedenti, è necessario specificare l'elenco degli ID di sessione nel previous_session_id parametro. Ciò risulta particolarmente utile nei casi in cui un'operazione di ottimizzazione non sia stata completata a causa di un errore nel processo e sia necessario portare a termine l'esecuzione. Per farlo, è necessario specificare gli stessi argomenti utilizzati nell'esecuzione iniziale, insieme previous_session_id all'elenco come descritto.
- Obbligatorio: No
- Esempio:
["session_id_1", "session_id_2"]
apply_postprocess
Tipo: `bool`
Valore predefinito: `True`
Applicare una post-elaborazione SQD sensibile al rumore.
- Obbligatorio: No
- Esempio:
True
tags
Tipo: `list` of `str`
Valore predefinito: Empty list
Elenco dei tag per identificare l'esperimento.
- Obbligatorio: No
- Esempio:
["optimization", "quantum_computing"]
Il caricamento dei dati delle sessioni precedenti (per riprendere un'ottimizzazione) può richiedere fino a un'ora di tempo di calcolo classico. Ciò non comporta alcun consumo di risorse di runtime quantistico.
Assicurarsi che vengano rispettati i limiti relativi ai processi del servizio di elaborazione di IBM Quantum.
- Esempio:
sampler_shots <= 10_000_000. - Stimatore:
max_batchsize * estimator_shots * observable_size <= 10_000_000(per questa funzione, tutti i termini dell'osservabile commutano, quindiobservable_size=1).
Per ulteriori informazioni, consulta la guida sui limiti dei lavori.
Emissione
La funzione restituisce due dizionari: "result" dictionary, contenente i migliori risultati dell'ottimizzazione, tra cui la soluzione ottimale e il costo obiettivo minimo ad essa associato; e "metadata", con i dati relativi a tutti i risultati ottenuti durante il processo di ottimizzazione, insieme alle rispettive metriche.
Il primo dizionario si concentra sulla soluzione più performante, mentre il secondo fornisce informazioni dettagliate su tutte le soluzioni, compresi i costi oggettivi e altri indicatori rilevanti.
result dizionario
Tipo: dict[str, dict[str, float]]
Contiene la strategia di investimento nel tempo, in cui ogni data e ora corrisponde a ponderazioni di investimento specifiche per ciascuna attività (ogni ponderazione è l'importo dell'investimento rapportato all'importo totale dell'investimento).
- Esempio:
{'time_1': {'asset_1': 0.2, 'asset_2': 0.3, ...}, ...}
metadata dizionario
Tipo: dict[str, Any]
Dati generati durante l'analisi, tra cui soluzioni, costi e indicatori.
Nome | Tipo | Descrizione | Esempio |
|---|---|---|---|
session_id | STR | Identificatore univoco della sessione IBM Quantum. | "d0h30qjvpqf00084fgw0" |
all_samples_metrics | dict | Dizionario contenente vari parametri per ciascun campione post-elaborato, quali costi o vincoli. | Vedi descrizione |
sampler_counts | [d] ictstr, int | Dizionario in cui le chiavi sono rappresentazioni sotto forma di stringhe di bit delle soluzioni campionate e i valori sono il numero di occorrenze di ciascuna. | {"101010": 3, "111000": 1} |
asset_order | [liststr] | Elenco con l'ordine di investimento corrispondente delle attività in ciascun intervallo temporale nell'ambito delle strategie di investimento. | ["Asset_0", "Asset_1", "Asset_3"] |
QUBO | elenco[ [listfloat] ] | Matrice QUBO del problema. | [[-6.96e-01, 5.81e-01, -1.26e-02, 0.00e+00], ...] |
resource_summary | dict[str, [dic] tstr, float] | Riepilogo dei tempi di utilizzo della CPU e della QPU (in secondi) nelle diverse fasi del processo. | {'RUNNING: EXECUTING_QPU': {'CPU_TIME': 412.84, 'QPU_TIME': 87.22}, ...} |
Descrizione del all_samples_metrics dizionario
Nome | Tipo | Descrizione | Esempio |
|---|---|---|---|
investment_trajectories | [elencoelenco] | Strategie di investimento derivate da stati quantistici decodificati. | [[1, 2, 2], [1, 2, 1]] |
counts | [ascoltando] | Numero di volte in cui è stata campionata ciascuna traiettoria di investimento. L'indice corrisponde investment_trajectories. | [5, 3] |
objective_costs | elenco [galleggiante] | Valore della funzione obiettivo per ciascuna traiettoria di investimento, ordinato dal più basso al più alto. | [0.98, 1.25] |
sharpe_ratios | elenco [galleggiante] | Rendimento corretto per il rischio (indice di Sharpe) per ciascun percorso di investimento. Ordinati per indice. | [1.1, 0.7] |
returns | elenco [galleggiante] | Rendimento atteso per ciascun percorso di investimento. Ordinati per indice. | [0.15, 0.10] |
rest_breaches | elenco [galleggiante] | Deviazione massima dal vincolo all'interno di ciascuna traiettoria di investimento. Ordinati per indice. | [0.0, 0.25] |
transaction_costs | elenco [galleggiante] | Costo di transazione stimato associato a ciascun percorso di investimento. Ordinati per indice. | [0.01, 0.02] |