Skip to main content
IBM Quantum Platform

Riferimento API di Aqarios Constrained Quantum Optimizer

  • Qiskit Functions

    Qiskit Functions — strumenti preconfigurati realizzati da organizzazioni partner — astraggono alcune parti del flusso di lavoro di sviluppo software per semplificare e accelerare la scoperta di algoritmi e lo sviluppo di applicazioni su scala industriale. Clicca qui per visualizzare la guida relativa a questa funzione di Qiskit.

L'Aqarios Constrained Quantum Optimizer risolve problemi di ottimizzazione binaria con vincoli su hardware IBM Quantum®. Accetta problemi in formato LP, MPS o Luna Model e gestisce internamente tutte le operazioni di riformulazione, sintesi dei circuiti, transpilazione e avvio a caldo iterativo utilizzando il metodo QAOA ad angolo fisso con mixer XY.

La funzione viene caricata e richiamata come segue:

optimizer = catalog.load("aqarios/constrained-quantum-optimizer")
job = optimizer.run(problem=lp_str, backend_name="ibm_phoenix")
result = job.result()
Versione in anteprima

L'ottimizzatore quantistico con vincoli Aqarios è disponibile solo per gli utenti dei piani " IBM Quantum® Premium Plan ", "Flex Plan" e " On-Prem Plan ". È una versione in anteprima e soggetta a modifiche.


Input

Consulta l'elenco seguente per conoscere tutti i parametri di input accettati da questa API. I parametri obbligatori devono essere specificati in ogni chiamata; tutti gli altri sono facoltativi.

problem

Tipo: str

Il problema di ottimizzazione serializzato da risolvere. Sono supportati tre formati:

  • LP (*.lp): Formato di file LP standard esportato come stringa, ad esempio tramite DOcplex's export_as_lp_string()
  • MPS (*.mps): Formato file MPS standard esportato come stringa, ad esempio tramite DOcplex's export_as_mps_string()
  • Modello Luna : serializzazione Base64-encoded di un oggetto Aqarios Luna Model, ottenuta tramite model.encode_b64()

Il modello deve rappresentare un problema di ottimizzazione binaria, sia che si tratti di massimizzazione che di minimizzazione. I vincoli possono essere disuguaglianze o uguaglianze su variabili binarie. Le variabili intere sono supportate solo se vengono specificati chiaramente i limiti superiore e inferiore. Le variabili continue (a valori reali) non sono supportate e un modello che le contenga genera un errore con codice 4710. L'obiettivo e i vincoli possono essere di ordine superiore e non devono necessariamente essere solo lineari.

  • Obbligatorio: sì
  • Esempio di LP:
\Problem name: MIS
Minimize
  obj: ...
Subject To
  c1: ...
  ...
Binaries
  x_0 x_1
End

backend_name

Tipo: str or None

Valore predefinito: None

Il nome del backend di IBM Quantum su cui eseguire l'operazione (ad esempio "ibm_phoenix"). Se impostata su None, la funzione seleziona automaticamente il dispositivo disponibile meno utilizzato.

  • Obbligatorio: No
  • Esempio: "ibm_phoenix"

options

Tipo: dict or None

Valore predefinito: None

Opzioni di configurazione dell'algoritmo che regolano il comportamento del QAOA iterativo con avvio a caldo. Le opzioni sono specificate sotto forma di dizionario. Consulta l' elenco delle opzioni riportato di seguito per conoscere tutti i parametri disponibili e i relativi valori predefiniti.

  • Obbligatorio: No
  • Esempio: {"reps": 2, "num_parallel": 10, "postprocessing_level": 1}

Elenco opzioni

reps

Tipo: int

Valore predefinito: 1

Numero di ripetizioni dello strato QAOA (parametro di profondità del circuito pp ). Valori più elevati migliorano la qualità della soluzione, ma comportano circuiti più complessi e tempi di esecuzione più lunghi, il che può generare un maggiore rumore.

  • Opzioni: numero intero compreso in un intervallo [1, 10]
