Skip to main content
IBM Quantum Platform

HI-VQE Chemistry - Una funzione Qiskit di Qunova Computing

Consulta la documentazione dell'API

Note

Le funzioni Qiskit sono una funzione sperimentale disponibile solo per gli utenti di IBM Quantum® Premium Plan, Flex Plan e On-Prem (tramite IBM Quantum Platform API) Plan. Sono in stato di anteprima e sono soggetti a modifiche.

  • Il codice presente in questa pagina è stato sviluppato utilizzando i seguenti requisiti. Si consiglia di utilizzare queste versioni o versioni più recenti.

    qiskit-ibm-runtime~=0.45.0
    

Panoramica

Nella chimica quantistica, il problema della struttura elettronica si concentra sulla ricerca delle soluzioni dell'equazione di Schrödinger elettronica - le funzioni d'onda quantistiche che descrivono il comportamento degli elettroni del sistema. Queste funzioni d'onda sono vettori di ampiezze complesse, con ogni ampiezza corrispondente al contributo di una possibile configurazione di elettroni.

Lo stato fondamentale è la funzione d'onda a più bassa energia del sistema e riveste una particolare importanza nello studio dei sistemi molecolari. L'approccio più accurato per il calcolo dello stato fondamentale considera tutte le possibili configurazioni degli elettroni, ma questo diventa intrattabile per sistemi più grandi, poiché il numero di configurazioni cresce esponenzialmente con le dimensioni del sistema.

L'Handover Iterative Variational Quantum Eigensolver (HI-VQE) è un innovativo metodo ibrido quantistico-classico per stimare con precisione lo stato fondamentale dei sistemi molecolari. Integra l'hardware quantistico con l'informatica classica, utilizzando processori quantistici per esplorare in modo efficiente le configurazioni degli elettroni candidati e calcolando la funzione d'onda risultante su computer classici. Generando funzioni d'onda compatte ma chimicamente accurate, HI-VQE migliora la ricerca e la scoperta nella chimica quantistica e nella scienza dei materiali.

Immagine che mostra una panoramica dell'algoritmo HI-VQE di Qunova

HI-VQE riduce la complessità computazionale del problema della struttura elettronica stimando in modo efficiente lo stato fondamentale con un'elevata precisione. Si concentra su un sottoinsieme accuratamente selezionato delle configurazioni di elettroni più rilevanti, ottimizzando sia l'accuratezza che l'efficienza.

Combinando i punti di forza dei computer classici e quantistici, HI-VQE perfeziona e migliora iterativamente la funzione d'onda della stima corrente. Le sue esclusive tecniche di costruzione del sottospazio contribuiscono a rendere più efficiente la selezione della configurazione, in modo che gli utenti abbiano un maggiore controllo computazionale e una migliore precisione nelle simulazioni di chimica quantistica.

Se desideri approfondire la conoscenza dell'algoritmo, puoi leggere il documento di ricerca correlato.


Descrizione

Il numero di configurazioni di elettroni per un sistema molecolare cresce esponenzialmente con le dimensioni del sistema. Tuttavia, per alcuni stati elettronici, come lo stato fondamentale, è comune che solo una piccola frazione di configurazioni contribuisca significativamente all'energia dello stato. I metodi di interazione di configurazione selezionata (SCI) sfruttano questa spazialità per ridurre i costi computazionali, identificando e concentrandosi sulle configurazioni più rilevanti. Questo sottoinsieme di configurazioni viene definito sottospazio.

HI-VQE sfrutta l'efficienza intrinseca dei computer quantistici per la rappresentazione dei sistemi molecolari, per aiutare la ricerca del sottospazio. Integra subroutine classiche e quantistiche per risolvere il problema della struttura elettronica con elevata precisione. A differenza dei metodi quantistici SCI esistenti, HI-VQE combina l'addestramento variazionale, la costruzione iterativa del sottospazio e lo screening della configurazione di pre-diagonalizzazione per migliorare l'efficienza riducendo le misure quantistiche, le iterazioni e i costi di diagonalizzazione classica. HI-VQE può quindi essere applicato a sistemi molecolari più grandi, che richiedono un maggior numero di qubit, e riduce il costo per risolvere un problema di una data dimensione con lo stesso grado di precisione.

Immagine che illustra in dettaglio ogni fase dell'algoritmo HI-VQE di Qunova.

