Skip to main content
IBM Quantum Platform

Riferimento API di Kipu Quantum Iskay Quantum Optimizer

  • Qiskit Functions

    Qiskit Functions — strumenti preconfigurati realizzati 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.


Input

problem

Tipo: Dict[str, float]

I coefficienti del problema di ottimizzazione formulato in formato QUBO/HUBO o in formato spin. Per ulteriori informazioni sulla definizione del problema, consultare la sezione «Formati di problema ammessi ».

  • Obbligatorio: sì
  • Esempio: {"()": -21.0, "(0, 4)": 0.5,"(0, 2)": 0.5,"(0, 1)": 0.5,"(1, 3)": 0.5}

problem_type

Tipo: str

Specificare se i coefficienti del problema sono in formato binario (QUBO/HUBO) o in formato di spin. Le due possibilità sono "spin" o "binary". Per ulteriori informazioni sulla definizione del problema, consultare la sezione «Formati di problema accettati ».

  • Obbligatorio: sì
  • Esempio: "spin"

backend_name

Tipo: str

Nome del backend su cui eseguire la query

  • Obbligatorio: sì
  • Esempio: "ibm_fez"

Opzioni

Tipo: Dict[str, Any]

Opzioni per la gestione dell'invio dei dati hardware, come il numero di scatti. Le opzioni per questa funzione sono specificate come un dizionario annidato. Consulta l 'elenco completo delle opzioni e i relativi valori predefiniti.

  • Obbligatorio: No
  • Esempio: {"shots": 5000, "num_iterations": 3, "use_session": True, "seed_transpiler": 42}
Formati di problema accettati

Gli problem``problem_type argomenti e codificano un problema di ottimizzazione della forma

min(x1,x2,,xn)DC(x1,x2,,xn)\begin{align} \min_{(x_1, x_2, \ldots, x_n) \in D} C(x_1, x_2, \ldots, x_n) \nonumber \end{align}

Dove

C(x1,...,xn)=a+ibixi+i,jci,jxixj+...+k1,...,kmgk1,...,kmxk1...xkmC(x_1, ... , x_n) = a + \sum_{i} b_i x_i + \sum_{i, j} c_{i, j} x_i x_j + ... + \sum_{k_1, ..., k_m} g_{k_1, ..., k_m} x_{k_1} ... x_{k_m}
  • Selezionando questa opzione problem_type = "binary", si specifica che la funzione di costo è in binary formato, il che significa che D={0,1}nD = \{0, 1\}^{n}, ovvero che la funzione di costo è scritta nella formulazione QUBO/HUBO.
  • D'altra parte, scegliendo problem_type = "spin", la funzione di costo viene espressa nella formulazione di Ising, dove D={1,1}nD = \{-1, 1\}^{n}.

I coefficienti del problema devono essere inseriti in un dizionario come segue:

{"()":a,"(i,)":bi,"(i, j)":ci,j,"(k1,...,km)":gk1,...,km,}\begin{align} \nonumber &\texttt{\{} \\ \nonumber &\texttt{"()"}&: \quad &a, \\ \nonumber &\texttt{"(i,)"}&: \quad &b_i, \\ \nonumber &\texttt{"(i, j)"}&: \quad &c_{i, j}, \\ \nonumber &\quad \vdots \\ \nonumber &\texttt{"(} k_1, ..., k_m \texttt{)"} &: \quad &g_{k_1, ..., k_m}, \\ \nonumber &\texttt{\}} \end{align}
  • Si prega di notare che le chiavi del dizionario devono essere stringhe contenenti una tupla valida di numeri interi non ripetuti.

Elenco opzioni

Iskay offre funzionalità di regolazione fine tramite parametri opzionali. Sebbene le impostazioni predefinite funzionino bene nella maggior parte dei casi, è possibile personalizzare il comportamento in base a esigenze specifiche:

shots

Tipo: `int`

Valore predefinito: 10000

Misurazioni quantistiche per iterazione (più alto = maggiore precisione)

num_iterations

Tipo: `int`

Valore predefinito: 10

Iterazioni dell'algoritmo (un numero maggiore di iterazioni può migliorare la qualità della soluzione)

use_session

