HI-VQE Chemistry - Une fonction Qiskit par Qunova Computing
Consultez la documentation de l'API
Les fonctions Qiskit sont une fonctionnalité expérimentale disponible uniquement pour IBM Quantum® Premium Plan, Flex Plan, et On-Prem (via IBM Quantum Platform API). Elles sont en cours de publication et peuvent être modifiées.
Le code figurant sur cette page a été développé selon les exigences suivantes. Nous recommandons d'utiliser ces versions ou des versions plus récentes.
qiskit-ibm-runtime~=0.45.0
Aperçu
En chimie quantique, le problème de la structure électronique consiste à trouver les solutions de l'équation électronique de Schrödinger - les fonctions d'onde quantiques décrivant le comportement des électrons du système. Ces fonctions d'onde sont des vecteurs d'amplitudes complexes, chaque amplitude correspondant à la contribution d'une configuration électronique possible.
L'état fondamental est la fonction d'onde de la plus basse énergie du système et revêt une importance particulière dans l'étude des systèmes moléculaires. L'approche la plus précise pour calculer l'état fondamental prend en compte toutes les configurations électroniques possibles, mais cela devient impossible pour les systèmes de grande taille, car le nombre de configurations croît de manière exponentielle avec la taille du système.
Le Handover Iterative Variational Quantum Eigensolver (HI-VQE) est une méthode hybride quantique-classique innovante qui permet d'estimer avec précision l'état fondamental des systèmes moléculaires. Il intègre le matériel quantique à l'informatique classique, en utilisant des processeurs quantiques pour explorer efficacement les configurations électroniques candidates et en calculant la fonction d'onde résultante sur des ordinateurs classiques. En générant des fonctions d'onde compactes mais chimiquement précises, HI-VQE favorise la recherche et la découverte en chimie quantique et en science des matériaux.
HI-VQE réduit la complexité de calcul du problème de la structure électronique en estimant efficacement l'état fondamental avec une grande précision. Il se concentre sur un sous-ensemble soigneusement sélectionné des configurations électroniques les plus pertinentes, optimisant à la fois la précision et l'efficacité.
En combinant les forces des ordinateurs classiques et quantiques, HI-VQE affine et améliore de manière itérative la fonction d'onde estimée actuelle. Ses techniques uniques de construction de sous-espaces contribuent à rendre la sélection des configurations plus efficace, de sorte que les utilisateurs disposent d'un meilleur contrôle informatique et d'une plus grande précision dans les simulations de chimie quantique.
Si vous souhaitez en savoir plus sur cet algorithme, vous pouvez consulter l'article de recherche associé.
Description
Le nombre de configurations électroniques pour un système moléculaire croît de manière exponentielle avec la taille du système. Toutefois, pour certains états électroniques, tels que l'état fondamental, il est courant que seule une petite fraction des configurations contribue de manière significative à l'énergie de l'état. Les méthodes d'interaction avec des configurations sélectionnées (SCI) exploitent cette rareté pour réduire les coûts de calcul en identifiant et en se concentrant sur les configurations les plus pertinentes. Ce sous-ensemble de configurations est appelé sous-espace.
HI-VQE tire parti de l'efficacité inhérente des ordinateurs quantiques pour représenter les systèmes moléculaires et faciliter la recherche de sous-espaces. Il intègre des sous-programmes classiques et quantiques pour résoudre le problème de la structure électronique avec une grande précision. Contrairement aux méthodes SCI quantiques existantes, HI-VQE combine l'apprentissage variationnel, la construction itérative de sous-espaces et le filtrage de configuration avant diagonalisation afin d'améliorer l'efficacité en réduisant les mesures quantiques, les itérations et les coûts de diagonalisation classique. HI-VQE peut donc être appliqué à des systèmes moléculaires plus grands qui nécessitent plus de qubits, et réduit le coût de résolution d'un problème d'une taille donnée avec le même degré de précision.

