Skip to main content
IBM Quantum Platform

Riferimento API di Quantum Portfolio Optimizer

  • Qiskit Functions

    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.


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

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
ntintNumero di intervalli temporaliVero-4
nqintNumero di qubit di risoluzioneVero-4
max_investmentmobileNumero massimo di unità monetarie investite in tutte le attivitàVero-10
dt*intIntervallo di tempo considerato in ciascun passo temporale. L'unità allinea gli intervalli di tempo tra i campi nei dati delle risorseNo30-
risk_aversionmobileCoefficiente di avversione al rischioNo1000-
transaction_feemobileCoefficiente delle commissioni di transazioneNo0.01-
restriction_coeffmobileMoltiplicatore di Lagrange utilizzato per garantire il rispetto dei vincoli del problema nell'ambito della formulazione QUBONo1-
  • 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*STRMetodo da utilizzareNo"real_amplitudes"
multiple_passmanager**boolAbilita la subroutine "multiple passmanager" (non disponibile per l'approccio "Tailored")NoFalse
dd_enableboolAggiunge il disaccoppiamento dinamicoNoFalse

* Approcci disponibili

  • real_amplitudes
  • cyclic
  • optimized_real_amplitudes
  • tailored (Solo per ibm_torino il 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_optionsjsonImpostazioni della primitivaNo-
optimizerSTROttimizzatore classico selezionatoNo"differential_evolution"
optimizer_optionsjsonConfigurazione dell'ottimizzatoreNo-
Nota

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_shotsintNumero di scatti del Sampler.No100000-
estimator_shotsintNumero di scatti dell'Estimator.No25000-
estimator_precisionmobilePrecisione desiderata del valore atteso. Se specificata, verrà utilizzata la precisione al posto del estimator_shots.NoNone0.015625 · (1 / √4096)
max_timeint o strIl 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.NoNone"1h 15m"

optimizer_options

Nome
Tipo
Descrizione
Obbligatorio
Predefinito
num_generationsintNumero di generazioniNo20
population_sizeintDimensione della popolazioneNo20
mutation_rangeelencoFattore di mutazione massimo e minimoNo[0, 0.25]
recombinationmobileFattore di ricombinazioneNo0.4
max_parallel_jobsintNumero massimo di processi QPU eseguiti in paralleloNo3
max_batchsizeintDimensione massima batchNo200
Nota
  • Il numero di generazioni valutate dall'evoluzione differenziale è num_generations pari 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 = 2520 il 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_id e un valore maggiore di num_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"]
Avvertenza

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.

Nota

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, quindi observable_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_idSTRIdentificatore univoco della sessione IBM Quantum."d0h30qjvpqf00084fgw0"
all_samples_metricsdictDizionario contenente vari parametri per ciascun campione post-elaborato, quali costi o vincoli.Vedi descrizione
sampler_counts[d] ictstr, intDizionario 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"]
QUBOelenco[ [listfloat] ]Matrice QUBO del problema.[[-6.96e-01, 5.81e-01, -1.26e-02, 0.00e+00], ...]
resource_summarydict[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_costselenco [galleggiante]Valore della funzione obiettivo per ciascuna traiettoria di investimento, ordinato dal più basso al più alto.[0.98, 1.25]
sharpe_ratioselenco [galleggiante]Rendimento corretto per il rischio (indice di Sharpe) per ciascun percorso di investimento. Ordinati per indice.[1.1, 0.7]
returnselenco [galleggiante]Rendimento atteso per ciascun percorso di investimento. Ordinati per indice.[0.15, 0.10]
rest_breacheselenco [galleggiante]Deviazione massima dal vincolo all'interno di ciascuna traiettoria di investimento. Ordinati per indice.[0.0, 0.25]
transaction_costselenco [galleggiante]Costo di transazione stimato associato a ciascun percorso di investimento. Ordinati per indice.[0.01, 0.02]
Questa pagina è stata utile?
Segnala un bug, un errore di battitura o richiedi contenuti su GitHub.