Tipo: `bool`

Valore predefinito: True

Utilizza le sessioni " IBM " per ridurre i tempi di attesa

seed_transpiler

Tipo: `int`

Valore predefinito: None

Set per la compilazione di circuiti quantistici riproducibili.

Ottimizzazione dei semi : si noti che seed_transpiler è impostato su None per impostazione predefinita. Ciò consente l'avvio del processo di ottimizzazione automatica del transpiler. In tal caso None, il sistema avvierà una prova con più seed e selezionerà quello che produce la migliore profondità del circuito, sfruttando appieno la potenza del max_trials parametro per ciascun livello di transpile.

direct_qubit_mapping

Tipo: `bool`

Valore predefinito: False

Mappare direttamente i qubit virtuali ai qubit fisici

job_tags

Tipo: `List[str]`

Valore predefinito: None

Tag personalizzati per il monitoraggio delle attività

preprocessing_level

Tipo: `int`

Valore predefinito: 0

Intensità della pre-elaborazione del problema (0-3).

Livelli di pre-elaborazione (0-3) : particolarmente importanti per problemi di grandi dimensioni che attualmente non rientrano nei tempi di coerenza dell'hardware. Livelli di pre-elaborazione più elevati consentono di ottenere profondità di circuito inferiori grazie alle approssimazioni nella trasposizione del problema:

  • Livello 0 : Percorsi precisi e più lunghi
  • Livello 1 : buon equilibrio tra precisione e approssimazione, con l'esclusione solo dei cancelli con angoli che rientrano nel decimo percentile più basso
  • Livello 2 : approssimazione leggermente più accurata, che esclude i gate con angoli nel 20° percentile più basso e utilizza approximation_degree=0.95 nella transpilazione
  • Livello 3 : Livello massimo di approssimazione, con l'eliminazione dei gate nel 30° percentile più basso e l'utilizzo approximation_degree=0.90 di nella transpilazione
postprocessing_level

Tipo: `int`

Valore predefinito: 2

Livello di affinamento della soluzione (0-2).

Livelli di post-elaborazione (0-2) : controlla l'intensità dell'ottimizzazione classica, compensando gli errori di inversione di bit con un numero variabile di passaggi avidi di una ricerca locale:

  • Livello 0 : 1 passaggio
  • Livello 1 : 2 passaggi
  • Livello 2 : 3 passaggi
transpilation_level

Tipo: `int`

Valore predefinito: 0

Prove di ottimizzazione del transpiler (0-5).

Livelli di transpilazione (0-5) : controllano le impostazioni avanzate di ottimizzazione del transpiler per la compilazione dei circuiti quantistici. Ciò può comportare un aumento dei costi generali tradizionali e, in alcuni casi, potrebbe non modificare la complessità del circuito. Il valore 2 predefinito, in genere, consente di ottenere il circuito più piccolo ed è relativamente veloce.

  • Livello 0 : Ottimizzazione del circuito DCQO scomposto (layout, instradamento, pianificazione)
  • Livello 1 : Ottimizzazione di PauliEvolutionGate e successivamente del circuito DCQO scomposto ( max_trials=10 )
  • Livello 2 : Ottimizzazione di PauliEvolutionGate e successivamente del circuito DCQO scomposto ( max_trials=15 )
  • Livello 3 : Ottimizzazione del PauliEvolutionGate circuito DCQO e del circuito risultante dalla sua scomposizione ( max_trials=20 )
  • Livello 4 : Ottimizzazione del PauliEvolutionGate circuito DCQO e del circuito risultante dalla sua scomposizione ( max_trials=25 )
  • Livello 5 : Ottimizzazione di PauliEvolutionGate e successivamente del circuito DCQO scomposto ( max_trials=50 )
transpile_only

Tipo: `bool`

Valore predefinito: False

Disponibile per gli utenti che desiderano analizzare l'ottimizzazione dei circuiti senza eseguire l'algoritmo quantistico nella sua interezza. Utile per l'analisi dei circuiti, gli studi di ottimizzazione della profondità e la comprensione degli effetti della transpilazione prima di procedere all'esecuzione completa.

Prestazioni a livello di transpile