Pour calculer l'état fondamental d'un système, HI-VQE utilise d'abord le logiciel de chimie classique PySCF pour générer une représentation moléculaire à partir des données fournies par l'utilisateur, telles que la géométrie moléculaire et d'autres informations moléculaires. Il entre ensuite dans une boucle d'optimisation hybride quantique-classique, affinant itérativement un sous-espace pour représenter de manière optimale l'état fondamental tout en minimisant le nombre de configurations incluses. La boucle se poursuit jusqu'à ce que les critères de convergence, tels que la taille du sous-espace ou la stabilité de l'énergie, soient remplis, après quoi la fonction d'onde et l'énergie de l'état fondamental calculées sont émises. Ces résultats peuvent être utilisés pour construire des surfaces d'énergie potentielle précises et effectuer une analyse plus poussée du système.
La boucle d'optimisation vise à ajuster les paramètres d'un circuit quantique afin de générer un sous-espace de haute qualité. HI-VQE propose trois options de circuits quantiques : excitation_preserving, efficient_su2 et LUCJ. L'optimisation est initialisée à proximité de l'état de référence de Hartree-Fock, en raison de sa pertinence générale. Le circuit est ensuite exécuté sur un dispositif quantique, puis des configurations sont échantillonnées à partir de l'état quantique obtenu avant d'être renvoyées sous forme de chaînes binaires. En raison du bruit des dispositifs quantiques, certaines configurations échantillonnées peuvent être physiquement invalides, car elles ne respectent pas la conservation du nombre d'électrons ou du spin. HI-VQE résout ce problème en utilisant le processus de restauration de la configuration du paquet qiskit-addon-sqd, ce qui permet aux utilisateurs soit de corriger les configurations invalides, soit de les ignorer.
Les configurations valides font ensuite l'objet d'une étape de sélection facultative afin d'éliminer celles dont la contribution est jugée minimale. La dimension du sous-espace est ainsi réduite, ce qui diminue le coût de l'étape de diagonalisation. Si le filtrage est activé, un hamiltonien préliminaire du sous-espace est construit à partir des configurations valides et une diagonalisation est effectuée avec des critères de terminaison très souples. Bien que la précision des amplitudes obtenues pour chaque configuration soit faible, elle est efficace pour prédire les configurations à exclure du sous-espace à cette itération, et elle est rapide à calculer.
Les configurations sélectionnées sont ajoutées au sous-espace et l'hamiltonien du système est projeté dans ce sous-espace. Le sous-espace est mis à jour de manière itérative, en conservant les configurations les plus pertinentes d'une itération à l'autre. Cette approche contraste avec les autres méthodes car le circuit quantique n'a pas besoin d'approcher l'état fondamental complet à chaque étape.
Ensuite, l'hamiltonien du sous-espace est diagonalisé de manière classique pour obtenir la valeur propre la plus basse et son vecteur propre correspondant, représentant une approximation de l'état fondamental et de son énergie. Au fur et à mesure que la qualité du sous-espace s'améliore au fil des itérations, l'état fondamental calculé se rapproche davantage de l'état fondamental réel. Une étape supplémentaire de filtrage peut être réalisée à ce stade pour éliminer toutes les configurations du sous-espace qui ne contribuent pas de manière substantielle à l'état fondamental calculé. Cette étape permet de s'assurer que le sous-espace transporté dans l'itération suivante est aussi compact que possible. Cette évaluation est basée sur les amplitudes obtenues par la diagonalisation, car elles représentent l'importance de la contribution de chaque configuration à l'état fondamental calculé.
Un contrôle de convergence permet ensuite de déterminer si une formation supplémentaire permettrait d'améliorer les résultats. Si c'est le cas, une étape optionnelle d'expansion classique est effectuée, les paramètres du circuit quantique sont mis à jour pour minimiser encore l'énergie calculée, et le processus se répète. L'étape d'expansion classique génère des configurations supplémentaires pour le sous-espace, complétant les configurations échantillonnées à partir du dispositif quantique. Il identifie d'abord la configuration ayant la plus grande amplitude dans les résultats de la diagonalisation, avant de générer de nouvelles configurations avec des excitations simples et doubles à partir de la configuration identifiée. Le nombre souhaité de ces configurations est ensuite ajouté au sous-espace.
Une fois qu'il est établi que les itérations ont convergé, HI-VQE renvoie l'état fondamental calculé (sous la forme des états du sous-espace et de leurs amplitudes dans la fonction d'onde de l'état fondamental), son énergie et une mesure de la variance de l'énergie qui indique si l'état calculé forme un état propre du hamiltonien du système.
Les utilisateurs peuvent décider du circuit quantique utilisé et du nombre de prises de vue pour chaque circuit quantique, ainsi que contrôler la taille du sous-espace ou permettre la génération classique de configurations supplémentaires pour aider les configurations générées par le circuit quantique. Les utilisateurs peuvent ainsi adapter le comportement de HI-VQE à leurs applications.
Premiers pas
Commencez par demander l'accès à la fonction. Ensuite, authentifiez-vous à l'aide de votre clé API IBM Quantum® et, si vous avez déjà enregistré votre compte dans votre environnement local, sélectionnez la fonction Qiskit comme suit :
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")Exemple
Le premier exemple montre comment calculer l'énergie de l'état fondamental d'une molécule NH3 à l'aide de l'algorithme HI-VQE.
Définir la géométrie moléculaire et les options
La géométrie moléculaire de NH3 est fournie avec des coordonnées cartésiennes séparées par des ";" pour chaque atome.
# 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;
"""Des options supplémentaires peuvent être définies et fournies pour le système moléculaire dans le format de dictionnaire suivant.
# Configure some options for the job.
molecule_options = {"basis": "sto3g"}
hivqe_options = {"shots": 100, "max_iter": 20}Exécuter la fonction avec les entrées de géométrie et d'option.
# 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,
)Il est conseillé d'imprimer l'identifiant du travail de la fonction afin de pouvoir le fournir dans les demandes d'assistance en cas de problème.
print("Job ID:", job.job_id)Output:
Job ID: e5ced6f2-fd1d-4244-a6aa-bd27cfb0cdee
Cet exemple utilise 16 qubits avec 8 orbitales de la base sto3g pour une molécule NH3.
Pour vérifier l'état de votre charge de travail Qiskit Function ou récupérer les résultats, procédez comme suit :
print(job.status())Output:
QUEUED
Une fois le travail terminé, les résultats peuvent être obtenus à l'aide de l'instance 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, ...}
Pour accéder à l'énergie de l'état fondamental, utilisez la touche "énergie". La clé "vecteur propre" fournit les coefficients CI avec la notation de la chaîne de bits correspondante de la configuration électronique stockée avec les "états" des résultats.
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
Octroi de licence
Veuillez noter que l'utilisation de cette fonction Qiskit est limitée aux problèmes nécessitant au maximum 20 qubits, sauf si une licence accordant une limite supérieure a été obtenue.
Pour toute question concernant les licences, veuillez envoyer un e-mail à qiskit.support @ qunovacomputing.com.
Exemple d'utilisation d'une fonction sous licence
Les utilisateurs disposant d'une licence se voient attribuer un jeton de licence et doivent ensuite utiliser une bibliothèque de wrapper pour transmettre ce jeton à la fonction.
La bibliothèque de wrappers peut être installée à partir de PyPI avec pip install hivqe-qiskit-function-utils.
L'exemple ci-dessous montre comment utiliser cette bibliothèque pour transmettre votre jeton de licence lors de l'appel de la fonction.
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()lente
Cette section présente les calculs de référence de HI-VQE avec un cas de 24 qubits pour Li2S, un cas de 40 qubits pour une molécule N2 et un cas de 44 qubits pour un système FeP-NO.
Courbe de surface d'énergie potentielle de dissociation pour une molécule d' Li2S e à 24 qubits
La courbe PES est présentée avec la référence FCI et l'estimation initiale de RHF, ainsi que l'erreur énergétique de la référence FCI.
.
Les calculs ont été effectués avec les géométries et options suivantes.
# 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())Les points rouges représentent les résultats des calculs HI-VQE pour six géométries différentes, et trois géométries correspondant à 1.51, 2.40, et 3.80 Angstrom sont fournies comme entrée dans la cellule ci-dessus.
Courbe PES de dissociation pour une molécule d' N2 e à 40 qubits
La molécule d'azote a été identifiée comme un système multiréférence avec de grandes contributions d'énergie de corrélation au-delà de l'état Hartree-Fock. Nous avons effectué un calcul de référence pour la molécule N2 avec la base cc-pvdz, ( 20o,14e ) en utilisant la sélection des orbitales actives homo-lumo. Le numéro de l'espace actif complet (CAS) représentant ce problème est 6 009 350 400. Il n'est pas possible d'obtenir la solution du problème des valeurs propres (pour l'énergie et la structure électronique) avec ce nombre d'états à l'aide d'un ordinateur de bureau puissant ( 16cpu/64GB ). Avec HI-VQE, les utilisateurs peuvent rechercher efficacement le sous-espace des états CAS pour trouver des résultats chimiquement exacts tout en économisant considérablement les ressources de calcul. Les graphiques suivants montrent la courbe PES du calcul HI-VQE de 40 qubits de la dissociation de la molécule N2.
Courbe PES de dissociation pour le fer(II)-porphyrine à cinq coordonnées avec un système NO à 44 qubits
Un autre système chimique intéressant est un complexe fer(II)-porphyrine ( FeP ) avec un ligand coordonné d'oxyde nitrique (NO), qui représente un système métalloporphyrinique biologiquement pertinent qui joue un rôle crucial dans divers processus physiologiques. Dans cet exemple, HI-VQE a été utilisé pour estimer la courbe précise de la surface d'énergie potentielle de l'interaction intermoléculaire entre FeP et NO (énergie de l'état fondamental pour différentes géométries séparées). Le système combiné comporte 450 orbitales et 202 électrons ( 450o,202e ) avec 6-31g(d ) de base au total. La sélection de l'orbite active homo-lumo a été utilisée pour calculer le cas le plus petit à partir du cas réel avec ( 22o,22e ). D'après les résultats de référence suivants, nous avons pu atteindre la précision chimique (> 1.6 mHa ) avec un calcul de chimie informatique classique de pointe de la référence CASCI(DMRG) ( 22o,22e ).
Tests de performances
- La taille de la matrice exacte est le nombre de déterminants pour la solution exacte, comme FCI et CASCI.
- Le calcul HI-VQE échantillonne et calcule le sous-espace de l'échantillon (c'est-à-dire la taille de la matrice HI-VQE).
- Le temps total comprend le temps d'exécution du QPU et les exécutions de la fonction Qiskit avec le CPU.
- La précision est estimée à partir de la différence d'énergie par rapport à la solution exacte.
Système chimique | Nombre de qubits | Taille exacte de la matrice | Taille de la matrice HI-VQE | E(diff) from exact ( mHa ) | Nombre d'itérations | Temps total | Utilisation de la durée d'exécution du QPU |
|---|---|---|---|---|---|---|---|
| (8o,10e) | 16 | 3136 | 1936 | 0.08 | 6 | 37 s | 34 s |
| (10o,10e) | 20 | 63504 | 3969 | 0.60 | 5 | 250 s | 50 s |
| (15o,10e) | 30 | 9018009 | 49729 | 0.90 | 5 | 354 s | 54 s |
| (16o,14e) | 32 | 130873600 | 1798281 | 1.10 | 9 | 6531 s | 121 s |
| (18o,24e) | 36 | 344622096 | 399424 | 0.90 | 24 | 5174 s | 130 s |
| (20o,14e) | 40 | 6009350400 | 9012004 | 1.20 | 21 | 46547 s | 258 s |
Récupérer les messages d'erreur
Si votre charge de travail échoue, le statut sera ERROR et l'appel à job.result() soulèvera une exception :
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'
Obtenir de l'aide
Vous pouvez envoyer un e-mail à qiskit.support @ qunovacomputing.com pour obtenir de l'aide sur cette fonction.
Si vous souhaitez obtenir de l'aide pour résoudre une erreur spécifique, veuillez fournir l'identifiant de fonction du travail qui a rencontré l'erreur.
Etapes suivantes
- Demandez l'accès à la fonction en remplissant ce formulaire.
- Consultez la documentation de l'API relative à cette fonction Qiskit.
- Essayez le tutoriel Calculer la courbe de dissociation PES pour FeP-NO avec HI-VQE.
- Critique Pellow-Jarman, A., et al. (2025). HIVQE : Solveur itératif itératif d'équations quantiques pour des calculs efficaces en chimie quantique. arXiv prépublication arXiv:2503.06292.
- Essayez les courbes PES de dissociation avec le tutoriel d' HiVQE s Qunova.