num_parallel

Tipo: int

Valore predefinito: 5

Numero di catene indipendenti di avvio a caldo eseguite in parallelo. Aumentando questo valore si migliora la probabilità di trovare soluzioni di alta qualità, ma si aumenta il consumo totale del budget di tentativi.

  • Opzioni: numero intero compreso in un intervallo [1, 100]
shots

Tipo: int

Valore predefinito: 500

Numero di misurazioni per iterazione per catena.

  • Opzioni: numero intero compreso in un intervallo [1, 10000]
total_shots

Tipo: int

Valore predefinito: 5000

Budget totale delle riprese per tutte le iterazioni di una singola catena di avvio a caldo. Il ciclo di iterazione termina per una catena una volta esaurito tale budget.

  • Opzioni: numero intero compreso in un intervallo [1, 1000000]
epsilon

Tipo: float

Valore predefinito: 0.1

Parametro di regolarizzazione per le probabilità di avvio a caldo. Impedisce che la distribuzione di probabilità si riduca a uno stato deterministico, preservando l'esplorazione nel corso delle iterazioni.

  • Opzioni: Intervallo di galleggiamento (0.01, 1)
beta

Tipo: float

Valore predefinito: 10

Temperatura inversa per la ponderazione di Boltzmann utilizzata per ricavare nuovi stati di avvio a caldo dai campioni di misura. Valori più elevati concentrano la massa di probabilità sui campioni a energia più bassa.

  • Opzioni: Galleggiante soddisfacente beta > 0
approximation_degree

Tipo: float

Valore predefinito: 1.0

Controlla il livello di approssimazione applicato alla funzione di costo e durante la transpilazione. Valori più bassi riducono la profondità del circuito introducendo approssimazioni che possono influire sulla qualità della soluzione.

  • Opzioni: Intervallo di galleggiamento [0.0, 1.0]
postprocessing_level

Tipo: int

Valore predefinito: 3

Efficacia della post-elaborazione classica applicata dopo ogni fase di campionamento per migliorare la qualità della soluzione. Livelli più elevati applicano una ricerca locale più aggressiva, a scapito di un aumento del tempo di elaborazione classico.

  • Opzioni: numero intero compreso in un intervallo [0, 3]
    • 0: Disattiva la post-elaborazione.
    • 1: Ricerca locale a passaggio singolo. Cerca di capovolgere ogni bit una volta in ordine casuale e mantieni i capovolgimenti che riducono l'energia.
    • 2: Ricerca locale a tre passaggi. Applicare il livello tre 1 volte in ordini casuali diversi.
    • 3: Ricerca locale avida. Applicare ripetutamente il bit-flip che comporta la massima riduzione di energia fino a quando non è più possibile ottenere ulteriori miglioramenti.
penalty_override

Tipo: float or None

Valore predefinito: None

Sovrascrive manualmente il valore della penalità utilizzato durante la conversione dei vincoli in termini di penalità aggiunti all'obiettivo. Per impostazione predefinita, la penalità viene calcolata automaticamente in base alla struttura del problema. Utilizzare questa opzione solo se il valore automatico produce risultati non validi.

  • Opzioni: impostare il valore desiderato penalty_override > 0oppure None utilizzare il valore automatico
use_session

Tipo: bool

Valore predefinito: False

Se utilizzare la modalità di sessione del servizi IBM Quantum Compute per l'esecuzione dei lavori. L’attivazione delle sessioni riduce il sovraccarico di esecuzione dei circuiti mantenendo aperta una connessione dedicata alla QPU durante tutte le iterazioni, il che può ridurre il tempo di esecuzione complessivo.

  • Opzioni: True / False
seed_transpiler

Tipo: int or None

Valore predefinito: None

Seed passato al transpiler che mappa il circuito sul backend selezionato. Impostare un valore fisso per garantire la riproducibilità della sintesi e del routing dei circuiti tra una sessione e l'altra. Quando è impostato su None, il transpiler genera i propri semi in modo non deterministico, pertanto l'esecuzione ripetuta dello stesso problema può produrre layout di circuiti diversi.

  • Opzioni: un numero intero qualsiasi, oppure None per un seme non deterministico