Aumentare il numero di max_trials con valori più elevati per transpilation_level comporterà inevitabilmente un aumento del tempo di transpilazione, ma potrebbe non modificare sempre il circuito finale: ciò dipende in larga misura dalla struttura e dalla complessità specifiche del circuito. Per alcuni circuiti o problemi, tuttavia, la differenza tra 10 tentativi (livello 1) e 50 tentativi (livello 5) può essere notevole, quindi sperimentare questi parametri potrebbe essere la chiave per trovare una soluzione.


Emissione

Tipo: `Dict[str, Any]`

Soluzione e metadati. La struttura varia a seconda transpile_only dell'opzione scelta.

Dizionario dei risultati

La struttura del dizionario dei risultati dipende dalla modalità di esecuzione:

solution

Tipo: `Dict[str, int]`

La soluzione ordinata della mappa in cui le chiavi sono indici di variabili (sotto forma di stringhe) ordinati numericamente e i valori sono i corrispondenti valori delle variabili (1/-1 per i problemi di spin, 1/0 per i problemi binari).

  • Modalità: Standard
  • Esempio: {'0': -1, '1': -1, '2': -1, '3': 1, '4': 1}

solution_info

Tipo: `Dict[str, Any]`

Informazioni dettagliate sulla soluzione.

  • Modalità: Standard
  • Esempio: {'bitstring': '11100', 'cost': -13.8, 'seed_transpiler': 42, 'mapping': {0: 0, 1: 1, 2: 2, 3: 3, 4: 4}}
  • Esecuzione standard : quando il parametro opzionale transpile_only=False, consultare il dizionario riportato di seguito.
bitstring

Tipo: `str`

La rappresentazione come stringa di bit grezza della soluzione.

cost

Tipo: `float`

Il rapporto costo/energia associato alla soluzione.

seed_transpiler

Tipo: `int`

Il seme casuale utilizzato dal transpiler che ha generato questo risultato.

mapping

Tipo: `Dict[int, int]`

La mappatura originale da qubit a variabile utilizzata nel calcolo.

qpu_time

Tipo: `float`, optional

Il tempo di esecuzione della QPU in secondi.

Note sulla mappatura delle variabili
  • Il solution dizionario viene ricavato dalla stringa di bit della soluzione, utilizzando mapping l'oggetto per indicizzare le variabili.
  • Quando problem_type=spin utilizziamo l'assegnazione 11,011 \rightarrow -1, \quad 0 \rightarrow 1.
  • Le chiavi nel dizionario delle soluzioni sono indici variabili ordinati numericamente come stringhe.

prob_type

Tipo: `str`

Il tipo di problema di ottimizzazione (spin o binary)

  • Modalità: Standard
  • Esempio: 'spin'

transpilation_info

Tipo: `Dict[str, Any]`

Analisi del circuito e dettagli sulla transpilazione.

  • Modalità: Solo transpilazione
  • Esempio: {'best_seed': 42, 'transpilation_time_seconds': 50.06, 'transpiled_circuit': {'depth': 576, 'gate_count': 4177, 'num_qubits': 156, 'width': 176, 'operations': {'sx': 1325, 'rx': 891, 'cz': 783, 'rz': 650, 'rzz': 466, 'x': 42, 'measure': 20}}}
  • Analisi della transpilazione : quando si utilizza il parametro opzionale transpile_only=True, consultare il dizionario riportato di seguito:
best_seed

Tipo: `int`

Il seme ottimale individuato per la trapiantatura.

transpilation_time_seconds

Tipo: `float`

Tempo impiegato per il processo di transpilazione.

transpiled_circuit

Tipo: `Dict`

Analisi del circuito comprendente quanto segue:

  • depth

Tipo: `int`

Spessore del circuito (numero di strati)

  • gate_count

Tipo: `int`

Numero totale di porte nel circuito.

  • num_qubits

Tipo: `int`

Numero di qubit utilizzati.

  • width

Tipo: `int`

Larghezza del circuito.

  • operations

Tipo: `Dict[str, int]`

Conta di ciascun tipo di porta utilizzato.

Questa pagina è stata utile?
Segnala un bug, un errore di battitura o richiedi contenuti su GitHub.