Per calcolare lo stato fondamentale di un sistema, HI-VQE utilizza innanzitutto il pacchetto di chimica classica PySCF per generare una rappresentazione molecolare a partire da input forniti dall'utente, come la geometria molecolare e altre informazioni molecolari. Si entra quindi in un ciclo di ottimizzazione ibrido quantistico-classico, affinando iterativamente un sottospazio per rappresentare in modo ottimale lo stato fondamentale, riducendo al minimo il numero di configurazioni incluse. Il ciclo continua fino a quando non vengono soddisfatti i criteri di convergenza, come la dimensione del sottospazio o la stabilità dell'energia, dopodiché vengono emessi la funzione d'onda e l'energia dello stato fondamentale calcolate. Questi risultati possono essere utilizzati per costruire superfici di energia potenziale accurate ed eseguire ulteriori analisi del sistema.

Il ciclo di ottimizzazione si concentra sulla regolazione dei parametri di un circuito quantistico al fine di generare un sottospazio di alta qualità. HI-VQE offre tre opzioni di circuiti quantistici: excitation_preserving, efficient_su2 e LUCJ. L'ottimizzazione viene avviata in prossimità dello stato di riferimento di Hartree-Fock, data la sua idoneità generale. Il circuito viene quindi eseguito su un dispositivo quantistico e, dallo stato quantistico risultante, vengono campionate alcune configurazioni, che vengono poi restituite sotto forma di stringhe binarie. A causa del rumore dei dispositivi quantistici, alcune configurazioni campionate potrebbero risultare fisicamente non valide, in quanto non conservano il numero di elettroni o lo spin. HI-VQE risolve questo problema utilizzando il processo di ripristino della configurazione del pacchetto qiskit-addon-sqd, in modo che gli utenti possano correggere le configurazioni non valide oppure scartarle.

Le configurazioni valide vengono quindi sottoposte a una fase di screening opzionale per eliminare quelle che si prevede contribuiscano in misura minima. In questo modo si riduce la dimensione del sottospazio, diminuendo il costo della fase di diagonalizzazione. Se lo screening è abilitato, viene costruita un'hamiltoniana preliminare del sottospazio a partire dalle configurazioni valide e viene eseguita una diagonalizzazione con criteri di terminazione molto laschi. Sebbene l'accuratezza delle ampiezze risultanti per ogni configurazione sia bassa, è efficace per prevedere quali configurazioni lasciare fuori dal sottospazio in questa iterazione ed è veloce da calcolare.

Le configurazioni selezionate vengono aggiunte al sottospazio e l'hamiltoniana del sistema viene proiettata in questo sottospazio. Il sottospazio si aggiorna iterativamente, conservando le configurazioni più rilevanti tra le iterazioni. Questo approccio si contrappone ai metodi alternativi perché il circuito quantistico non ha bisogno di approssimare l'intero stato fondamentale a ogni passo.

Successivamente, l'hamiltoniana del sottospazio viene diagonalizzata in modo classico per ottenere l'autovalore più basso e l'autovettore corrispondente, che rappresentano un'approssimazione dello stato fondamentale e della sua energia. Man mano che la qualità del sottospazio migliora attraverso le iterazioni, il ground state calcolato approssima meglio il vero ground state. A questo punto si può eseguire un'ulteriore fase di screening per rimuovere dal sottospazio tutte le configurazioni che non hanno un contributo sostanziale allo stato fondamentale calcolato. Questa fase garantisce che il sottospazio trasportato nell'iterazione successiva sia il più compatto possibile. Questo viene valutato in base alle ampiezze restituite dalla diagonalizzazione, che rappresentano il contributo importante di ciascuna configurazione allo stato fondamentale calcolato.

Un controllo di convergenza determina poi se un ulteriore addestramento possa migliorare i risultati. In caso affermativo, si esegue una fase opzionale di espansione classica, si aggiornano i parametri del circuito quantistico per minimizzare ulteriormente l'energia calcolata e si ripete il processo. La fase di espansione classica genera configurazioni aggiuntive per il sottospazio, integrando le configurazioni campionate dal dispositivo quantistico. Identifica innanzitutto la configurazione con l'ampiezza maggiore nei risultati della diagonalizzazione, prima di generare nuove configurazioni con eccitazioni singole e doppie a partire dalla configurazione identificata. Il numero desiderato di queste configurazioni viene quindi aggiunto al sottospazio.