job_tags

Tipo: list[str]

Valore predefinito: []

Tag aggiuntivi associati a ogni processo di calcolo quantistico che la funzione invia alla QPU. La funzione assegna sempre ai propri lavori l'ID del lavoro "aqarios/constrained-quantum-optimizer"e il nome del problema; le voci qui riportate vengono aggiunte a tale elenco. Utilizza questa funzione per raggruppare o filtrare i lavori primitivi sottostanti nell'elenco dei carichi di lavoro.

  • Opzioni: Elenco di stringhe
  • Esempio: ["my-experiment", "mis-benchmark"]

Output

Il risultato di questa API è un dizionario restituito da job.result(), contenente le soluzioni ottimali individuate e i metadati associati.

Tipo: dict[str, Any]

Dizionario dei risultati contenente le assegnazioni delle soluzioni, il valore dell'obiettivo, lo stato di fattibilità e i metadati relativi al tempo di esecuzione.

Esempio:

{
    'solutions': [{'x_1': 0, 'x_2': 1, 'x_3': 0, 'x_4': 1, 'x_5': 1}],
    'solution_bitstrings': ['01011'],
    'raw_energy': -6.0,
    'objective_value': -6.0,
    'feasible': True,
    'metadata': {
        'resource_usage': {
            'RUNNING: MAPPING': {'CPU': 5.405},
            'RUNNING: OPTIMIZING_FOR_HARDWARE': {'CPU': 9.902},
            'RUNNING: WAITING_FOR_QPU': {'CPU': 25.456},
            'RUNNING: EXECUTING_QPU': {'QPU': 25.202},
            'RUNNING: POST_PROCESSING': {'CPU': 6.481}
        },
        'circuit_metrics': {
            'before_transpilation': {
                'num_qubits': 6,
                'gate_count': 42,
                'depth': 15,
                'two_qubit_gate_count': 12,
                'two_qubit_gate_depth': 7,
                'operations': {'rz': 12, 'p': 8, 'ry': 7, 'rzz': 4, 'cx': 3,
                               'xx_plus_yy': 3, 'global_phase': 2, 'cry': 2, 'x': 1}
            },
            'after_transpilation': {
                'num_qubits': 6,
                'gate_count': 254,
                'depth': 100,
                'two_qubit_gate_count': 48,
                'two_qubit_gate_depth': 33,
                'operations': {'rz': 78, 'sx': 122, 'cz': 48, 'measure': 6, 'x': 0}
            }
        },
        'solver_info': {
            'variable_mapping': {'x_1': 0, 'x_2': 1, 'x_3': 2, 'x_4': 3, 'x_5': 4}
        }
    }
}

Struttura dell'output

solutions

Tipo: list[dict[str, int]]

Un elenco delle migliori soluzioni individuate. Ogni voce è una mappatura che associa i nomi delle variabili (ad esempio, "x_0") alle loro assegnazioni binarie (0 o 1). L'elenco contiene più di una voce solo quando sono stati individuati più ottimi degeneri.

  • Esempio: [{"x_0": 1, "x_1": 0, "x_2": 1}]

solution_bitstrings

Tipo: list[str]

Le stesse soluzioni di solutions, codificate come stringhe di bit. La voce ii di questo elenco corrisponde alla voce ii di solutions. Utilizza metadata.solver_info.variable_mapping per verificare quale posizione di carattere di una stringa di bit corrisponda a quale variabile: il valore della variabile v è bitstring[variable_mapping[v]].

  • Esempio: ["101"]

objective_value

Tipo: float

Il valore oggettivo della soluzione ottimale individuata, espresso in termini del problema originale. Nei problemi di massimizzazione, questo valore è maggiore quando le soluzioni sono migliori; nei problemi di minimizzazione, invece, è minore.

  • Esempio: 42.0

raw_energy

Tipo: float

L'energia QAOA grezza della soluzione ottimale, sempre espressa come valore di minimizzazione. Ciò include eventuali clausole di penalità aggiunte durante la riformulazione del problema ed è utile per individuare le violazioni dei vincoli.

  • Esempio: -38.5

feasible

Tipo: bool

Se le soluzioni restituite soddisfano tutti i vincoli del modello di input originale. Un risultato può risultare non realizzabile se i valori di penalità non sono sufficienti a garantire il rispetto di tutti i vincoli a livello hardware.

  • Esempio: True

metadata

resource_usage

Tipo: dict

Consumo di risorse quantistiche e classiche suddiviso per fase dell'algoritmo (mappatura, ottimizzazione hardware, esecuzione su QPU, post-elaborazione).

  • Esempio:
{'RUNNING: MAPPING': {'CPU': 4.57},
 'RUNNING: OPTIMIZING_FOR_HARDWARE': {'CPU': 0.177},
 'RUNNING: WAITING_FOR_QPU': {'CPU': 9.238},
 'RUNNING: EXECUTING_QPU': {'QPU': 30},
 'RUNNING: POST_PROCESSING': {'CPU': 0.093}}

circuit_metrics

Tipo: dict or None

Numero di porte e profondità dei circuiti QAOA, riportati sia nella versione sintetizzata che in quella eseguita sul dispositivo. Il valore è quando None il problema è stato risolto durante la pre-elaborazione e non è stato eseguito alcun circuito (codice di errore 4712).

before_transpilation

Tipo: dict

Metriche del circuito QAOA astratto, così come sintetizzato dal problema, prima che venga mappato al backend.

after_transpilation

Tipo: dict

Parametri dei circuiti effettivamente inviati al dispositivo. Media calcolata su tutti i circuiti eseguiti durante l'ottimizzazione e arrotondata al numero intero superiore.

Entrambe le voci contengono gli stessi campi: ( num_qubits numero di qubit nel circuito), gate_count (numero totale di operazioni), depth (profondità del circuito), two_qubit_gate_count (numero di porte a due qubit), two_qubit_gate_depth (profondità considerando solo le porte a due qubit) e ( operations nome della porta associato al numero delle sue occorrenze).

solver_info

Tipo: dict or None

Ulteriori informazioni su come il risolutore ha rappresentato il problema.

variable_mapping

Tipo: dict[str, int]

Assegna a ciascun nome di variabile la posizione del carattere corrispondente nelle voci di solution_bitstrings.

  • Esempio: {"x_0": 0, "x_1": 1, "x_2": 2}

Gestione degli errori

Codice
Descrizione
4710Il modello di input non è supportato. Il modello contiene variabili continue (a valori reali), che la funzione non è in grado di risolvere, oppure variabili intere prive di limiti espliciti.
4711La stringa immessa non può essere analizzata per ottenere un modello. Verifica che problem sia una stringa valida di tipo LP, MPS o Luna Model.
4712Il modello è stato risolto in modo ottimale durante la fase di pre-elaborazione e non è stato eseguito alcun calcolo quantistico. Il risultato viene comunque restituito, con impostato metadata.circuit_metrics su None.
4719Errore imprevisto nella funzione interna. Contatta [email protected] indicando il tuo ID lavoro.
Condizioni di errore comuni
  • Tipi di variabili non supportati : la funzione risolve solo problemi discreti. Le variabili continue (a valori reali) non sono supportate, mentre le variabili intere devono avere un limite inferiore e uno superiore espliciti. Un modello che non rispetta questa regola genera un errore con codice 4710.
  • Formato del problema non valido : se la problem stringa non può essere analizzata come un modello LP, MPS o Luna valido, il processo fallisce con il codice di errore 4711.
  • Errori di convalida delle opzioni : se le chiavi o i valori delle opzioni esulano dagli intervalli specificati nella documentazione, il processo fallisce immediatamente con il codice di errore 1221.
Questa pagina è stata utile?
Segnala un bug, un errore di battitura o richiedi contenuti su GitHub.