Una volta determinata la convergenza delle iterazioni, HI-VQE restituisce lo stato fondamentale calcolato (sotto forma di stati nel sottospazio e delle loro ampiezze nella funzione d'onda dello stato fondamentale), la sua energia e una misura di varianza dell'energia che indica se lo stato calcolato forma un autostato dell'hamiltoniana del sistema.

Gli utenti possono decidere il circuito quantistico utilizzato e il numero di scatti effettuati per ogni circuito quantistico, nonché controllare la dimensione del sottospazio o consentire la generazione classica di configurazioni aggiuntive per assistere le configurazioni generate in modo quantistico. In questo modo gli utenti possono adattare il comportamento di HI-VQE alle applicazioni desiderate.


Introduzione

Per prima cosa, richiedi l'accesso alla funzione. Successivamente, autenticati utilizzando la tua chiave API IBM Quantum® e, supponendo che tu abbia già salvato il tuo account nel tuo ambiente locale, seleziona la funzione Qiskit come segue:

import reprlib
from qiskit_ibm_catalog import QiskitFunctionsCatalog

catalog = QiskitFunctionsCatalog(channel="ibm_quantum_platform")

# Verify that you have access to the function
catalog.list()

Output:

[QiskitFunction(qunova/hivqe-chemistry),
 QiskitFunction(global-data-quantum/quantum-portfolio-optimizer),
 QiskitFunction(algorithmiq/tem),
 QiskitFunction(qedma/qesem),
 QiskitFunction(multiverse/singularity),
 QiskitFunction(ibm/circuit-function),
 QiskitFunction(q-ctrl/optimization-solver),
 QiskitFunction(colibritd/quick-pde),
 QiskitFunction(q-ctrl/performance-management),
 QiskitFunction(kipu-quantum/iskay-quantum-optimizer)]
# Load the function
function = catalog.load("qunova/hivqe-chemistry")

Esempio

Il primo esempio mostra come calcolare l'energia di stato fondamentale di una molecola NH3 utilizzando l'algoritmo HI-VQE.

Definire la geometria molecolare e le opzioni

La geometria molecolare di NH3 è fornita con coordinate cartesiane separate da ";" per ogni atomo.

# Define the molecule geometry
geometry = """
N         -0.85188       -0.02741        0.03141;
H          0.16545        0.00593       -0.01648;
H         -1.16348       -0.39357       -0.86702;
H         -1.16348        0.94228        0.06281;
"""

È possibile definire e fornire opzioni aggiuntive per il sistema molecolare nel seguente formato dizionario.

# Configure some options for the job.
molecule_options = {"basis": "sto3g"}
hivqe_options = {"shots": 100, "max_iter": 20}

Eseguire la funzione con gli input della geometria e delle opzioni.

# Run HI-VQE
job = function.run(
    geometry=geometry,
    # `backend_name` is the name of a backend with at least 16 qubits,
    # for example, "ibm_marrakesh".
    backend_name=backend_name,
    max_states=2000,
    max_expansion_states=10,
    molecule_options=molecule_options,
    hivqe_options=hivqe_options,
)

È buona norma stampare l'ID del lavoro della funzione, in modo da poterlo fornire nelle richieste di assistenza in caso di problemi.

print("Job ID:", job.job_id)

Output:

Job ID: e5ced6f2-fd1d-4244-a6aa-bd27cfb0cdee

Questo esempio utilizza quindi 16 qubit con 8 orbitali della base sto3g per una molecola NH3.

Per verificare lo stato del carico di lavoro della funzione Qiskit o per ottenere i risultati, procedere come segue:

print(job.status())

Output:

QUEUED

Al termine del lavoro, i risultati possono essere ottenuti con l'istanza result() .

result = job.result()

# Output can be long, so we display a shortened representation
shortened_result = reprlib.repr(result)
print(shortened_result)

Output:

{'eigenvector': [0.9824448589364075, 0.009527106392132133, 6.854074372058527e-08, 3.591500190038039e-07, 0.0012975231577544268, 2.310159709002111e-05, ...], 'energy': -55.52108557170985, 'energy_history': [-55.51901898989887, -55.52056881448526, -55.52065046778772, -55.520690696813716, -55.520691108428, -55.520708448092634, ...], 'energy_variance': 3.066239097617371e-10, ...}

Per accedere all'energia dello stato fondamentale, utilizzare il tasto "energia". La chiave "eigenvector" fornisce i coefficienti CI con la corrispondente notazione bitstring della configurazione degli elettroni memorizzata con gli "stati" dei risultati.

fci_energy = -55.521148034704126  # the exact energy using FCI method
hivqe_energy = result["energy"]
print(
    f"|Exact Energy - HI-VQE Energy|: "
    f"{abs(fci_energy - hivqe_energy) * 1000} mHa"
)
print(f"Sampled Number of States: {len(result['states'])}")

Output:

|Exact Energy - HI-VQE Energy|: 0.06246299427914437 mHa
Sampled Number of States: 1936

Licenze

Si noti che l'uso di questa funzione di Qiskit è limitato a problemi che richiedono al massimo 20 qubit, a meno che non si ottenga una licenza che conceda un limite superiore.

Per qualsiasi domanda relativa alle licenze, inviate un’e-mail a qiskit.support @ qunovacomputing.com.

Esempio di utilizzo di una funzione con licenza

Agli utenti con licenza viene assegnato un token di licenza, dopodiché devono utilizzare una libreria wrapper per inviare il proprio token di licenza alla funzione. La libreria wrapper può essere installata da PyPI con pip install hivqe-qiskit-function-utils. L'esempio riportato di seguito illustra come utilizzare questa libreria per inviare il proprio token di licenza quando si chiama la funzione.

import math
from qiskit_ibm_catalog import QiskitFunctionsCatalog
from hivqe_qiskit_function_utils import FunctionWrapper

catalog = QiskitFunctionsCatalog(
    token="your_qiskit_functions_catalog_token",
    channel="ibm_quantum_platform",
    instance="your_ibm_instance",
)

molecule_geometry = f"""
O 0 0 0;
H {-0.957*math.sin(math.radians(104.5)/2.0)} {0.957*math.cos(math.radians(104.5)/2.0)} 0;
H {0.957*math.sin(math.radians(104.5)/2.0)} {0.957*math.cos(math.radians(104.5)/2.0)} 0
"""

hivqe = FunctionWrapper(
    token="your_hivqe_license_token",
    function=catalog.load("qunova/hivqe-chemistry"),
)
job = hivqe.run(
    geometry=molecule_geometry,
    backend_name="ibm_torino",
    max_states=10000,
    max_expansion_states=1000,
    hivqe_options={"ansatz": "epa", "max_iter": 10},
)
result = job.result()

Prestazioni

Questa sezione mostra i calcoli di benchmark dimostrati di HI-VQE con un caso a 24-qubit per Li2S, un caso a 40-qubit per una molecola N2 e un caso a 44-qubit per un sistema FeP-NO.

Curva della superficie dell'energia potenziale di dissociazione per una molecola di Li2S a con 24 qubit

La curva PES è mostrata con il riferimento FCI e l'ipotesi iniziale di RHF, insieme all'errore energetico del riferimento FCI.

Immagine che mostra che HI-VQE produce soluzioni con un'accuratezza chimica pari a quella di una curva PES di riferimento classica per il sistema dell' Li2S.

I calcoli sono stati eseguiti con le seguenti geometrie e opzioni.

# Define Li2S geometries
Li2S_geoms = {
    "Li2S_1.51": "S        -1.239044    0.671232   -0.030374;Li       -1.506327    0.432403   -1.498949;Li       -0.899996    0.973348    1.826768;",
    "Li2S_2.40": "S        -1.741432    0.680397    0.346702;Li       -0.529307    0.488006   -1.729343;Li       -1.284307    0.989409    2.177209;",
    "Li2S_3.80": "S        -2.707255    0.674298    0.909161;Li        0.079218    0.552012   -1.671656;Li       -0.927010    0.931502    1.557063;",
}

# Configure some options for the job.
molecule_options = {
    "basis": "sto3g",
}
hivqe_options = {
    "shots": 100,
    "max_iter": 20,
}

results = []
for geom in ["Li2S_1.51", "Li2S_2.40", "Li2S_3.80"]:
    # Run HI-VQE
    job = function.run(
        geometry=Li2S_geoms[geom],
        backend_name=backend_name,  # can use any device with at least 38 qubits
        max_states=2000,
        max_expansion_states=10,
        molecule_options=molecule_options,
        hivqe_options=hivqe_options,
    )
    results.append(job.result())

I punti rossi rappresentano i risultati del calcolo HI-VQE per sei diverse geometrie, e tre geometrie corrispondenti a 1.51, 2.40, e 3.80 Angstrom sono fornite come input nella cella sopra.

Curva PES di dissociazione per una molecola di N2 con 40 qubit

La molecola di azoto è stata identificata come un sistema multireferenziale con grandi contributi di energia di correlazione oltre lo stato Hartree-Fock. Abbiamo condotto un calcolo di riferimento per la molecola N2 con base cc-pvdz, ( 20o,14e ) utilizzando la selezione degli orbitali attivi omo-lumo. Il numero dello spazio attivo completo (CAS) per rappresentare questo problema è 6.009.350.400. Non è possibile ottenere la soluzione del problema degli autovalori (per l'energia e la struttura elettronica) con questo numero di stati utilizzando un potente desktop ( 16cpu/64GB ). Con HI-VQE, gli utenti possono cercare in modo efficiente nel sottospazio degli stati CAS per trovare risultati chimicamente accurati, con un notevole risparmio di risorse di calcolo. I grafici seguenti mostrano la curva PES del calcolo HI-VQE di 40 qubit della dissociazione della molecola N2.

Immagine che mostra come HI-VQE produca soluzioni con un'accuratezza chimica pari a quella di una curva PES di riferimento classica per il sistema dell' N2.

Curva PES di dissociazione per ferro(II)-porfirina a cinque coordinati con un sistema NO con 44 qubit

Un altro sistema chimico interessante è un complesso ferro(II)-porfirina ( FeP ) con un ligando coordinato di ossido nitrico (NO), che rappresenta un sistema metalloporfirico biologicamente rilevante che svolge ruoli cruciali in vari processi fisiologici. In questo esempio, HI-VQE è stato utilizzato per stimare l'accurata curva della superficie di energia potenziale dell'interazione intermolecolare tra FeP e NO (energia di stato fondamentale per geometrie diversamente separate). Il sistema combinato ha 450 orbitali e 202 elettroni ( 450o,202e ) con base 6-31g(d ) in totale. La selezione degli orbitali attivi omo-lumo è stata utilizzata per calcolare il caso più piccolo dal caso reale con ( 22o,22e ). Dai seguenti risultati di benchmark, siamo stati in grado di raggiungere l'accuratezza chimica (> 1.6 mHa ) con un calcolo di chimica classica computerizzata allo stato dell'arte del riferimento CASCI(DMRG) ( 22o,22e ).

Immagine che mostra come HI-VQE produca soluzioni con un'accuratezza chimica pari a quella di una curva PES di riferimento classica per il sistema dell' FeP-NO.

Benchmark

  • La dimensione della matrice esatta è il numero di determinanti per la soluzione esatta, come FCI e CASCI.
  • I campioni di calcolo HI-VQE e il calcolo del sottospazio di esso (come la dimensione della matrice HI-VQE).
  • Il tempo totale include il tempo di esecuzione della QPU e l'esecuzione della funzione Qiskit con la CPU.
  • L'accuratezza è stimata dalla differenza di energia rispetto alla soluzione esatta.
Sistema chimico
Numero di qubit
Dimensione esatta della matrice
Dimensione della matrice HI-VQE
E(diff) da exact ( mHa )
Numero di iterazioni
Tempo totale
Utilizzo del runtime della QPU
NH3NH_3 (8o,10e)16313619360.08637 s34 s
Li2SLi_2S (10o,10e)206350439690.605250 s50 s
NH3NH_3 (15o,10e)309018009497290.905354 s54 s
N2N_2 (16o,14e)3213087360017982811.1096531 s121 s
3H2O3H_2O (18o,24e)363446220963994240.90245174 s130 s
N2N_2 (20o,14e)40600935040090120041.202146547 s258 s

Recupera i messaggi di errore

Se il carico di lavoro fallisce, lo stato sarà ERROR e la chiamata a job.result() solleverà un'eccezione:

job = function.run(
    geometry="invalid-geometry",  # This will cause an error
    backend_name=backend_name,
    max_states=2000,
    max_expansion_states=15,
    molecule_options=molecule_options,
    hivqe_options=hivqe_options,
)

job.result()

Output:

---------------------------------------------------------------------------
QiskitServerlessException                 Traceback (most recent call last)
Cell In[12], line 10
      1 job = function.run(
      2     geometry="invalid-geometry",  # This will cause an error
      3     backend_name=backend_name,
   (...)
      7     hivqe_options=hivqe_options,
      8 )
---> 10 job.result()

File ~/work/documentation/documentation/.tox/py311/lib/python3.11/site-packages/qiskit_serverless/core/job.py:253, in Job.result(self, wait, cadence, verbose, maxwait)
    251 if self.status() == "ERROR":
    252     if results:
--> 253         raise QiskitServerlessException(results)
    255     raise QiskitServerlessException(self.filtered_logs(include=r"(?i)error|exception"))
    257 if isinstance(results, str):

QiskitServerlessException: ["runner.UnknownRuntimeError: 'An unexpected error occurred during job execution. Please make sure that your inputs are valid. If you are still experiencing problems, you can contact the Qunova Computing support service at [email protected] and provide the Function job ID of this job for more assistance. -- https://docs.quantum.ibm.com/errors#1500'\n"]
job.status()

Output:

'ERROR'

Ottenere supporto

Per ricevere assistenza su questa funzione, puoi inviare un'e-mail a qiskit.support qunovacomputing.com

Se si desidera assistenza per la risoluzione di un errore specifico, fornire l'ID del lavoro di funzione che ha riscontrato l'errore.


Passi successivi

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